Chrome只是没有完成加载JS文件

2022-08-30 18:29:01

我正在编写一个应用程序,其中包含该部分中大约12个简短的JS文件(我知道,我应该合并它们并在结束之前移动它们;在生产中会到达这些文件)<head><body>

麻烦的是,当我尝试在Chrome中加载应用程序时,有些文件会立即加载,而有些文件根本无法完成加载!Chrome一直尝试加载12个JS文件,直到我点击“停止”之前,它从未呈现过该页面。

当我点击停止时,HTML被呈现并且JS文件失败,如下图所示:

JS Load errors

请注意,每次尝试时,不同的 JS 文件都会失败!它不是每次都卡住的同一个文件!

检查失败文件的标头显示“警告:请求尚未完成”。文件有时会卡在“正在接收”中几分钟!

enter image description here

现在这是有趣的部分,在点击停止后,如果我专注于总控件并按Enter键,所有JS文件都会立即加载,应用程序可以正常工作!

在服务器端,我正在使用Apache,PHP和MySQL。我是否在Apache中配置了错误的东西?

经过2个艰苦的日子后的状态:zilch,什么都没有,nada,这让我发疯。我尝试过从不同的机器运行代码,尝试更改apache缓存设置,并在javascript中更改了无数内容,但没有任何效果。最糟糕的是,没有人能指出问题所在!


答案 1

一种可能性是您启用了“保持活动状态”,但它无法正常工作。我以前见过这个。浏览器建立与服务器的最大连接数(通常为6个)以下载前几个文件(CSS,JS等),然后这些连接在超时之前不会释放。我的症状与您的症状不完全相同 - 超时时间为20秒,之后所有内容都将分批加载6秒 - 但这仍然可能是原因。

在 Apache 配置(大多数系统上为 httpd.conf)中,查找该行(如果缺少该行,请添加该行)并将其设置为 。KeepAliveOff


答案 2

不仅仅是一个答案,以下是我如何解决问题。

我会尝试的一件事是一次注释掉一个标签并重新加载,以查看阈值的位置。另外,由于这可能是服务器配置问题,因此我会在每次尝试后重新启动它,以便获得一个干净的石板,可以这么说,即在尝试之间不保留任何状态。

我会尝试通过尝试从你最喜欢的语言的脚本中请求各种Javascript来获得更多提示。理想情况下,我会尝试逐个GETting脚本(例如使用curl)在请求之间等待几毫秒。我想我也会在这里达到一个门槛。例如,每秒获取一个脚本是有效的,但是当请求太接近时,服务器就会卡住。

如果仍然没有线索,我会使用tcpdump来观察浏览器和服务器之间的流量。好吧,这可能有点太低了!

但也许我会使用netstat来查看浏览器与服务器并行打开多少个连接来获取资源,并查看我们是否达到了并发限制。

很抱歉,这是一个解决方案,但我希望你能得到一些想法,最后我很好奇知道你的问题是什么!