浏览器偶尔不会请求资源

3
我的网站包含代码,可以在JavaScript错误发生时将其记录回Web服务器(Apache),使用AngularJS中的$exceptionHandler组合来处理我在Angular代码中遇到的异常以及通过window.onerror处理发生在Angular之外的问题。最近记录的一些错误表明,客户端似乎随机地无法请求某个资源或另一个资源。到目前为止,我找不到未获取特定资源或浏览器或客户端设备出现问题之间的任何关联。例如,我的页面上的其中一个JavaScript资源名为“utility.js”。这包括一些全局函数和其他常见的网站内容。今天,一位iPhone用户(在iOS 10.3.2上)加载了一个页面并获取了页面的所有资源,除了utility.js(我查看了该会话的Apache访问日志,并且可以看到页面中识别的所有其他资源都被请求-并按正确顺序排序-但没有utility.js,并且在同一时间范围内的错误日志中没有任何内容)。一秒钟后,由于在utility.js中定义的全局函数未定义,从手机上向我们的服务器记录了JavaScript错误。
另一个(更常见的)例子是AngularJS在尝试访问HTML模板资源时生成$compile:tpload错误。我每天都会收到几个这样的错误。有问题的模板在不同实例中会有所不同,但在我审查过的情况下,在Apache日志中没有请求模板资源的证据。同一页的其他模板资源已经成功加载。在这种情况下需要注意的是,有时我会看到同一客户端在几分钟内多次记录有关同一资源的错误,这表明用户正在重新加载页面并遇到同样的问题,因此浏览器中似乎有某些“卡住”或阻塞的东西,但我无法想象是什么。
我相当自信这些资源不会被用户浏览器缓存,因为在我查看的情况下,页面上请求了其他资源,如果页面已经加载,这些资源本来就不应该被请求。
目前我真的不知道该怎么做才能解决这个问题。据我的了解,我没有办法获取有关我的页面的浏览器网络流量的任何可见性。
您对如何进一步诊断此问题有任何建议吗?

这只发生在手机上吗? - gforce301
不...最常见于手机上,但也在桌面客户端上观察到。我认为IE11特别喜欢这样做,但并不孤立。 - John Rix
让我稍微修改一下:大多数是Android + Chrome 58,但也观察到在其他设备/浏览器/版本以及桌面客户端上 - 到目前为止,在Windows 7或Windows 10上的IE11和Chrome 58。 - John Rix
1个回答

0

看起来这可能是导致(至少是相当大一部分的)$compile:tpload错误的原因,如果可能还有其他一些错误:

https://github.com/angular/angular.js/issues/14219

实际上,Chrome和Firefox是否不正确地为由于卸载页面(即重新加载或导航离开)而中止的XHR请求生成错误事件?在我的情况下,客户端必须有正在进行的请求以获取被中止的angular模板,当他们重新加载或导航离开时...也许他们在慢速网络连接上并且在加载页面时遇到问题,因此尝试重新加载。

我通过将PHP sleep()请求插入到其中一个模板中来重现错误,以防止Apache立即响应。如果我加载页面,然后重新加载或导航离开,$compile:tpload错误会相应记录。我还发现,只有在响应请求后,Apache才会将请求记录在访问日志文件中,这至少可以解释我在那里观察到的行为(尽管不完全!)

这并不能解释IE11出现错误的情况,我无法用它来重现错误。也不能解释为什么绝大多数错误事件发生在Android设备上。

总之,取得了一些进展,但我还没有所有答案。至少这可能对某些人有所帮助!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接