我正在编写一个应用程序,其中包含<head>
部分中的大约12个简短的JS文件(我知道,我应该合并它们并在<body>
结束之前移动它们;会在那些时候到达在生产中)
问题在于,当我尝试在Chrome中加载应用时,某些文件立即加载,而有些文件从未完成加载! Chrome一直在尝试加载12个JS文件,但从不渲染页面直到我点击“停止”。
当我点击停止时,呈现HTML并且JS文件失败,如下图所示:
请注意,每次尝试时,不同的JS文件都会失败!它不是每次都被卡住的同一个文件!
检查失败文件的标题显示“警告:请求尚未完成”。文件卡在“接收”有时会持续很长时间!
现在这是有趣的部分,在点击停止后,如果我专注于omnibar并按回车键,所有JS文件立即加载并且应用程序正常工作!
在服务器端,我使用的是Apache,PHP和MySQL。我在Apache中错误配置了什么吗?
在两天艰苦的日子之后的状态:zilch,没什么,nada,这让我疯了。我尝试从不同的机器运行代码,尝试更改apache缓存设置并在javascript中更改了无数的东西,但没有任何工作。最糟糕的是没有人可以指出问题出在哪里!
答案 0 :(得分:16)
一种可能性是您启用了Keep-Alive并且无法正常工作。我之前见过这个。浏览器建立它与服务器的最大连接数(通常为6)以下载前几个文件(CSS,JS等),然后这些连接在超时之前不会被释放。我的症状与你的症状并不完全相同 - 超时为20秒,之后一切都将以6个批次加载 - 但这仍然是原因。
在您的Apache配置(大多数系统上为httpd.conf)中,查找KeepAlive
行(如果缺少则添加它)并将其设置为Off
。
答案 1 :(得分:5)
不仅仅是一个答案,这就是我如何解决这个问题。
我尝试的其中一件事就是一次评论一个标签并重新加载,以查看阈值的位置。此外,因为这可能是一个服务器配置问题,我会在每次尝试后重新启动它,以便有一个干净的平板,可以这么说,即尝试之间没有保留状态。
我试图通过尝试用您喜欢的语言从脚本中发出各种Javascripts的请求来获得更多提示。理想情况下,我会尝试逐个GETting脚本(比如curl)在请求之间等待几毫秒。我想我也在这里达到了一个门槛。比如,每秒获取一个脚本可以正常工作,但是当请求过于接近时,服务器就会卡住。
如果仍然没有线索,我会使用tcpdump来观察浏览器和服务器之间的流量。好的,这可能有点太低了!
但也许我会使用netstat来查看浏览器与服务器并行打开的连接数以获取资源,并查看我们是否达到了并发限制。
我很抱歉这是一个解决方案,但我希望你能得到一些想法,我很想知道你的问题到底是什么!
答案 2 :(得分:2)
我们得到完全相同的消息&#34;警告:请求尚未完成&#34;在浏览器中提出请求后。
请求本身大约是15 MB的JSON,它被送入Angular 1应用程序。这个请求大约需要2秒钟。在请求完成后,Angular摘要周期阻止浏览器超过12秒(这在请求期间通过分析可见)。在此期间,Chrome显示了这一点&#34;警告:请求尚未完成&#34;请求中的消息,但它实际上已经完成。
答案 3 :(得分:1)
尝试在https://www.stevesouders.com/cuzillion/中模拟问题 它应该说你的问题 - 铬或服务器
答案 4 :(得分:1)
检查Content-Length标头。服务器可能传递错误的值 - 比实际内容长度更好。
答案 5 :(得分:0)
有几个很好的答案,但如果你想要一个万无一失的方法,你可以使用PHP一次发送所有的脚本。如果问题确实是与服务器的连接太多,你可以添加一些像这样的HTML代码:
<script type="text/javascript" src="scripts/scripts.php />
然后在scripts.php
中使用include()
函数包含所有JavaScript文件,如下所示:
<?php
header(''); // control all your headers
include('jquery-1.9.1.min.js');
// rest of scripts
?>
如果没有其他工作,问题是连接过多,这应该可行。