我有一个功能来检查一个功能/模块是否被管理员禁用。
该函数如下所示(在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>";
}
这种方法更快吗?
看起来还可以。它给您带来问题吗?从表或索引进行的数据库查询中可能存在性能问题。
通常,您不应该从一开始就为性能而构建。宁可先构建功能正常的东西,然后再回缩扼流点所在的地方。有一些使用简单框架的高负载Web服务(Ruby on Rails,Laravel),它们只需要优化负载的2-5%的代码即可。当您知道阻塞点在哪里以及为什么阻塞时,您可以对如何进行优化做出明智的选择。是否应该对其进行优化,或者我应该用另一种语言重新讨论一下。
您的功能表会经常更改吗?如果没有,您可以将其导出到文件中。然后,PHP可以读取一次并将其作为数组存储在内存中。引用阵列会更快,functions['weather'] == 1
而且不会产生数据库吞吐量问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句