Javascript 执行阻止 IE 8 中的渲染/滚动

标签 javascript internet-explorer google-maps facebook settimeout

我在使用 IE 8(可能还有所有以前的版本)时遇到一些问题。 Firefox 和 Chrome/Webkit 看起来不错。

有什么东西导致页面渲染、滚动以及基本上所有页面交互被阻止。据我所知,Javascript 执行导致了这种情况的发生。

具体来说,我认为在我的具体情况下有两个主要责任方 - Google Maps API (v3) 和 Facebook Connect

在这两种情况下,我都使用 Google 和 Facebook 提供的异步加载方法。

到目前为止我已经尝试了一些方法,但没有成功:

  1. 使用 jQuery 的 $(document).ready() 延迟执行。这只是防止锁定,直到页面加载稍晚一些。实际上,由于我使用 gzip 压缩,我不太确定它有什么作用 - 我不清楚它是如何工作的。
  2. 使用window.onload延迟执行。同样的情况 - 整个页面加载,然后在抓取并执行 Facebook Connect 代码时锁定。
  3. 使用setTimeout(function(){}, 0)。我并不是 100% 清楚这实际上是如何工作的 - 据我了解,它本质上是应该强制函数代码的执行等待堆栈清空。不幸的是,这似乎对我没有多大作用。

我认为这个问题对我来说特别夸张,因为我的连接速度缓慢

我想不出我的网站有任何具体的奇怪之处会成为一个因素,但我不会排除这一点。

那么,我的问题:

针对此问题是否有任何最佳实践现有解决方案

我是否明显做错了什么

违规网站位于:http://myscubadives.com/ ,如果有人愿意看一下具体的实现。

预先感谢您的时间和帮助。

山姆

最佳答案

是的,浏览器(至少是 IE)在执行 Javascript 时会自行挂起。这使得事情变得更快一些,因为每次进行更改时都不必重新绘制和重新计算布局。然而,如果你的 JavaScript 需要很长时间才能执行,这看起来就像卡住一样。同步 XMLHttpRequest 也算在内。

不幸的是,没有很好的解决方法。典型的建议是使用 window.setTimeout() 函数,并将超时设置为 0(或非常小的值),将工作负载分成几个部分。在这期间,浏览器可以设法重绘自身并响应某些用户交互,因此它看起来并不卡住。但代码变得很丑陋。

如果 XMLHttpRequest 很长,您别无选择,只能使用异步版本。

添加:啊,我发现你已经知道这一点了。应该更仔细地阅读。 :P 您是否还知道 IE8 内置了开发人员工具(按 F12 激活)并且 Javascript 选项卡有一个分析器?我查了一下,2秒专门花在了jQyery的get()方法上。这让我强烈怀疑某些东西仍在使用同步 XMLHttpRequests。

Function: get
Count: 10
Inclusive time: 2 039,14
Exclusive time: 2 020,59
Url: http://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js
Line: 127

关于Javascript 执行阻止 IE 8 中的渲染/滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5192773/

相关文章:

javascript - 太多的重新渲染。 React 限制渲染次数以防止无限循环 - React hooks

javascript - VSCode - Chrome 调试 - 未验证的断点

asp.net - IE8.0 上的密码字段

javascript - JSON Stringify 删除 Google Place 对象中的某些属性

javascript - ng-class 不工作

javascript - 如何用三个在javascript中加载图像数据而不是图像?

javascript - 文档就绪()在 firefox 中不工作,为 DOM 元素提供 null...ie7 工作正常

html - 在 IE8、7、6 上使用列表呈现错误

javascript - 在javascript中查找中间纬度和经度

javascript - 谷歌地图 API : How to zoom in on and set different centers for multiple markers in for loop?