javascript - 浏览器随机不请求资源

标签 javascript angularjs apache error-handling

我的网站包含在 JavaScript 错误发生时将其记录回 Web 服务器 (Apache) 的代码,使用 AngularJS 中的 $exceptionHandler 组合处理我的 Angular 代码中的异常,并通过 window.onerror 处理 Angular 外部发生的异常。

最近记录的许多错误表明客户端似乎随机地无法请求一种或另一种资源。到目前为止,我找不到未获取的特定资源与出现问题的浏览器或客户端设备之间的任何关联。

例如,我页面上的一个 JavaScript 资源称为“utility.js”。这包括网站的一些全局功能和其他常用内容。一位 iPhone 用户(在 iOS 10.3.2 上)今天加载了一个页面并获取了该页面的所有资源,除了 utility.js(我查看了该 session 的 Apache 访问日志,可以看到被请求的页面中标识的所有其他资源 -并以正确的顺序 - 但不是 utility.js,并且在同一时间范围内错误日志中没有任何内容)。一秒钟后,由于未定义 utility.js 中定义的全局函数,从手机向我们的服务器记录了一个 JavaScript 错误。

另一个(更常见的)例子是 AngularJS 生成一个 $compile:tpload尝试访问 HTML 模板资源时出错。我每天都会收到几个。有问题的模板因错误实例而异,但在我审查过的案例中,Apache 日志中也没有证据表明对模板资源的请求。同一页面的其他模板资源加载成功。值得注意的是,在这种情况下,我有时会看到同一个客户端在几分钟内多次记录关于同一个资源的错误,这表明用户正在重新加载页面并遇到同样的问题,所以似乎确实存在“卡住”或在浏览器中阻塞,但我无法想象是什么。

我有理由相信,这些资源并没有像我所看到的那样缓存在用户的浏览器中,如果页面已经加载,则不会请求页面上的其他资源。

我真的不知道目前该去哪里解决这个问题。据我所知,我无法了解我页面的浏览器网络流量。

关于如何进一步诊断这个问题有什么建议吗?

最佳答案

看起来这是(至少是很大一部分)$compile:tpload 错误的原因,如果不是,也可能是其他原因:

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

本质上,Chrome 和 Firefox 似乎不正确(?)为因卸载页面(即重新加载或导航离开)而中止的 XHR 请求生成错误事件。在我的例子中,客户必须有对 Angular 模板的请求,当他们重新加载或离开时,这些模板会被中止......也许他们的网络连接速度很慢并且在加载页面时遇到问题,因此尝试重新加载。

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

虽然它没有解释 IE11 发生的错误事件 - 我无法用它来重现它。它也没有解释为什么绝大多数事件发生在 Android 设备上。

总而言之,有些进展,但我还没有得到所有答案。至少这对外面的人来说可能是半有用的!

关于javascript - 浏览器随机不请求资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44762953/

相关文章:

javascript - 如何在用户打字时延迟 KeyPress 功能,这样它就不会为每次击键触发请求?

ruby-on-rails - 我应该将 Cucumber 用于 AngularJS 单页应用程序吗?

arrays - 来自AngularJS中2D数组的表

javascript - 在 Angular Directive(指令)中的元素之前插入

linux - httpd.conf 已更新,但我看不到结果

java - Json 响应未打印

javascript - 无法在 html 站点中通过 Javascript 读取 xml 文件

javascript - 为什么在 ES5 中变量对象被改为词法环境?

javascript - 从特定的 javascript 对象属性中提取值

javascript - 如何使用 jQuery 1.5.2 (Drupal7) 获取表 TD-offset()?