`
yiminghe
  • 浏览: 1453405 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

频繁DOM操作问题

阅读更多

      今天看到一篇文章 Nicholas C. Zakas(professional javascript 作者) 的 Speed up your JavaScript, Part 4

,恍然想起以前好像也碰到过上述现象 ,只是没加深究,找到解决方法后就完事大吉了,当时的代码抽象如下:

 

方法1 :

 

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh-cn" lang="zh-cn">

<head>
	<title>dom测试</title>
</head>
<body>
	<div>
		<ul id='ul_test'><li>t</li></ul>
	</div>
	
	<script type='text/javascript'>
		window.onload=function () {
			//return;
		setInterval(function(){
			document.getElementById('ul_test').innerHTML='';
			for(var i=0;i<100;i++)  {
				for(var j=0;j<100;j++) {
					var tli=document.createElement('li');
					tli.innerHTML=i+'-'+j;
					document.getElementById('ul_test').appendChild(tli);
				}
			
			}
		},1000);
		
		
		}
	</script>
</body>
</html>


运行时 cpu 暴涨 ,长时间 90以上

 

后来经过多方查看  ,确定了是 多次读写 dom 操作太费cpu ,dom 并没有缓存的操作 ,修改后变为;

 

方法2 :

 

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh-cn" lang="zh-cn">

<head>
	<title>dom测试</title>
</head>
<body>
	<div>
		<ul id='ul_test'><li>t2</li></ul>
	</div>
	
	<script type='text/javascript'>
		window.onload=function () {
		
		var ilt=	document.getElementById('ul_test');
		
		setInterval(function(){
			
			
			
			var fragment = [];
			
			for(var i=0;i<100;i++)  {
				for(var j=0;j<100;j++) {
					fragment.push('<li>'+i+'-'+j+'</li>');
				
				}
			
			}
			
			ilt.innerHTML=(fragment.join(''));
			
		},1000);
		
		
		}
	</script>
</body>
</html>
 

 

这样的话 ,cpu 最高在50且就一瞬间,


后看了

JavaScript教程--如何提升JavaScript的运行速度(DOM篇)


又实现了一遍:

 

方法3 :

 

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh-cn" lang="zh-cn">

<head>
	<title>dom测试</title>
</head>
<body>
	<div>
		<ul id='ul_test'><li>t2</li></ul>
	</div>
	
	<script type='text/javascript'>
		window.onload=function () {
		
		var ilt=	document.getElementById('ul_test');
		
		setInterval(function(){
			
			ilt.innerHTML='';
			
			var fragment = document.createDocumentFragment();
			
			for(var i=0;i<100;i++)  {
				for(var j=0;j<100;j++) {
					var tli=document.createElement('li');
					tli.appendChild(document.createTextNode(i+'-'+j));
				
					fragment.appendChild(tli);
				}
			
			}
			
			ilt.appendChild(fragment);
			
		},1000);
		
		
		}
	</script>
</body>
</html>

 

方法3 cpu最高 90 ,且也是只有一瞬间 ,比方法1好,但是还有没方法2好 ,

   说明dom操作还是不如 innerHTML 的 ,innerHTML 只有最后加入 ul 的话才需要结构化 ,而dom的话即使采用节点碎片,新create node 也是挺费资源的,fragment用来加快dom操作还是作用很明显的

 

 

  • 大小: 22.9 KB
分享到:
评论

相关推荐

    Javascript_Dom操作案例

    - 优化性能,避免不必要的DOM操作,如在循环中频繁访问DOM。 在提供的`Dom经验文档.rar`中,可能包含了一些实践经验、技巧和常见问题的解决方案,建议详细阅读以加深理解。`TestDomWebsite`可能是一个测试网站,你...

    java对dom的三种操作方式

    ### Java对DOM的三种操作方式 在Java编程领域中,处理XML文档是一项常见的任务。XML(可扩展标记语言)作为一种标准的数据交换格式,在多种应用场景中扮演着重要角色。为了简化XML文档的操作,Java提供了多种库和...

    易语言超文本浏览框全套DOM操作

    5. **性能优化**:在大量操作DOM时,应注意性能问题,避免频繁的DOM操作,可以使用文档片段(DocumentFragment)或批处理更新来提高效率。 综上所述,易语言超文本浏览框全套DOM操作源码提供了在易语言环境中处理和...

    Ractivejs下一代DOM操作框架

    Ractive.js是一个强大的JavaScript库,被誉为“下一代DOM操作框架”。它设计的核心理念是提供一种更加简单、高效且灵活的方式来处理用户界面,特别是在构建复杂的单页应用程序(SPA)时。Ractive.js通过数据绑定、...

    js表格操作,DOM实现数据动态增删查改

    8. **优化性能**:由于频繁的DOM操作可能导致性能下降,可以考虑使用`innerHTML`一次性更新整个表格,或者使用`createDocumentFragment()`来批量处理DOM操作,以减少重绘和回流。 9. **响应式设计**:为了确保表格...

    第06章 DOM节点操作(上)

    8. **DOM更新优化**:由于DOM操作可能导致浏览器重新渲染,频繁操作会降低页面性能。因此,可以使用`createDocumentFragment`在内存中构建新结构,再一次性插入,或者利用`requestAnimationFrame`在下一次重绘前进行...

    Jquery基础教程之DOM操作

    DOM(文档对象模型)是一种与...需要注意的是,实际应用中,对DOM的操作往往需要考虑执行的性能,尤其是在处理大量节点或在频繁触发的事件回调中进行DOM操作时。因此,合理的节点选择和操作方法的选择是很重要的。

    DOM相关的操作

    尽管DOM操作强大且灵活,但频繁的操作会带来性能开销,尤其是在大型文档中。因此,建议批量操作DOM,利用`innerHTML`一次性更改多个元素,或者使用文档片段(DocumentFragment)来减少重绘和回流。 7. **DOM库与...

    分别使用DOM和DOM4j解析XML文件

    在实际应用中,如果你需要频繁地进行XML操作,DOM4j通常会是更好的选择。而DOM更适合于那些需要一次性加载整个XML文档并进行全面处理的情况。不论选择哪种方法,理解XML解析的基本原理和不同库的优缺点对于提高代码...

    前端开源库-domdiff

    `domdiff` 库提供了一种智能且快速的方法,来对比并应用DOM树中的变化,从而减少不必要的DOM操作,提升页面性能。 ### DOM diff算法 `domdiff` 的核心是DOM diff算法,它借鉴了React等虚拟DOM库的思想,通过对比...

    dom4j所依赖的所有jar包

    DOM4J则是基于DOM的一种轻量级API,它弥补了DOM的一些不足,比如性能问题和内存消耗。DOM4J通过提供SAX(Simple API for XML)和DOM的接口,使开发者可以选择更适合他们应用场景的方法来处理XML。 在DOM4J 1.6.1中...

    jQuery中的DOM操作.ppt

    jQuery中的DOM操作主要简化了JavaScript原生DOM操作的复杂性,提供了一套更简洁、易用的API。jQuery库使得开发者能够更...在实际项目中,使用jQuery进行DOM操作是高效且直观的,尤其对于那些需要频繁操作DOM的场景。

    JS操作DOM元素属性和方法大全

    通过以上这些DOM操作,开发者可以构建动态交互的网页应用。了解并熟练运用这些方法,将有助于提升JavaScript编程能力,特别是在需要频繁与DOM交互的项目中。这份资料中的例子将帮助你更好地理解和应用这些知识点。

    dom,jdom,dom4j的区别

    3) 是否需要频繁修改XML结构,DOM提供了直接修改XML的能力;4) 是否熟悉特定API,JDOM和DOM4J对于Java开发者可能更具吸引力。 总的来说,DOM适合小到中型的XML文档,提供了完整的文档视图和易于操作的接口;SAX适合...

    dom学习总结

    8. **性能考虑**:虽然DOM操作非常强大,但频繁操作DOM会带来性能问题,因为每次更改都会导致浏览器重新渲染。因此,通常建议使用DOM操作的最佳实践,如批量操作、使用文档碎片(DocumentFragment)或使用CSS类代替...

    Dom操作与常用JS

    **DOM操作** DOM,全称为Document Object Model,是HTML和XML文档的一种标准表示方式,它将文档结构化为一个树形结构,使得开发者可以方便地通过JavaScript或其它编程语言来访问和修改页面上的元素。DOM操作是前端...

    Dom帮助文档2010版 最新版

    文档可能会涉及DOM操作的性能提示,如避免频繁的DOM操作,使用文档片段批量插入元素,以及使用事件委托等。 通过这个2010版的DOM帮助文档,开发者不仅可以学习到DOM的基础知识,还能深入理解DOM在实际项目中的应用...

    记录我的旅程之JavaScript Dom系列里面的所有例题

    频繁的DOM操作可能导致页面重绘或回流,影响性能。因此,我们需要学会使用`documentFragment`来批量操作DOM,或者利用`requestAnimationFrame`在浏览器准备好绘制下一帧时进行更新。 总的来说,这个“记录我的旅程...

    xml.rar_dom操作xml_java 操作 xml_java xml_sax_xml

    XML(eXtensible Markup Language)...DOM适合小型XML文档和需要频繁访问的情况,而SAX则适合处理大型XML文档或资源有限的环境。理解它们的工作原理和应用场景,能够帮助我们选择最适合的解析策略,从而优化程序性能。

    js dom 文档

    在性能优化方面,频繁的DOM操作会导致页面重绘和回流,降低用户体验。因此,了解DOM操作的最佳实践至关重要,例如使用文档碎片(`document.createDocumentFragment()`)、批量操作(收集多个修改并一次性应用)以及...

Global site tag (gtag.js) - Google Analytics