- 浏览: 1737489 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (337)
- javaScript校验 (11)
- java (31)
- java连接数据库 (1)
- js应用 (41)
- JQuery (15)
- linux操作命令 (12)
- loadrunner测试 (5)
- tomcat (18)
- 数据库 (12)
- eclipse (7)
- 触发器 (7)
- 表单 (3)
- ibatis (6)
- oracle (4)
- xml (1)
- Exception (6)
- spring (16)
- struts (4)
- struts 标签 (2)
- sql (8)
- sql server (6)
- 其它 (18)
- Apache (2)
- 电脑故障 (4)
- java 线程 (1)
- dwr (8)
- jackey (18)
- 总结 (34)
- gcc linux (2)
- extjs 学习 (5)
- 网站建设 (4)
- 健康 (2)
- 房地产知识 (1)
- hibernate (3)
- mysql (7)
- linux (13)
- svn (1)
最新评论
-
阳光泛滥的日子:
很好用谢谢
java.net.URISyntaxException的解决办法 -
linjianqing:
现在有更好的处理方式吗?我正也为这发愁
applet访问打印机出现的问题 -
ruyi574812039:
非常感谢您的总结!想问几个问题!假设三个项目分别以静态部署的三 ...
在Tomcat中部署Web程序的几种方式 -
yangguo:
太j8麻烦了
Spring3.1中使用缓存注解及Shiro的缓存联合 -
bellawang:
很好用谢谢
java.net.URISyntaxException的解决办法
最近遇到js的效率问题,是关于在页面中新增元素的问题;
假设:我们有页面如下
<!----><HTML>
<HEAD>
</HEAD>
<BODY>
<div id="div1"></div>
</BODY>
<script>
// 脚本位置
</script>
</HTML>
<HEAD>
</HEAD>
<BODY>
<div id="div1"></div>
</BODY>
<script>
// 脚本位置
</script>
</HTML>
现在,我们要往div1中添加对象,大家都知道在为web页面增加一个元素时可以使用如下代码:
<!---->
// 方法1
div1.innerHTML = '<a href="">测试</a>';
或者:
<!---->
div1.appendChild(a);
// 方法2
var a = document.createElement('a');
a.innertText = '测试';
div1.appendChild(a);
在网上搜索到一个探讨js效率问题的文章,其大概意思是说方法2的效率高,其对比代码如下
<!---->// 方法1
function init(){
var staDate = new Date();
var doc = window.document;
for(var i=0;i<100;i++){
var str="<div id='div_'"+i+"' style='width:100px; height:20px;background-color:#eee'>test</div>";
container.innerHTML += str;
}
alert(new Date - staDate);
}
function init(){
var staDate = new Date();
var doc = window.document;
for(var i=0;i<100;i++){
var str="<div id='div_'"+i+"' style='width:100px; height:20px;background-color:#eee'>test</div>";
container.innerHTML += str;
}
alert(new Date - staDate);
}
<!---->//方法2
function init(){
var staDate = new Date();
var doc = window.document;
for(var i=0;i<100;i++){
var oDiv = doc.createElement("div");
var oText = doc.createTextNode("text");
oDiv.appendChild(oText);
container.appendChild(oDiv);
oDiv.style.id = "div_"+i;
oDiv.style.width = "100px";
oDiv.style.height = "20px";
oDiv.style.backgroundColor = "#eee";
}
alert(new Date - staDate);
}
function init(){
var staDate = new Date();
var doc = window.document;
for(var i=0;i<100;i++){
var oDiv = doc.createElement("div");
var oText = doc.createTextNode("text");
oDiv.appendChild(oText);
container.appendChild(oDiv);
oDiv.style.id = "div_"+i;
oDiv.style.width = "100px";
oDiv.style.height = "20px";
oDiv.style.backgroundColor = "#eee";
}
alert(new Date - staDate);
}
其页面中有:
<!----><div id="container"></div>
<input type="button" value="start" onclick="init();" />
<input type="button" value="start" onclick="init();" />
从执行效果来看方案2要比方案1快10倍左右,到底这是不是真的呢?其实上面的测试代码是有待商榷的,且看其方法1中的循环代码:
<!---->for(var i=0;i<100;i++){
var str="<div id='div_'"+i+"' style='width:100px; height:20px;background-color:#eee'>test</div>";
container.innerHTML += str;
}
var str="<div id='div_'"+i+"' style='width:100px; height:20px;background-color:#eee'>test</div>";
container.innerHTML += str;
}
其中有很多字符串操作,而且除了使用+号来连接字符串外,还使用了+=操作符,这就是问题的所在了,在javascript中这种操作字符串的做法是严重影响效率的,所以使用上面的方法来测试createEmenent和innerHTML的效率对innerHTML是不公平的, 据此看来很可能是字符串操作吃掉了innerHTML的性能,于是写了下面的测试代码
<!----><HTML>
<HEAD>
</HEAD>
<BODY>
<input type="button" value="测试1" onclick="test1()" /><input type=text readonly id=t1>
<input type="button" value="测试2" onclick="test2()" /><input type=text readonly id=t2>
<input type="button" value="清空" onclick="div1.innerHTML = ''; div2.innerHTML = ''; t1.value=''; t2.value = '';" />
<div id="div1"></div>
<div id="div2"></div>
</BODY>
<script>
function test1()
{
var d = new Date();
var buf = new Array();
for (var n = 0; n < 1000; n ++)
{
buf.push('<a href="">测试');
buf.push(n);
buf.push('</a>');
}
div1.innerHTML = buf.join('');
t1.value = '耗时:' + (new Date() - d);
}
function test2()
{
var d = new Date();
for (var n = 0; n < 1000; n ++)
{
var e = document.createElement('a');
e.href = '';
e.innerText = '测试' + n;
div2.appendChild(e);
}
t2.value = '耗时:' + (new Date() - d);
}
</script>
</HTML>
<HEAD>
</HEAD>
<BODY>
<input type="button" value="测试1" onclick="test1()" /><input type=text readonly id=t1>
<input type="button" value="测试2" onclick="test2()" /><input type=text readonly id=t2>
<input type="button" value="清空" onclick="div1.innerHTML = ''; div2.innerHTML = ''; t1.value=''; t2.value = '';" />
<div id="div1"></div>
<div id="div2"></div>
</BODY>
<script>
function test1()
{
var d = new Date();
var buf = new Array();
for (var n = 0; n < 1000; n ++)
{
buf.push('<a href="">测试');
buf.push(n);
buf.push('</a>');
}
div1.innerHTML = buf.join('');
t1.value = '耗时:' + (new Date() - d);
}
function test2()
{
var d = new Date();
for (var n = 0; n < 1000; n ++)
{
var e = document.createElement('a');
e.href = '';
e.innerText = '测试' + n;
div2.appendChild(e);
}
t2.value = '耗时:' + (new Date() - d);
}
</script>
</HTML>
经测试发现:
- 在创建的对象较少(0-大约10左右)时,innerHTML和createElement效率差不多,测试值悠忽不定
- 在创建对象多于20时,innerHTML要比createElement效率高很多,平均测试差不多createElement耗时是innerHTML的两倍。
总结:其实效率也在于编写的代码,在知道可用的API的效率后,怎么编写代码也是非常重要的,否则应由的执行效率不能体现出来,就如上面从网上搜到的那些代码,得出一个与事实相悖的结论。
发表评论
-
JS 中的 style.width
2009-09-01 17:59 3426JS 中的 style.width 2009-08-28 1 ... -
js截取固定长度的中英文字符
2008-11-26 14:16 6289js虽然提供了计算字符串所占字节数的函数,但是却不能正确计算汉 ... -
JavaScript中的escape() 函数
2008-11-26 13:51 2040<script type="text/jav ... -
js option删除代码集合
2008-11-25 13:52 2296javascript删除option选项的多种方法,方便大家选 ... -
相当难得的js option 参考
2008-11-25 13:50 4042This is an option box: <form ... -
移动(增加删除)option
2008-11-25 13:33 1137PHP代码: <!DOCTYPE html ... -
HTML中meta标签用法详解
2008-10-08 13:04 1925meta是html语言head区的一 ... -
网页中多媒体的播放代码大全
2008-10-08 12:55 1929<embed src="在此替 ... -
播放器代码大全
2008-10-08 12:54 22311.avi格式 <object id="vi ... -
DIV边框代码
2008-10-08 11:55 22017立体线框代码稍加润色后的效果: <div style ... -
div+css实现圆角边框
2008-10-08 11:53 2631div+css实现圆角边框,在网络上查看了一下,很多都是实现圆 ... -
JS常用语句
2008-10-08 11:26 14381.document.write( " " ... -
怎样使可编辑的DIV固定大小,当内容多时,就自动出现滚动条
2008-10-08 10:59 6911方法一 <style type="text/c ... -
div 让文字或图片居中
2008-10-08 10:52 4247在div 中让 文字或图片居中,请参考以下代码1: - - - ... -
setInterval("",1000) 和setTimeout(,3000);的使用
2008-10-08 10:50 3104应用代码一: <html xmlns=" ... -
js函数window.open()的使用
2008-10-08 09:22 3758在javascript中,有一个函数 window.open( ... -
40种网页常用小技巧(JavaScript)
2008-10-08 09:12 16561. oncontextmenu="wi ... -
根据判断浏览器类型屏幕分辨率自动调用不同CSS的代码
2008-10-07 18:07 2606既判断浏览器,也判断 ... -
JS 判断浏览器类型(是否使用IE,Firefox,Opera浏览器)
2008-10-07 17:59 12496关键字:JS 判断浏览器(是否使用IE,Firefox ... -
js判断浏览器类型
2008-10-07 17:56 2356function btnlogin(){ if(nav ...
相关推荐
`createElement` 和 `innerHTML` 都是JavaScript中用于在页面上添加元素的常见方法,但它们在性能上有显著区别。 首先,`innerHTML` 属性允许我们将HTML字符串直接插入到指定元素中,从而创建或修改元素的内容。...
本文将深入探讨如何利用JavaScript动态生成HTML页面元素,包括使用innerHTML属性和DOM(Document Object Model)方法两种主要方式,以及在不同浏览器环境下的兼容性问题。 ### 1. 使用innerHTML属性 `innerHTML`...
4. **避免不必要的innerHTML操作**:在可能的情况下,减少对`innerHTML`的依赖,转而使用DOM操作API,如`createElement`、`appendChild`和`removeChild`等,可以更好地控制DOM树的结构,避免这类问题。 5. **条件...
1. **使用`document.createElement`和`element.appendChild`**:这种方法创建和操作DOM元素是安全的,因为它不会直接解析HTML字符串。例如,如果你有`<script>`标签,可以创建一个新的`script`元素,然后设置其`src`...
在给定的文件内容中,包含了两种主要的技术实现:使用innerHTML和使用createElement。下面将对这两种方法进行详细解读,并解释相关的知识点。 首先,来看使用innerHTML的方法。innerHTML属性允许我们通过JavaScript...
2. **添加和删除元素**:`createElement`用于创建新元素,`appendChild`和`removeChild`分别用于添加和移除元素。 3. **修改元素内容**:`innerHTML`属性用于更改元素的HTML内容,`textContent`用于更改纯文本内容...
在JavaScript编程语言中,`innerHTML` 和 `outerHTML` 是两个非常重要的属性,它们用于处理HTML元素的内容。本文将深入探讨这两个属性的概念、用途以及它们之间的区别。 `innerHTML` 属性: `innerHTML` 用于获取或...
这篇教程——"JavaScript学习手册十四:HTML DOM-文档元素的操作(二)"深入探讨了如何使用JavaScript来操纵HTML文档中的元素,进一步提升网页动态性和交互性。 DOM是HTML和XML文档的一种结构化表示,它将网页内容...
如果返回的值仅仅是文本类数据,不会影响模板页面的功能,但是如果返回的数据包括 JavaScript,那么直接 `innerHTML` 到模板页的这段脚本是不会被运行的。原因在于浏览器只在显示模板时才解析 JavaScript,而使用 ...
JavaScript 中的 `createElement` 方法是 DOM (文档对象模型) 的一个核心功能,它允许开发者动态地创建 HTML 元素,并将其添加到网页文档中。本文将介绍 `createElement` 方法的两种不同创建方式,这两种方式各有其...
在JavaScript编程中,动态增加文本框是一项常见的交互功能,它允许用户在页面上根据需要添加额外的输入元素,而无需离开当前页面或进行页面刷新。这个功能常用于表单提交、数据输入等场景,比如创建多行文本输入、...
在实际应用中,动态增加和删除元素通常与数据绑定、Ajax异步请求、以及各种前端框架(如React、Vue、Angular)结合使用。这些框架提供更高级别的抽象,使得操作DOM更加简便,同时提高了性能和可维护性。 总结,HTML...
在上面的代码中,我们首先获取了 id 为 "myTable" 的表格元素,然后使用 createElement 方法创建了一个新的表格行和表格单元格元素。最后,我们使用 appendChild 方法将新创建的元素添加到表格中。 在使用 ...
【第七章】JavaScript【Script标签与访问HTML页面(1)】是关于JavaScript编程的一个章节,主要探讨了如何在HTML文档中使用Script标签以及JavaScript如何与HTML页面进行交互。这一主题对于理解和开发动态网页至关重要...
在单页应用(SPA)中,JavaScript还可以处理页面路由,实现不同视图间的切换,如使用History API和hashchange事件: ```javascript window.addEventListener('hashchange', function() { var route = window....
这可以通过`document.createElement()`创建新元素,`innerHTML`或`textContent`设置元素内容,以及`appendChild()`或`insertBefore()`来添加到现有结构中。删除商品则是找到相应的元素并使用`removeChild()`移除。 ...
JavaScript是一种广泛应用于网页和网络应用的编程语言,它在客户端运行,无需服务器支持即可与用户交互,处理数据和控制页面动态行为。XML(Extensible Markup Language)和HTML(Hypertext Markup Language)则是两...
除了这些基本操作,JavaScript还可以用来改变元素的属性(如ID、class、style等)、内容(使用`innerHTML`或`textContent`属性)、事件监听(使用`addEventListener`或`attachEvent`)等。例如,可以使用`element....
例如,我们可以使用`document.createElement()`创建新的元素,`appendChild()`将元素添加到父元素,以及`innerHTML`属性改变元素的内容。 5. 事件处理: JavaScript通过事件监听来响应用户的操作。常见的事件包括`...