`
魏祖清
  • 浏览: 180321 次
  • 性别: Icon_minigender_1
  • 来自: 福建
社区版块
存档分类
最新评论

javascript中String Concat和StringBuilder类的性能比较

    博客分类:
  • js
阅读更多
测试脚本如下代码:
Code
1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
2 <html>
3     <head>
4         <title>JavaScript StringBuilder</title>
5         <script src="StringBuilder.js" type="text/javascript"></script>
6         <script type="text/javascript">
7         <!--
8             function runTests()
9             {
10                 // string concat test
11                 var s = new String();
12                
13                 var startTime = new Date();
14                
15                 for (var i = 1; i < 5001; i++)
16                 {
17                     s += i + " Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diem nonummy nibh euismod tincidunt ut lacreet dolore magna aliguam erat volutpat.<br>";
18                 }
19                
20                 var concatResult = s;
21                
22                 var endTime = new Date();
23                 var concatTime = endTime - startTime;
24                
25                 // StringBuilder test
26                 var sb = new StringBuilder();
27                
28                 startTime = new Date();
29                
30                 for (var i = 1; i < 5001; i++)
31                 {
32                     sb.append(i);
33                     sb.append(" Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diem nonummy nibh euismod tincidunt ut lacreet dolore magna aliguam erat volutpat.<br>");
34                 }
35                
36                 var sbResult = sb.toString();
37                
38                 endTime = new Date();
39                 var sbTime = endTime - startTime;
40                
41                 document.writeln("String concat test complete.  Total process time <b>" + concatTime + "</b> ms.<br>");
42                 document.writeln("StringBuilder test complete.  Total process time <b>" + sbTime + "</b> ms.<br>");
43                 document.writeln("Resulting strings are " + ((concatResult == sbResult) ? "" : "NOT ") + "identical.<br>");
44                 document.writeln("<br><b>String concat results:</b><br>");
45                 document.writeln(concatResult);
46                 document.writeln("<br><b>StringBuilder results:</b><br>");
47                 document.writeln(sbResult);               
48             }
49            
50             function button_click()
51             {
52                 document.body.innerHTML = "Running tests";
53                 window.setTimeout(runTests, 0);
54             }
55         //-->
56         </script>
57     </head>
58     <body>
59         <form>
60             <input type="button" value="Click me to run tests" onclick="button_click();">
61         </form>
62     </body>
63 </html>
64

自定义的StringBuilder类如下:
Code
1 function StringBuilder(value)
2 {
3     this.strings = new Array("");
4     this.append(value);
5 }
6
7 // Appends the given value to the end of this instance.
8 StringBuilder.prototype.append = function (value)
9 {
10     if (value)
11     {
12         this.strings.push(value);
13     }
14 }
15
16 // Clears the string buffer
17 StringBuilder.prototype.clear = function ()
18 {
19     this.strings.length = 1;
20 }
21
22 // Converts this instance to a String.
23 StringBuilder.prototype.toString = function ()
24 {
25     return this.strings.join("");
26 }



本类中使用了prototype方法,此方法比较在类中定义方法,可以减少内存开销,因为prototype方式原理上就是

对象的浅拷贝,在内存中只使用对象的副本。

StringBuilder.js

我们可以从以下的测试结果看出此两种方法的性能差距还是非常大的。

String concat test complete. Total process time 3950 ms.
StringBuilder test complete. Total process time 47 ms.
Resulting strings are identical.

希望此方法能帮助做javascript的朋友解决一些性能上的问题。
分享到:
评论

相关推荐

    ajax string StringBuilder理论和示例

    综上所述,Ajax技术提升了Web应用的交互性,而字符串处理和StringBuilder则在数据操作和性能优化方面发挥着关键作用。理解并熟练运用这些工具和概念,对于开发高效、用户友好的应用程序至关重要。

    javascript StringBuilder类实现

    JavaScript中的这个实现是受.NET或其他使用`StringBuilder`的语言启发,为JavaScript环境提供了一种类似的字符串操作方式,尤其在处理大量字符串拼接时,性能优于使用`+`或`.concat()`的方法。 总的来说,`...

    JavaSE第一章使用基础API.docx

    StringBuffer 和 StringBuilder 类提供了一系列用于字符串操作的方法,每个 StringBuffer 和 StringBuilder 对象都是一个可以改变的 Unicode 字符序列。修改字符串对象的操作不会产生新的字符串对象。两个类的区别...

    String manipulation operations in java.zip

    下面我们将详细探讨Java中字符串的基本操作和`underscore.string`库的使用。 1. **Java String类基础** Java中的字符串是不可变对象,这意味着一旦创建了字符串对象,就不能更改它的值。`String`类提供了许多内置...

    计算机软件-商业源码-14 连接字符串.zip

    - **避免不必要的字符串复制**:字符串在内存中是不可变的,每次连接都会创建新的字符串对象,这可能导致内存占用增加和性能下降。 - **使用适当的数据结构**:在需要频繁连接字符串的情况下,使用`StringBuilder`...

    JAVA中常用类的常用方法.docx

    JAVA 中有许多常用的类,每个类都有其特定的方法,本文将对 java.lang.Object 类、String 类和 StringBuffer 类的常用方法进行讲解。 一、java.lang.Object类 java.lang.Object 类是 JAVA 中所有类的父类,它提供...

    关于js中连接字符串效率的测试例子!

    5. 使用`StringBuilder`(非原生):JavaScript本身没有内置的StringBuilder类,但在某些库(如lodash或Underscore.js)中,你可以找到类似的功能。这种工具通常提供更高效的字符串连接,尤其是在大量连接时。 为了...

    工具类_字符串处理

    在实际开发中,很多编程语言都提供了一些内置的字符串工具类或模块,如Python的`str`类、JavaScript的`String`对象、C#的`System.Text.StringBuilder`等。这些工具类通常包含一系列静态方法,用于执行诸如格式化、...

    J2EE高性能编程

    使用`Array.join()`或`String.prototype.concat()`可以提高字符串连接的性能。 - **类型转换** 明确指定类型转换可以提高代码执行速度。例如,可以使用`Number()`、`parseInt()`等函数进行数字转换。 - **创建...

    连接字符串

    在循环中,Java和C#的`StringBuilder`和`StringBuffer`类能提供更好的性能。 四、格式化字符串 除了简单的连接外,我们经常需要进行格式化字符串,比如插入变量、转换数字等。在Python中,可以使用`format()`方法或...

    markdown.md

    与 `String` 类不同,`StringBuilder` 和 `StringBuffer` 都是用来处理可变字符串的对象。它们的主要区别在于是否支持多线程环境下的线程安全性。 - **内部结构**:`StringBuilder` 和 `StringBuffer` 内部都使用一...

    java基础复习笔记(第一阶段)

    4. **字符串处理**:Java.lang.String类在编程中广泛应用,掌握其不可变性、常用方法(如concat、substring、indexOf等)以及StringBuilder/StringBuffer类用于动态构建字符串的方法。 5. **集合框架**:包括List、...

    如何在C#中连接两个字符串并创建现有变量? 看到例子了吗?

    C#提供了多种方法来实现字符串的连接,包括使用`+`运算符、`String.Concat()`函数、`StringBuilder`类以及`string.Join()`方法。 1. **使用`+`运算符**:这是最直观的方法,可以直接将两个字符串相加。例如,`...

    石家庄天远科技集团有限公司—Java开发笔试题

    `StringBuffer`和`StringBuilder`是线程安全和非线程安全的可变字符串类,分别在多线程和单线程环境中更优,因其在修改时不会创建新对象,提高了性能。 `List`和`Map`是Java集合框架中的接口,两者有显著的区别。`...

    jdk1.8-32 免安装版

    10. **字符串拼接优化**:JDK 1.8对String的concat()方法进行了优化,当字符串拼接操作涉及少量元素时,使用StringBuilder不再需要创建额外的中间对象。 总的来说,"jdk1.8-32"的免安装版本提供了一个轻量级的开发...

    JAVA开发面试题集

    字符串在Java中是常见的数据结构,String类提供了许多方法用于字符串操作,如concat、substring、indexOf、replace等。同时,StringBuilder和StringBuffer线程安全的拼接也是面试中的常见问题。 四、IO流与NIO ...

    Java面试题和答案.pdf

    `String`在Java中属于引用数据类型,它实际上是一个类(`java.lang.String`)。 **7. Java中操作字符串都有哪些类?它们之间有什么区别?** - **`String`**: 不可变的字符序列。 - **`StringBuilder`/`StringBuffer`...

    java反射实现javabean转json实例代码.docx

    System.out.println(obj.getClass().toString().concat("未找到这个类")); e.printStackTrace(); return null; } // 获取类的所有声明字段 Field[] fields = cla.getDeclaredFields(); for (Field temp : ...

    松迪培训入学测试题

    - 考虑到内存使用和性能,如果数组非常大,还可以考虑分批次处理或者采用流式处理等方式。 #### 二、求解九宫图的全部填写方法 **知识点概述:** 此题考察了数组操作、递归算法以及文件读写能力。 **详细解析:**...

Global site tag (gtag.js) - Google Analytics