Javascript 中的长字符串拼接

简介: Javascript 中的长字符串拼接2011-07-11 16:00 佚名 互联昂网 字符串拼接是所有程序设计语言都需要的操作。当拼接结果较长时,如何保证效率就成为一个很重要的问题。C 语言的 strcat 函数直接操作内存,效率自然最高;C++ 的 string 类是可变的,本质上也是直接操作内存,效率也不在话下;Java 的 String 类不可变,字符串拼接意味着产生新对象,因此提供了专门用于字符串拼接的 StringBuffer 类,也保证了执行效率。

Javascript 中的长字符串拼接

2011-07-11 16:00 佚名 互联昂网 


字符串拼接是所有程序设计语言都需要的操作。当拼接结果较长时,如何保证效率就成为一个很重要的问题。

C 语言的 strcat 函数直接操作内存,效率自然最高;C++ 的 string 类是可变的,本质上也是直接操作内存,效率也不在话下;Java 的 String 类不可变,字符串拼接意味着产生新对象,因此提供了专门用于字符串拼接的 StringBuffer 类,也保证了执行效率。

在 Javascript 中,大规模的字符串拼接虽不常见,但也并非没有。

在这种情况下,传统的字符串拼接会比较慢:

 
  1. <script>   
  2. function strcat1(count, substr) //将 count 个 substr 拼接在一起  
  3. {  
  4. var result = "";  
  5. for (var i = 0; i < count; ++i)  
  6. {  
  7. result += substr;  
  8. }  
  9. return result;  
  10. }  
  11. var begin = new Date();  
  12. strcat1(10000, "substr");   
  13. var end = new Date();  
  14. alert(end.valueOf() - begin.valueOf());  
  15. </script> 

在笔者的机器上(下同)这段代码要执行 3 秒钟。有没有比较快的拼接方法?答案是肯定的,Javascript 也提供了一个类似 StringBuffer 的东西,那就是数组:

 
  1. <script>   
  2. function strcat2(count, substr)  
  3. {  
  4. var buffer = [];  
  5. for (var i = 0; i < count; ++i)  
  6. {  
  7. buffer.push(substr);  
  8. }  
  9. return buffer.join("");  
  10. }  
  11. var begin = new Date();  
  12. strcat2(10000, "substr");   
  13. var end = new Date();  
  14. alert(end.valueOf() - begin.valueOf());  
  15. </script> 

这段代码只需执行 80 毫秒左右,比传统的字符串拼接快了数十倍。这是针对大规模的字符串拼接而言。对于小规模的字符串拼接,我们可以比较一下两种拼接方法的效率:

 
  1. <script>  
  2. function strcat1(count, substr)  
  3. {  
  4. var result = "";  
  5. for (var i = 0; i < count; ++i)  
  6. {  
  7. result += substr;  
  8. }  
  9. return result;  
  10. }  
  11. function strcat2(count, substr)  
  12. {  
  13. var buffer = [];  
  14. for (var i = 0; i < count; ++i)  
  15. {  
  16. buffer.push(substr);  
  17. }  
  18. return buffer.join("");  
  19. }  
  20. function test(strcat)  
  21. {  
  22. var substr = "substr";  
  23. var begin = new Date();  
  24. for (var i = 0; i < 1000; ++i)  
  25. {  
  26. strcat(10, substr);  
  27. }  
  28. var end = new Date();  
  29. return end.valueOf() - begin.valueOf();  
  30. }  
  31. alert(test(strcat1) + "," + test(strcat2));  
  32. </script> 

这一轮是传统的拼接方式胜出,其速度大约是数组方式的两倍多。可以验证,拼接的次数越少,传统的拼接方式优势越大。因此,在大规模的拼接中,如果混用传统拼接方法和数组拼接方法,速度会更快:

 
  1. <script>   
  2. function strcat3(count, substr)  
  3. {  
  4. var buffer = [];  
  5. count /= 5;  
  6. for (var i = 0; i < count; ++i)  
  7. {  
  8. buffer.push(substr + substr + substr + substr + substr);  
  9. }  
  10. return buffer.join("");  
  11. }  
  12. var begin = new Date();  
  13. strcat3(10000, "substr");   
  14. var end = new Date();  
  15. alert(end.valueOf() - begin.valueOf());  
  16. </script> 

这次只需执行 30 毫秒了。因此,笔者推荐以数组方式为主,适当辅以传统方式来拼接长字符串。下面是一个实例:

 
  1. <script>   
  2. function doLoad()  
  3. {  
  4. var buffer = ["<table style='width:100%' border=1>"];  
  5. for (var i = 0; i < 100; ++i)  
  6. {  
  7. buffer.push("<tr>");  
  8. for (var j = 0; j < 20; ++j)  
  9. {  
  10. buffer.push("<td>" + i + "," + j + "</td>");  
  11. }  
  12. buffer.push("</tr>");  
  13. }  
  14. buffer.push("</table>");  
  15. document.body.innerHTML = buffer.join("");  
  16. }  
  17. </script>  
  18. <body onload="doLoad()"></body> 

说明:

1、传统方式与数组方式会有以上差别的原因在于:传统方式拼接 n 个字符串的时间复杂度为 O(n^2),但系数较小;数组方式的时间复杂度为 O(n),但系数较大。

2、以上代码在 IE6 中调试通过。

希望本文能够给你带来帮助。

【编辑推荐】

【责任编辑: QiHappy TEL:(010)68476606】




目录
相关文章
|
11月前
|
JavaScript 前端开发
JS几种拼接字符串的方法
JS几种拼接字符串的方法
169 1
|
存储 JavaScript 前端开发
JS上传文件(base64字符串和二进制文件流)
这篇文章介绍了两种JavaScript文件上传的方法:使用FileReader对象将文件读取为base64字符串上传,以及使用FormData对象以二进制文件流的形式上传文件,包括如何处理文件选择、读取和上传的详细代码示例。
1130 2
JS上传文件(base64字符串和二进制文件流)
|
12月前
|
JavaScript
js 解析 byte数组 成字符串
js 解析 byte数组 成字符串
272 5
|
10月前
|
JavaScript 前端开发 数据处理
模板字符串和普通字符串在浏览器和 Node.js 中的性能表现是否一致?
综上所述,模板字符串和普通字符串在浏览器和 Node.js 中的性能表现既有相似之处,也有不同之处。在实际应用中,需要根据具体的场景和性能需求来选择使用哪种字符串处理方式,以达到最佳的性能和开发效率。
216 63
|
8月前
|
JavaScript 前端开发 开发者
JavaScript字符串的常用方法
在JavaScript中,字符串处理是一个非常常见的任务。JavaScript提供了丰富的字符串操作方法,使开发者能够高效地处理和操作字符串。本文将详细介绍JavaScript字符串的常用方法,并提供示例代码以便更好地理解和应用这些方法。
136 13
|
10月前
|
JavaScript 前端开发 索引
JavaScript学习第二章--字符串
本文介绍了JavaScript中的字符串处理,包括普通字符串和模板字符串的使用方法及常见字符串操作方法如`charAt`、`concat`、`endsWith`等,适合前端学习者参考。作者是一位热爱前端技术的大一学生,专注于分享实用的编程技巧。
81 2
|
12月前
|
JavaScript 前端开发
javascript创建字符串
javascript创建字符串
|
11月前
|
存储 JavaScript 前端开发
JavaScript 字符串(String) 对象
JavaScript 字符串(String) 对象
111 3
|
12月前
|
JavaScript 前端开发
如何在JavaScript中替换字符串:一篇详细指南
如何在JavaScript中替换字符串:一篇详细指南
|
12月前
|
存储 JavaScript
js切割截取字符串方法
js切割截取字符串方法
203 2