“在后台”执行 JavaScript
Executing JavaScript "in the background"
您是否遇到以下问题:JavaScript 必须运行数百个性能密集型函数调用,这些调用无法跳过并导致浏览器在几秒钟内感到崩溃(例如没有滚动和单击)?示例:假设 500 次调用来获取元素高度,然后进行数百次 DOM 修改,例如设置类等。不幸的是,没有办法避免性能密集型任务。Web 工作者可能是一种方法,但它们没有得到很好的支持(IE...)。我正在考虑基于超时或回调的逐步渲染,让浏览器有时间在两者之间做一些事情。您对此有什么经验可以分享吗?
此致敬意
看看这个话题,这是一些与你的问题有关的事情。
如何提高页面中 java 脚本的性能?
如果你做了那么多的 DOM 操作,你可能应该克隆有问题的元素或 DOM 本身,并在缓存版本上进行更改,然后一次性或更大部分地替换整个 ting,而不是一次一个元素。
需要时间的不是计算和函数等,而是 DOM 操作本身,并且只做一次,或者分段几次,将大大提高你正在做的事情的速度。
据我所知,Web 工作者并不是真正用于 DOM 操作,我认为使用它们不会有太大优势,因为问题可能是您正在逐个更改元素的大量内容,而不是将它们全部替换在 DOM 中一个批次。
在这种情况下,我可以推荐以下内容:
- 再次检查代码。尝试按照建议应用一些标准优化,例如减少查找,离线进行 DOM 修改(例如使用 document.createDocumentFragment()...)。使用 DOM 片段只能以有限的方式工作。检索元素高度并进行复杂的格式化是不够的。
- 如果 1. 不能解决问题,则创建一个按需运行的渲染解决方案,例如由滚动事件触发。或者:使用超时逐步渲染,让浏览器有时间在两者之间执行某些操作,例如单击按钮或滚动。
在 2 中逐步渲染的简短示例:
var elt = $(...);
function timeConsumingRendering() {
// some rendering here related to the element "elt"
elt = elt.next();
window.setTimeout((function(elt){
return timeConsumingRendering;
})(elt));
}
// start
timeConsumingRendering();
相关文章:
- 无法在通过jQuery的ajax加载的页面中执行javascript
- 在Safari执行javascript之前对其进行修改
- 如何在执行此特定onclick事件时执行JavaScript函数
- 如何在从浏览缓存加载页面时执行javascript
- 使用Rhino和ASE执行Javascript的区别
- 如何在加载完整页面后严格执行javascript代码
- 在动态加载的对话框中执行Javascript
- 在Sinatra中执行Javascript
- 通过AJAX加载页面并执行javascript和CSS
- 适用于多种浏览器的Selenium-需要能够执行javascript的webDriver
- 如何在seleniumwebdriver中执行javascript提示并等待接受输入
- 在window.open()生成的窗口中执行JavaScript
- AJAX成功回调-执行javascript时出现问题
- 通过指令在控制器中执行javascript函数
- 从React Native Android原生地执行JavaScript代码
- iframe未执行Javascript方法(PHP)
- 执行JavaScript代码,使用selenium webdriver或WatiN从控制台获取日志
- 通过web驱动程序异步执行Javascript
- 如何在长时间执行JavaScript期间显示微调器
- 点击困难时执行javascript函数