PHP性能问题

时间:2010-12-20 19:22:02

标签: php performance

想知道哪个会更好。该网站将由登录的人和不登录的人查看。对于已登录的用户,该站点几乎相同,只是他们有更多的权限。所以我想知道什么会更有效率。

// OPTION ONE

if(isLoggedIn()){
Write the whole web site plus the content the logged in user can access
}
else {
Write the whole website again, minus the content the logged in users can access. 
}

//OPTION TWO
Write the website content and inset the login function wherever i need to restrict the access, so the function would be called a few different times.

我想知道使用选项1对性能是否会更好,因为该函数首先会被检查一次,并且不需要再次检查,如果用户登录,则第一个块将被加载,如果如果用户未登录,则会忽略第一个块并加载第二个块。

5 个答案:

答案 0 :(得分:5)

都不是。最好的选择是检查isLoggedIn一次,保存结果,并在源内执行ifs以在每个地方交换。

答案 1 :(得分:5)

第二个选项可以忽略不计,但是更好的选择,因为它产生更少的代码重复。

此外,如果将isLoggedIn()的结果缓存在静态var中,则不必在每次调用该方法时执行所有检查。你可以检查你的静态var并提前跳出来。

function isLoggedIn() {
    static $is_logged_in = null;

    if(!is_null($is_logged_in)) {
        return $is_logged_in;
    }

    //... user is known not to have valid credentials

    $is_logged_in = false;

    // ... User has been validated 

    $is_logged_in = true;

    //...


}

答案 2 :(得分:2)

两个

您不希望每次都检查isLoggedIn()(特别是如果它会打到数据库),因为这样会很慢。但是你不希望有2个版本的HTML,因为它不可维护。

在顶部检查一次并设置变量(或使用会话变量并检查)。然后在HTML中使用if语句对变量进行确定要显示的内容。例如:

PHP:

$logged_in = false;
if(isLoggedIn() ) {
     $logged_in = true;
}

HTML:

<?php if($logged_in) { ?>
<div>
     Super-secret needs a login stuff
</div>
<?php } else { ?>
<div>
     Sorry! You have to login to see this cool stuff
</div>
<?php } ?>

答案 3 :(得分:1)

我会说,如果可以,请为未登录的人保留缓存版本,并在他们登录时生成所有内容。

答案 4 :(得分:1)

为了分离关注点,让客户端浏览器为登录用户添加功能可能是可行的。这意味着您发送一个静态版本的网站,Javascript检查客户端是否存在登录cookie。如果它存在,则显示几个额外的GUI元素或允许的链接。

明显的缺陷是JS禁用的浏览器不会看到任何东西。除非你使用CSS .optional-func修饰元素并禁用/启用:

if (!document.cookies.match(/login/)) { $(".user-funcs").hide(); }