网站加载直至初始脚本完成

网站加载直至初始脚本完成

我有一个使用率很高的服务器(运行 plesk)。

我有一些很长的脚本,需要一段时间才能处理(巨大的 mysql 数据库)。我发现,在 1 个浏览器中,我运行脚本,在加载时,我无法查看网站的任何其他部分,直到脚本完成,似乎所有请求都已发出,但直到初始脚本完成,它们才会得到服务。

我以为这可能是服务器范围的问题,但事实并非如此。如果我使用另一台计算机,我可以正常查看网站,即使在同一台计算机上使用不同的浏览器,我也可以正常导航,同时脚本仍会加载。我认为这会限制每个会话的请求数。

这是正确的吗?有什么方法可以配置它以允许每个会话有 2-3 个其他请求吗?

当我和客户通电话时,我刚刚运行了一份很长的报告,但直到页面加载完毕才能够使用该网站或跟上他们所说的内容,这真的很糟糕?

克里斯

答案1

这取决于浏览器。虽然大多数现代浏览器允许大约 6 个并发 HTTP 1.1 连接,但旧版浏览器仅允许 2 个。请指定您使用的浏览器。

  • 如果你使用 IE,请参阅http://support.microsoft.com/kb/183110)。
  • 如果您使用 Firefox,请转到“about:config”,并设置值“network.http.max-persistent-connections-per-server”或甚至“network.http.max-connections-per-server”

如果您可以更改网页:通常,重新排序脚本和图像会有所帮助。以下链接很好地解释了这一概念:http://code.google.com/speed/page-speed/docs/rtt.html#PutStylesBeforeScripts

答案2

为什么不在页面加载后通过 AJAX 类型的请求加载那个耗时的 SQL。

 <BODY onLoad="ajax_request_for_large_query();">

    <script type="text/javascript">

    function ajax_request_for_large_query() {

      document.getElementById(‘mydiv’)= "Loading....";        

      if (window.XMLHttpRequest) { // Mozilla, Safari, IE7...
          http_request = new XMLHttpRequest(); 
      } else if (window.ActiveXObject) { // IE6 and older
          http_request = new ActiveXObject("Microsoft.XMLHTTP"); 
      } 
      http_request.onreadystatechange = Contents; 
      http_request.open(‘GET’, 'test.html', true); 
      http_request.send(null);

    }

    function Contents() { 
      if (http_request.readyState == 4) {
          if (http_request.status == 200) {
               document.getElementById(‘mydiv’)= http_request.responseText;
          } else {
              alert(‘There was a problem with the request.’);
          }
      } 
    }

    </script>

这不起作用,但是类似这样的事情。

javascript 函数从请求的 url 中获取数据,执行您的大型查询并返回结果,之后 html 中的 div 会更新,但仅在网站加载后才会更新。

相关内容