我有一个功能来检查管理员是否禁用了某个功能/模块。
该函数如下所示(在functions.php中):
function function_enabled($function_module) {
include("dbconnect.php");
if ($function_module == "changelogs" OR $function_module == "news" OR $function_module == "calendar" OR $function_module == "groups" OR $function_module == "settings" OR $function_module == "eat" OR $function_module == "weather" OR $function_module == "usertext" OR $function_module == "login") {
$sql = $db->query("SELECT enabled FROM functions WHERE function_name = '$function_module'");
$row = $sql->fetch_object();
$return = $row->enabled;
return $return;
}
}
这就是我使用该函数的方法(在任何其他php文件中):
include("functions.php");
if(function_enabled("weather") == 1) {
//do the weather stuff here
} else {
echo"Function disabled";
}
现在我的问题:这个功能的性能如何?这会导致相对较高的性能命中吗?有没有更好/更快的方法来检查是否启用了一个功能,或者这个脚本是否正常?
更新1
现在,我将这些多个查询合并为一个,以便所有值都在一个数组中。
function compare_id($a, $b) {
if ($a['id'] == $b['id']) return 0;
return ($a['id'] < $b['id']) ? -1 : 1;
}
$sql = $db->query("SELECT function_name, enabled, id FROM functions");
$function_array = array();
while ($row = mysqli_fetch_assoc($sql)) {
$function_array[] = $row;
}
usort($function_array, compare_id);
if($function_array[0]['enabled'] == 1) {
echo"changelogs enabled<br>";
} else {
echo"changelogs disabled<br>";
}
if($function_array[2]['enabled'] == 1) {
echo"calendar enabled<br>";
} else {
echo"calendar disabled<br>";
}
if($function_array[7]['enabled'] == 1) {
echo"usertext enabled<br>";
} else {
echo"usertext disabled<br>";
}
if($function_array[8]['enabled'] == 1) {
echo"login enabled<br>";
} else {
echo"login disabled<br>";
}
if($function_array[4]['enabled'] == 1) {
echo"settings enabled<br>";
} else {
echo"settings disabled<br>";
}
这种方法更快吗?
答案 0 :(得分:1)
看起来不错。它给你问题吗?表或索引中的数据库查询可能存在性能问题。
一般来说,你不应该从一开始就建立性能。而是建立起功能的东西,然后回到阻塞点所在的选择。有高负载的Web服务使用简单的框架(Ruby on Rails,Laravel)。他们只需优化2-5%的负载代码。当你知道阻塞点在哪里以及它为什么会窒息时,你可以选择如何选择。它应该优化,还是应该用另一种语言重写。
你的功能表是否经常变化?如果没有,你可以将其导出到文件。然后PHP可以读取一次并将其作为数组存储在Memory中。引用数组的速度会快<major version>.<minor version>.<build number>.<revision>
而没有数据库吞吐量问题。
答案 1 :(得分:1)
function function_enabled($function_module) {
$_FUNCTION_MODULE = array ("changelogs", "news", "calendar", "groups", "settings", "eat", "weather", "usertext", "login");
require_once ("dbconnect.php");
if (in_array($function_module, $_FUNCTION_MODULE) {
$query = $db->query("SELECT enabled FROM functions WHERE function_name = '$function_module'");
$row = $query->fetch_object();
$isEnabled = $row->enabled;
return $isEnabled;
}
return NULL;
}