提高Firefox的innerHTML()的性能

内容摘要
Firefox 下innerHTML在操作量大了以后性能下降很厉害,有人写了个提高innhtml性能的代替方法:JavaScript Code复制内容到剪贴板function r
文章正文
Firefox 下innerHTML在操作量大了以后性能下降很厉害,有人写了个提高innhtml性能的代替方法:
 
JavaScript Code复制内容到剪贴板
  1. function replaceHtml(el, html) {  
  2. var oldEl = typeof el === "string" ? document.getElementById(el) : el;  
  3. /*@cc_on // 原始的 innerHTML 在 IE 中的性能好一点 
  4. oldEl.innerHTML = html; 
  5. return oldEl; 
  6. @*/  
  7. var newEl = oldEl.cloneNode(false);  
  8. newEl.innerHTML = html;  
  9. oldEl.parentNode.replaceChild(newEl, oldEl);  
  10. /* 一旦我们从 DOM 上移除老的元素,则返回新的元素引用。*/  
  11. return newEl;  
  12. };  
可以直接用el=replaceHtml(el, newHtml)代替el.innerHTML=newHtml。

速度到底有多大提升,还得测试说话。作者提供了一个测试页面:http://stevenlevithan.com/demo /replaceHtml.html

此方法大大提高了 innerHTML 在 Firefox 和 Safari 上的性能。replaceHtml() 在 Firefox 2.0.0.6 里 destroy 与 replace 的速度各快了 473 倍以及 50 倍。而在 Safari 3.0.3 beta 上则是 create 100 倍,replace 50 倍。

对于 Opera 也依然有性能提高,只是提高幅度没有上面两种浏览器惊人而已,

唯在 IE 中,则原始的 innerHTML 的方法更效率点。
代码注释

作者:喵哥笔记

IDC笔记

学的不仅是技术,更是梦想!