假设我正在创建一个会话类,相关实现如下:
public class Session()
{
private $id;
private $user;
}
Run Code Online (Sandbox Code Playgroud)
$user如果会话已登录,则该字段包含User类型的对象,如果会话未登录到站点,则该字段为null.这$id是会话ID.
假设我现在想知道用户是否已登录.显然我可以检查$ user是否为null,如果是,那么用户没有登录 - 如下所示:
public class Session()
{
private $id;
private $user;
public function isLoggedIn()
{
return !is_null($user);
}
}
Run Code Online (Sandbox Code Playgroud)
或者,我可以存储一个布尔会话变量,$loggedIn或者其他东西,在登录时设置为false,否则在构造函数中初始化为false,而不是测试:
public class Session()
{
private $id;
private $user;
private $loggedIn;
public function isLoggedIn()
{
return $loggedIn;
}
}
Run Code Online (Sandbox Code Playgroud)
一种方法会产生比另一种方法更好的性能吗?如果是这样,哪个,为什么?或者,出于与性能无关的任何原因,一种方法是否优于另一种方法?
我正在使用jQuery .hide()和.show()函数来显示加载消息,同时执行可能很长的同步webservice调用.
单击下面代码段中的按钮时,我希望文本"Some data"立即替换为"Loading ...",然后在5秒后返回"其他一些数据".
如您所见,这不是发生的事情:
function run_test() {
$('#test1').hide();
$('#test2').show();
long_synchronous_function_call()
$('#test2').hide();
$('#test1').show();
}
function long_synchronous_function_call() {
$('#test1').html('<p>Some other data</p>');
var date = new Date();
while ((new Date()) - date <= 5000) {}
}Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script>
<div id="test1">
<p>Some data</p>
</div>
<div id="test2" style="display:none">
<p>Loading...</p>
</div>
<button onclick="run_test()">Call a long synchronous function!</button>Run Code Online (Sandbox Code Playgroud)
实际上,"加载"元素永远不会出现,而"其他一些数据"只是在没有我们假设的用户在漫长的等待期间得到任何反馈的情况下被替换.
我能做些什么来确保jQuery 现在隐藏并显示我的元素,而不是一旦我的所有函数都执行完毕?