ECMAScript
的字符串是不可变的,传统的字符串连接性能特别差:
var str = "hello";
str += "world";
这段代码在幕后执行的步骤如下:
(1)
创建存储
"hello
"
的字符串。
(2)
创建存储
"world
"
的字符串。
(3)
创建存储连接结果的字符串。
(4)
把
str
的当前内容复制到结果中。
(5)
把
"world
"
复制到结果中。
(6)
更新
str
,使它指向结果。
每次完成字符串连接都会执行步骤
2
到
6
,使得这种操作非常消耗资源。
可以用
prototype
属性为任何已有的类定义新方法,就像处理自己的类一样
<script type="text/javascript">
function StringBuffer(){
this.string = new Array; //创建Array对象存储字符串
}
StringBuffer.prototype.append = function(str){ //把参数str附加到字符串数组
this.string .push(str);
}
StringBuffer.prototype.toString = function(){ //用join方法返回真正的字符串
this.string.join("");
}
</script>
性能测试代码:
<SCRIPT LANGUAGE="JavaScript">
var date1 = new Date();
var str = "";
for(i = 0; i<10000; i++){
str += "nomad";
}
var date2 = new Date();
alert(date2.getTime() - date1.getTime());//getTime()日期的毫秒表示
date1 = new Date();
var strBuffer = new StringBuffer();
for(i = 0; i<10000;i++){
strBuffer.append("nomad");
}
var result = strBuffer.toString();
date2=new Date();
alert(date2.getTime()-date1.getTime());
</SCRIPT>
奇怪的事情出现了:
IE下:输出282 和 79
FF下:输出15 和 63
截然相反!!!
原因是FF的JS引擎已经对字符串的拼接运算“+”做了特别优化
分享到:
相关推荐
然而,如果项目中仍然需要支持较老的浏览器环境,并且性能测试表明自定义StringBuffer类能带来性能上的明显提升,那么采用这种优化手段也是值得考虑的。 需要注意的是,随着JavaScript引擎的不断升级优化,现代...
Java以其跨平台性(Write Once, Run Anywhere, WORA)、安全性、高性能等特点著称,在企业级应用、移动开发、Web应用等领域有着广泛的应用。 ### Java基础知识详解 #### 第1天~第5天:Java基础知识 1. **Java环境...
### JS提高优化性能完全秘籍 #### 执行效率优化技巧详解 **1.... **1.1 使用DocumentFragment优化多次append** ...通过采用这些技术,可以有效提高JavaScript代码的执行效率,从而提升前端应用的性能表现。
因此,开发者在进行性能优化时,需要针对目标浏览器进行性能测试。 2. 在某些旧版浏览器中,如IE6,使用StringBuffer技术进行字符串连接可能会比使用加号(+)有更佳的性能表现,因为StringBuffer避免了在循环中频繁...
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,因其易读易写、机器解析和生成的特点,广泛应用于Web服务和分布式系统中的数据交换。RapidJson的设计目标是尽可能地减少内存分配和解析时间,从而在...
- **定义与功能**:Ajax(Asynchronous JavaScript and XML),即异步JavaScript和XML技术,是一种用于创建快速动态网页的技术。通过在后台与服务器进行少量数据交换,Ajax可以使网页实现异步更新。这意味着可以在不...
- **JSON**:JavaScript Object Notation,广泛应用于Web应用。 - **XML**:Extensible Markup Language,用于文档交换。 - **Protocol Buffers**:Google开发的一种高效的二进制格式。 **43. 内存溢出与内存泄漏的...
- **性能测试**:使用工具检测系统的性能瓶颈。 - **安全审计**:对系统进行安全扫描,防止安全漏洞。 #### 二十一、个人发展规划 - **短期目标**:提升专业技能,成为领域内的专家。 - **中期目标**:担任团队...
- **持续集成/持续部署(CI/CD):** 自动化测试、构建和部署流程的实现。 ##### 3. Oracle数据库查询语言 **知识点:** - **SQL基础:** SELECT、INSERT、UPDATE、DELETE等基本操作。 - **复杂查询:** 子查询、联接...
- **应用场景**: 实现网页的部分刷新,提高用户体验。 #### 十三、JSP九大隐视对象中四个作用域的大小与作用范围 - **PageScope**: 页面范围内有效,页面销毁时消失。 - **RequestScope**: 请求范围内有效,请求...
- **测试与部署:** 进行单元测试和系统测试,并部署到服务器。 ##### 6.3 Ajax综合项目 - **Ajax技术:** 了解Ajax技术的基本原理及其优势。 - **项目实践:** 实现一个完整的Ajax项目,提高用户体验。 ##### 6.4...
- **应用场景**:提高读取性能,减轻数据库压力。 ##### 线程概述 - **线程状态**:新建、就绪、运行、阻塞、终止。 - **同步机制**:synchronized关键字、ReentrantLock等。 ##### Ajax请求Session超时问题 - *...
} } } // 测试类 class Test { public static void main(String[] args) { SaleTicket ticket = new SaleTicket(); Thread t1 = new Thread(ticket, "窗口1"); Thread t2 = new Thread(ticket, "窗口2"); Thread t3...
具体实现方式可能依赖于 JavaScript 代码,但由于题目中未给出具体的代码示例,因此无法进一步解析。 ### 6. Session 对象的有效期 - **题目**: Session 对象的默认有效期为多少分钟? - **选项**: - A. 10 - B....
- **使用Ajax**:异步JavaScript和XML技术,实现局部刷新。 - **WebSocket**:实现全双工通信。 #### 23. 逻辑操作与条件操作的区别 - **逻辑操作**:如&、|,短路与非短路形式。 - **条件操作**:如&&、||,具有...
- **StringBuilder**:可变字符串,非线程安全,性能优于`StringBuffer`。 ##### Hashtable与HashMap的区别 - **Hashtable**:线程安全,不允许null键和null值。 - **HashMap**:非线程安全,允许一个null键和多个...
因此,在单线程环境下,StringBuilder比StringBuffer性能更高。 **应用场景分析**: - 如果需要处理不变的文本数据,则应选择String。 - 如果在多线程环境中对字符串进行修改操作,则选择StringBuffer。 - 如果...
例如,计算阶乘的函数jc()展示了递归的基本应用,而字符串倒序可以通过StringBuffer或直接遍历字符数组实现。 7. **继承与组合**: 继承是“is-a”关系的体现,子类可以继承父类的属性和方法,易于代码复用。然而...
- **String与StringBuffer**:在字符串频繁修改的情况下使用StringBuffer(或StringBuilder),以减少对象创建带来的性能开销。 - **集合**:根据集合的实际使用场景选择合适的集合类型。 - **对象**:尽量避免不必...
5个目标文件,演示Address EJB的实现,创建一个EJB测试客户端,得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,用client的getHome()函数调用Home接口...