window.open MS Edge/IE 性能低下
window.open MS Edge/IE slow performance
打开一个新的 window 然后在新的 window 中从原来的 window 操作 DOM 在 IE 中执行非常慢。
Chrome和FF没有这个问题
我已验证 MS Edge、IE11 和 IE9 会出现这种情况。
有没有人运行以前参与过这个并且知道根本原因或 MS 浏览器中可能的修复方法?
这里 fiddle 重现了这个问题(可能必须禁用弹出窗口拦截器):
http://jsfiddle.net/aw2basc/5mb9eqrh/
以下代码仅供演示使用
(以显示它在新 window 中呈现的速度有多慢)
/*
<div id="container">
<div id="main"></div>
</div>
*/
var someArray = Array.apply(0,Array(1000)).map(function(e,i){return i%10}),
newWindow = window.open('http://fiddle.jshell.net/','newwin','width=530,height=420'),
content = document.getElementById('container').innerHTML;
function addStuff(document){
var main = document.getElementById('main');
someArray.forEach(function(e){
var ele = document.createElement('div');
ele.innerHTML = e;
ele.style.float = 'left';
main.appendChild(ele);
});
}
addStuff(window.document);
setTimeout(function(){
newWindow.document.body.innerHTML = content;
addStuff(newWindow.document);
},4000);
tl;dr
在 IE 的外部 window 中最小化 DOM 很慢;没有人能解释为什么,也没有解决办法。
要么不要在windows与js之间工作,用服务器顶嘴和第四;或尽可能 'few' 更新,并忍受延迟...
这可能是因为您正在创建新元素,然后将它们一个接一个地循环添加到 DOM 树中,这将导致所有浏览器的性能下降。它不会对所有浏览器产生太大影响,具体取决于对您正在使用的功能所做的优化级别。
这会是一个更好的方法:
function addStuff(document){
var main = document.getElementById('main');
var html = '';
someArray.forEach(function(e){
html += '<div style="float: left;">' + e + '</div>';
});
main.innerHTML += html;
}
打开一个新的 window 然后在新的 window 中从原来的 window 操作 DOM 在 IE 中执行非常慢。
Chrome和FF没有这个问题
我已验证 MS Edge、IE11 和 IE9 会出现这种情况。
有没有人运行以前参与过这个并且知道根本原因或 MS 浏览器中可能的修复方法?
这里 fiddle 重现了这个问题(可能必须禁用弹出窗口拦截器):
http://jsfiddle.net/aw2basc/5mb9eqrh/
以下代码仅供演示使用
(以显示它在新 window 中呈现的速度有多慢)
/*
<div id="container">
<div id="main"></div>
</div>
*/
var someArray = Array.apply(0,Array(1000)).map(function(e,i){return i%10}),
newWindow = window.open('http://fiddle.jshell.net/','newwin','width=530,height=420'),
content = document.getElementById('container').innerHTML;
function addStuff(document){
var main = document.getElementById('main');
someArray.forEach(function(e){
var ele = document.createElement('div');
ele.innerHTML = e;
ele.style.float = 'left';
main.appendChild(ele);
});
}
addStuff(window.document);
setTimeout(function(){
newWindow.document.body.innerHTML = content;
addStuff(newWindow.document);
},4000);
tl;dr
在 IE 的外部 window 中最小化 DOM 很慢;没有人能解释为什么,也没有解决办法。
要么不要在windows与js之间工作,用服务器顶嘴和第四;或尽可能 'few' 更新,并忍受延迟...
这可能是因为您正在创建新元素,然后将它们一个接一个地循环添加到 DOM 树中,这将导致所有浏览器的性能下降。它不会对所有浏览器产生太大影响,具体取决于对您正在使用的功能所做的优化级别。
这会是一个更好的方法:
function addStuff(document){
var main = document.getElementById('main');
var html = '';
someArray.forEach(function(e){
html += '<div style="float: left;">' + e + '</div>';
});
main.innerHTML += html;
}