想知道哪个会更好。该网站将由登录的人和不登录的人查看。对于已登录的用户,该站点几乎相同,只是他们有更多的权限。所以我想知道什么会更有效率。
// 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对性能是否会更好,因为该函数首先会被检查一次,并且不需要再次检查,如果用户登录,则第一个块将被加载,如果如果用户未登录,则会忽略第一个块并加载第二个块。
答案 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(); }