连接数据库的功能的执行

克利普·大平

我有一个功能来检查一个功能/模块是否被管理员禁用。

该函数如下所示(在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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章