我有一个使用率很高的服务器(运行 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 会更新,但仅在网站加载后才会更新。