我有一个JavaScript
脚本,使用Ajax
来调用PHP
页面,php页面从MYSQL
数据库中获取新的更新。
Ajax
请求每隔一秒重复一次。
每秒访问数据库是一个好习惯吗? 还有其他建议可以改善这项行动吗?
我想做一些类似于Twitter的实时更新,每一秒我只会检索新数据,如果没有新数据,什么都不会从数据库返回(但仍然每1秒访问一次数据库)
答案 0 :(得分:2)
确保您使用setInterval
不,但在您的ajax呼叫成功时使用回调,否则您可能会遇到卡住积压的呼叫。
此外,您可能希望使用一些长轮询方法,如websockets,comet或server-sent-events。
答案 1 :(得分:2)
我不会直接在我的UI和我的数据库之间设计依赖关系。
让UI每秒调用一次Web服务可能是合理的(取决于应用程序的需要)。该Web服务可以决定正确的策略是返回缓存结果还是从数据库中获取新数据(如果您每秒有几十个浏览器进行过几十次调用,那么您当然不希望在其中调用MySQL数十次一秒钟。)。
让UI调用Web服务并且Web服务与数据库交互解决了“UI应该多久要求更多数据?”的决策。从“我应该多久检查一次我的数据库以获取更新?”
答案 2 :(得分:0)
在如此短的时间内从数据库中反复拔出是绝对不错的做法,而且我从未遇到过需要完成的情况。难以要求在最后一秒内保证更新信息吗?如果没有,请将轮询之间的时间更改为每分钟一次,最小值。仅此一项就可以大幅提升速度,并显着降低服务器负载。
或者,如果您在用户执行某些操作时需要最新信息,则只需在该操作开始时轮询数据库。
答案 3 :(得分:0)
如果你真的需要每秒发出请求,可能最好使用SJAX(Synchronous)。这将有助于减少积压的电话。因为它在得到第一个响应后发出第二个请求。例如:
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使其同步