Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/462.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 具有大量AJAX调用的web页面的性能_Javascript_Php_Ajax - Fatal编程技术网

Javascript 具有大量AJAX调用的web页面的性能

Javascript 具有大量AJAX调用的web页面的性能,javascript,php,ajax,Javascript,Php,Ajax,我的项目是一个web移动应用程序,它使用大量对服务器的AJAX调用来刷新和检索数据,我使用php脚本从服务器获取数据 我注意到,用户也告诉我,有时候应用程序的性能非常慢。 我相信这是因为AJAX调用,我检查了我的服务器,当这个问题发生时,它没有任何性能问题 这是非常奇怪的,因为当问题发生时,应用程序向服务器发送AJAX请求,直到出现超时错误为止。当再次发送时,它执行得非常完美,并在不到一秒钟的时间内给出答案 我检查了类似的问题,发现使用php会话可以创建文件锁,每个请求都需要等到前面的结束。 此

我的项目是一个web移动应用程序,它使用大量对服务器的
AJAX
调用来刷新和检索数据,我使用php脚本从服务器获取数据

我注意到,用户也告诉我,有时候应用程序的性能非常慢。 我相信这是因为
AJAX
调用,我检查了我的服务器,当这个问题发生时,它没有任何性能问题

这是非常奇怪的,因为当问题发生时,应用程序向服务器发送
AJAX
请求,直到出现超时错误为止。当再次发送时,它执行得非常完美,并在不到一秒钟的时间内给出答案

我检查了类似的问题,发现使用
php会话
可以创建文件锁,每个请求都需要等到前面的结束。 此问题将取消AJAX异步进程。 我没有使用会话,但我的情况可能与此相同,
php脚本执行文件锁定或其他类型的锁定并取消异步

有人知道我该怎么解决这个问题吗


谢谢。

在创建包含大量AJAX请求的应用程序时,请记住以下几点:

一,。减少Ajax请求的数量

对于初学者来说,完全不发出Ajax请求就可以获得最佳性能。这看起来既明显又毫无意义:放弃Ajax并不是更好的Ajax,是吗?但也有一些方法可以让你既吃又吃。第一个目标不是删除所有Ajax请求,而是删除不必要的请求。或者,如果你想表现得咄咄逼人,也可以减少不太必要的请求。例如,如果您的脚本每分钟执行相同的Ajax请求,请查看每两分钟执行一次是否合理。如果是这样的话,那么您已经将请求数量减半了

二,。明智地选择AJAX请求触发的事件

您需要注意何时何地发出AJAX请求。应该仔细分析事件和用户操作的重新排序,以随着用户体验、数据管理和流的增加减少AJAX请求。例如,假设您有一个页面,用户可以在其中动态地重新排序项目列表。一方面,您可能会尝试对顺序中的每个更改执行一个Ajax请求(可能该请求会将新的顺序保存在数据库中)。然而,用户可能会进行多次更改,导致多次请求,而事实上,真正重要的只是最终的顺序。一个简单的解决方案是添加一个提交按钮,供用户单击并在此时执行单个Ajax请求

三,。适当时使用GET请求

说到GET请求类型,您还应该知道GET请求的性能往往比POST好。为公平起见,您使用的决定应主要基于请求的细节:

  • GET请求旨在从服务器检索信息。
  • POST请求旨在引起服务器反应,例如更新数据库记录、发送电子邮件等。
但是GET请求通常更快,所以如果有任何关于哪一个是最合适的问题,那么就不要过度使用GET

四,。减少传输的数据量

Ajax给web页面带来的一个好处是,它们可以最大限度地减少需要在客户机和服务器之间来回传输的数据量。这仅仅是因为完整的网页HTML、CSS、JavaScript和各种媒体不需要通过浏览器下载和重新绘制,只需确认用户名可用或获取最新的股票报价即可。但是可以编写Ajax请求本身来发送更多或更少的数据

对于初学者,您可以限制服务器端资源将哪些实际数据传输回JavaScript。接下来,您应该选择最佳的数据格式:

  • 纯文本
  • JavaScript对象表示法(JSON)
  • 可扩展标记语言(XML)
与GET和POST一样,在选择数据格式时还有其他因素,但请注意,纯文本通常会传输最少的数据位,而XML可能是冗长的。当然,JSON和XML能够表示比纯文本更复杂的数据,但不要将纯文本视为一种选项

在更高级的级别上,您可以在返回数据之前压缩服务器上的数据。现代浏览器能够很好地处理压缩后的数据,尽管在GZip和解压两端数据所需的额外处理中存在折衷。传输
gzip
数据是一个更高级的概念,但应该放在你的雷达上

五,。对重复数据使用缓存

利用浏览器缓存。这仅适用于Ajax用于请求信息的情况,而不适用于将数据发送到服务器的情况

缓存的要点是:浏览器将存储站点资源的本地副本,这样它就不需要在后续请求中(在特定的时间范围内)重新下载它们。浏览器缓存资源的尝试也适用于通过GET方法发出的Ajax请求(这可能会在调试过程中引起麻烦)。因此,如果GET请求是可缓存的,则可以提高Ajax的性能

但是在使用缓存时要非常小心,并注意可用资源的阈值


另请阅读以下内容:

  • (此链接中提供的信息基于.NET,但可以使用相同的概念)
  • (与问题无关。仅供在申请中尽可能作为另一种选择考虑)

我知道这是非常基本和普遍的