【问题标题】:After many ajax request the page is getting slower and can not be used多次ajax请求后页面变慢无法使用
【发布时间】:2018-06-17 14:48:25
【问题描述】:

我使用这个 ajax 脚本:

$.ajaxSetup ({
        // Disable caching of AJAX responses
        cache: false
    });

    function getRandomInt() {
      return Math.floor(Math.random() * Math.pow(10,6));
}

    $(document).ready(function(){

        $('#edit_in_buy_usd').click(function(){
            $.post("edit_id.php?rnd=" +getRandomInt(), 

                   {edit_id: $('#edit_in_buy_usd').val()}, 

                   function(data){

                  $('#id').html(data);

                }
            );

        });

});

按下按钮后,我创建了一个变量,该变量将转到 edit_id.php ,执行某些过程并将结果返回到 id="id" 的同一 Div。一切都很完美,但是......在按下按钮大约 30-40 次后,页面开始运行超慢。我阅读了很多主题,我添加了一些东西,但我在 Ajax 技术方面没有太多经验......并且无法单独处理......如果你帮助我,我将非常感谢你..提前谢谢你!

【问题讨论】:

  • 为什么要发送 30-40 个请求?你想达到什么目的?也许您可以将其减少到更少的请求。另外——你的反应有多大?也许您发送的数据过多。太多的 HTML 会导致这个问题。
  • 该页面是一个经常被点击的表格,因此它被收集请求,在 div 中重新加载的信息很大......但我相信有一些方法可以清除它例如,在每次请求后从浏览器中获取。
  • 如果您也控制服务器端,您可能会检查是否可以选择只发回更新而不是“大”的东西
  • 一定要考虑@user2413548 所说的。以响应式、重复的方式重新加载整个数据集通常会导致灾难。这是关于仅发回更改,而不是所有内容。
  • 您可能需要考虑使用 JSON,并使用给定的参数构建必要的 HTML。

标签: php jquery ajax ajax-request


【解决方案1】:

好吧,我知道这个问题是很久以前提出的,但万一以后有人在寻找某种答案。我只是想补充一点,我在这个网站上读到了一些东西:https://www.phpclasses.org/blog/post/277-Fix-the-AJAX-Requests-that-Make-PHP-Take-Too-Long-to-Respond.html 所以基本上它教的是一种优化你的网站的方法,以防你使用 PHP

如果你使用PHP会话,你必须使用函数session_start(),这样当你调用它时,PHP会加载会话文件并序列化它以通过$_SESSION访问变量,但它保持被脚本阻止的文件。

所以该网站的建议是,在您完成验证后,使用session_write_close 将释放文件。

为什么你应该这样做的答案是因为当你同时发出 AJAX 请求并且你使用会话来验证或其他什么时,服务器将阻止文件直到脚本结束,然后将执行下一个请求。

所以我建议验证和发布,如果它们是您以后想要使用的一些数据,请考虑将值保存在普通的 PHP 变量中,而不是每次都使用 $_SESSION 超级数组。

这只是可能会提高您的服务器响应速度的东西,它并不是对所提问题的绝对答案,我真的希望它对您有所帮助,并希望您找到最佳编程实践来加快您的网站!

【讨论】:

  • 如果你使用`session_write_close ()`你仍然可以访问$_SESSION超级数组但是不会进行更改,我建议将它保存在一个变量中以防你使用该函数防止将来出现逻辑错误
【解决方案2】:

而不是从服务器脚本中检索所有表数据:

$('#id').html(data);

尝试像这样将新行数据附加到表中:

$("#id").append(data);

服务器端脚本必须返回这样的值:<tr><td>test</td><td>test</td></tr>

【讨论】:

  • 在这种情况下不要累积ajax请求,而是DIV一个接一个地重复..在我的情况下,DIV中的信息必须更新
  • 在 chrome、firefox 中使用开发者控制台通过 Web 控制台中的network 选项卡或在响应变慢或有响应速度慢的页面的浏览器(内部工具)的任务管理器上的memory usage 进行故障排除和调试内存泄漏。
  • @FilipIvanov 它可能有两个问题:(1) 来自服务器的响应在某些请求后变慢,(2) 网页内存泄漏和浏览器选项卡变慢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多