我有一个JavaScript
脚本,使用Ajax
调用PHP
页面,php页面从MYSQL
数据库获取新的更新。
Ajax
请求每秒钟重复一次。
每秒钟访问数据库是一个好的做法吗?有什么建议可以改进这个操作吗?
编辑
我想做一些像推特实时更新,每秒钟我将检索只新的数据,如果没有新的数据,什么也不会从数据库返回(但仍然访问数据库每1秒)
确保你是不是使用setInterval
,但使用回调时,你的ajax调用是成功的,否则你可能有一个调用积压卡住。
也可以使用一些长轮询方法,如websockets, comet或server-sent-events。
我不会直接设计UI和数据库之间的依赖关系。
让UI每秒调用一次web服务可能是合理的(取决于应用程序的需要)。web服务可以决定正确的策略是返回缓存的结果还是从数据库中获取新数据(如果你每秒有几十个来自几十个浏览器的调用,你肯定不想在一秒钟内调用MySQL几十次)。
让UI调用web服务和web服务与数据库交互,将"UI应该多久请求更多数据?"与"我应该多久检查数据库更新一次?"的决策解耦。
在这么短的时间内反复从数据库中提取数据从来都不是好的做法,我也从来没有遇到过需要这样做的情况。是否有硬性要求保证在最后一秒内更新信息?如果没有,请将轮询间隔时间更改为至少一分钟一次。这将提供一个主要的速度提升,并将大大减少您的服务器负载。
或者,如果在用户执行某个操作时需要最新的信息,只需在该操作开始时轮询数据库。
如果您确实需要在每秒钟内发出请求,那么使用sajax(同步)可能更好。这将有助于减少积压的电话。因为它在获得第一个响应后发出第二个请求。例如:
funftion get_data(){
if (window.XMLHttpRequest){// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.open("GET", url ,**false**);
xmlhttp.send(null);
return xmlhttp.responseText;
}
在open()方法中使用false使其同步