【发布时间】:2010-09-19 13:19:16
【问题描述】:
我正在开发一个具有某种实时更新的网站。 现在该网站是使用数据集当前 ID 的 javascript 变量生成的。 然后在几秒钟的时间间隔内,通过当前 ID 进行 AJAX 调用,如果有新的内容,服务器将其与最新的 ID 一起返回,然后在 javascript 中更新。 很简单,但是问题来了。
如果用户多次打开同一个页面,每个页面都会执行此 AJAX 请求,这会产生繁重的服务器负载。
现在我想到了以下方法:
网站加载了当前时间戳和当前数据集 ID 的 javascript 变量。 例如,我想要的刷新间隔是 3 秒。
在网站中,间隔计数器每秒钟计数一次,每次时间戳达到(timestmap % 3===0) 返回 true 的状态时,都会更新内容。
链接看起来像http://www.example.com/refresh.php?my-revision=123×tamp=123456
现在这应该确保每个浏览器窗口调用相同的 URL。 然后我可以打开浏览器级别的缓存。
但我不太喜欢这种解决方案。 我宁愿在 Cookie 中添加另一层数据共享。 这应该不是什么大问题,我可以将每个请求存储在一个由时间戳和数据修订命名的 cookie 中,TTL 为 10 秒左右,然后先检查它的存在。
但是
页面将同时执行请求。因此,浏览器缓存和 cookie 的整个逻辑可能无法正常工作,因为请求是同时发生的,而不是一个接一个。
所以我考虑将当前连接限制为 1 个服务器端。但是我至少需要一个额外的虚拟主机,因为我真的不想为整个页面这样做。 这让我遇到了有关跨站点策略的问题!
当然有一些超级复杂的负载平衡解决方案/服务器端解决方案绑定到请求 uri 和 ip 地址或其他东西,但那都是极端的矫枉过正!
一定是通病!想想脸书聊天。我真的不认为他们会在您打开的每个窗口中完成所有请求...
有什么想法吗?我真的被这个卡住了!
也许我可以做一些跨窗口的 Javascript 通信?如果它们都在同一个域上,应该不是问题吗?
我可以做的当然是服务器端缓存。这至少避免了数据库连接和密集计算......但它仍然是我想避免的请求。
【问题讨论】:
标签: javascript html ajax partial-page-refresh