我的网站有多个部分每隔半秒钟检查一次更新,以便它可以提醒您有关邮件等。但是我觉得在站点上使用$ .post和setInterval可能会有点沉重。是否有更好的建议用于这些任务的替代方法?有没有更好的方式来创建异步更新而不使用setInterval?
回答
socket.io剖析数据库查询是,如果你使用nodeJS的路要走。否则,结帐this jQuery plugin,它具有优雅的降级实现,即使不如socket.io全面。
不错的插件!你不需要一些轻量级的Web服务器吗?一个庞大的Apache/PHP进程每个用户都会迅速地抨击服务器... – cmc 2012-03-13 09:36:12
取决于该项目,大多数早期的网站在任何时候都可能只有20-50个用户。这并不意味着你不能缩放PHP,看看wordpress.com或Facebook。 – soemarko 2012-03-13 14:12:58
当然你可以扩展PHP ......我只是怀疑websockets和PHP/Apache混合比长时间轮询和PHP/Apache更好。短轮询,当然没问题。 – cmc 2012-03-13 15:15:11
是的,虽然这不是微不足道的。
更好的方法
您可以使用长轮询(或“彗星”),这将打开一个连接,保持打开状态20秒左右,并立即重新打开它。服务器可以随时发送内容。
较新的浏览器提供websockets,它提供持久连接。
两者都相对复杂的代码,所以你需要some kind of framework来为你处理事情。另外,每个用户都需要打开一个连接,所以它只能用于像NodeJS这样轻量级的东西。
更简单的方法
如果你想要的东西更容易实现,我会建议您检查更新如你所说(这就是所谓的短轮询与长轮询/ WebSockets的对比吧)。你可以做一个简单的投票解决方案,像这样:
window.setInterval(function() {
// More lightweight than $.post
$.get('/datasource', function() {
/* do something */
});
}, 3000);
3秒间隔have been used in used before by high profile people。
如果事情变得缓慢,尝试在/数据源
- 1. 有没有更好的方式来更新我的访客端口号而不重新创建厨房实例?
- 2. 有没有更好的方法来重新创建$ _SERVER ['QUERY_STRING']
- 3. 有更好更短的方式来处理异步数据吗?
- 4. 有没有更好的方式来使用C++而不是轮询或选择异步TCP套接字?
- 5. 有没有更好的方式来动态创建动态函数,而不使用字符串格式和exec?
- 6. 有没有更好的方式来设计zend_forms而不是使用装饰器?
- 7. 有没有更好的方式来使用分派器更新UI元素?
- 8. 有没有更好的方式来使用jsx内的条件?
- 9. 有没有更好的方法来创建Rails子类?
- 10. 有没有更好的方法来创建这个模型? (Django)
- 11. 有没有更好的方法来创建Django REST Web服务?
- 12. 有没有更好的方法来创建此案例查询
- 13. 有没有更好的方式来使用jQuery切换
- 14. 有没有更好的方式来使用WebForms?
- 15. 有没有更好的方式来重复使用Matplotlib地块?
- 16. 有没有更好的方式来建立这个joomla网址?
- 17. 有没有比使用instanceof更好/更简洁的方式来有条件地创建一个类型? 【JAVA]
- 18. PHP有没有更好的方法来创建这个新的数组?
- 19. 有没有更好的方式在LinqToSQL中进行更新?
- 20. 有没有更好的方式去使用ui.router来构建布局?
- 21. 有没有更好的方式来更新我的支持bean而不提交表单?
- 22. 有没有更好的方式来制定这个实体框架4更新?
- 23. 有没有更好的方式达特
- 24. 异步更新没有AJAX的DIV层
- 25. 有没有更好的方法来处理转换异常?
- 26. 有没有更好的方式来递归调用当前方法,而不使用它的名字?
- 27. 有没有更好的方法?新来的c + +
- 28. ProgressBar没有从异步任务更新
- 29. 异步任务没有更新屏幕
- 30. 有没有办法使用通用DbCommand来执行异步更新?
setInterval绝对是设置异步定时事件的最佳方式。你说你有多个部分,每个部分都有自己的POST吗?这似乎是它的重要部分。最好有一个请求获取所有数据。 – loganfsmyth 2012-03-13 02:52:37
你应该真的放慢这些请求。每半秒发送一次HTTP请求就太多了。 20-30秒更理智一点。使用Web套接字是理想的。 – josh3736 2012-03-13 02:57:05
您可以增加间隔时间,这样不会占用太多的处理时间。这里是术语Comet下的方法http://en.wikipedia.org/wiki/Comet_(programming) – Joseph 2012-03-13 02:58:10