限制/延迟或其他优化以避免jQuery请求的停顿/错误500

时间:2011-07-26 08:04:03

标签: php jquery mysql

根据用户可以执行的一些操作,我有一个使用jQuery更新的页面。

我注意到请求可能会停止,或者服务器只会发出500错误。这可能表明同时发生了太多请求。

可以执行以下操作:

  • 用户点击图片的评级按钮,jQuery更新新评级。
  • 用户点击下一个按钮,jQuery以新的随机图像的JSON格式获取描述,jQuery更新几个html属性以显示新图像。
  • 用户激活无限滚动图库的滚动条,jQuery监视最后一个图像的位置,并在每次达到限制时获取新随机图像的描述。
  • 用户点击缩略图,jQuery更新属性以显示完整尺寸的图片。
  • 用户在字段中输入文本以发布评论,点击按钮,jQuery更新数据库。
  • 用户点击收藏夹按钮,jQuery用用户的收藏夹更新数据库。
  • 添加到此处,url重写以将图像请求重定向到图像大小调整脚本,该脚本获取原始图像并根据最大高度/宽度调整其大小,然后将其缓存在目录中。

可能发生的一件事是用户可以反复按下下一个按钮,或者他们连续操作滚动条。这反过来会导致很多请求“堆积”。

如何延迟操作(禁用按钮?在请求之间添加最小间隔?...)以及可以使用哪些其他形式的优化?

2 个答案:

答案 0 :(得分:1)

首先,您不仅可以获取下一张图片,还可以在一个请求中提取10张图片。 当用户反复点击下一个时,不要在每个下一个点击请求。使用0.5秒的setTimeout()触发请求,清除之前的超时。您可以记录点击“下一个”的次数,以便检索正确数量的图像。对于评级,收藏和评论,逻辑完全有效,因此您应该只确保服务器端的这些操作尽可能快。

  

用户激活无限滚动图库的滚动条,jQuery监视最后一个图像的位置,并在每次达到限制时获取新随机图像的描述。

再一次,不要逐个获取它们,分组获取它们

答案 1 :(得分:1)

你要检查这个限制的jQuery插件 - 去抖动事件:

http://benalman.com/projects/jquery-throttle-debounce-plugin/

这背后的想法和你的需求背后的想法是缓存用户请求,等待用户改变主意或要求更多,然后在一个ajax调用中转换所有这些请求。

您还可以缓存非实时用户请求,并仅在一段时间内提交一次。示例:

  • 第二个0 - 用户点击“最喜欢的”
  • 第二次30 - 用户发表评论
  • 秒100 - 您的脚本接收所有请求并将它们发送到服务器。

另一件事:你可能想看看你的服务器代码。也许可以利用优化gzipping http请求,使用memcached减轻数据库负载和响应时间等优点。