`

再谈“字符串拼接”的效率

阅读更多
有关JS中字符串的相关文章,现在网上大概不计其数了。这里我不想再就这个问题做过多的论述,只是对几种方式的实现在各种浏览器中的执行效率进行对比做个总结。

拼接字符串,大体分为两种方式,一种通过+号拼接(方式1),这种方式在IE6中效率是极其低下的,因此就出现了第二种方式:采用数组保存,最后通过join拼接,这种方式的效率在IE6下对比会发现速度差异非常大。此外还有很多朋友估计没有注意过,数组拼接的方式又分为两种,一种是通过push将字符串放入数组(方式2),另外一种是通过arr[arr.length]='string'的方式存入(方式3),这两种方式的性能也是有一些差异的。这样,我们发现一共是有三种不同的方式的,下面我对这三种方式在不同浏览器下的执行效率做了个对比,具体数据就不贴出来(因为每次的数据都是不同的,但执行速度的排名是比较稳定的),只对他们的执行效率做个排名。

===========================================

浏览器   方式1  方式2  方式3  引擎google    3      2      1     AppleWebKit/525.19safari    3      2      1     AppleWebKit/528.16opera     1      3      2     Presto/2.1.1ff3       1      3      2     Gecko/2009042316ff2       1      3      2     Gecko/20081201IE8       1      3      2     Trident/4.0IE7       3      2      1     未知IE6       3      2      1     未知=============================================

对比可做以下简单总结:

在FF及IE8中直接用+号拼接的方式还是效率的最高的方式,其它情况下该方式是最慢的。
数组拼接的方式里arr[arr.length]=''的方式是快于push方式的。
在进行字符串拼接的时间:1要判断浏览器类型,如果是+号拼接方式快则采用+号方式直接拼接,如果是数组方式,则采用arr[arr.length]=''的方式将字符串存入数组然后再采用join的方式拼接。

最后附上测试用到得代码(注:为准确测试,在不同浏览器要修改循环次数数值)

<html> 
<head> 
<title>Listing 1-2</title> 
<mce:script type="text/javascript"><!--
 
function badTest() { 
    var startTime = new Date().valueOf(); 
    var s = ""; 
    for (var i = 0; i < 100000; i++) { 
        s += "This is a test string"; 
    } 
    return new Date().valueOf() - startTime; 
} 
function goodTest() { 
    var startTime = new Date().valueOf(); 
    var stringBuffer = new Array(); 
    for (var i = 0; i < 100000; i++) { 
        stringBuffer.push("This is a test string"); 
    } 
    var s = stringBuffer.join(""); 
    return new Date().valueOf() - startTime; 
} 
function betterTest() { 
    var startTime = new Date().valueOf(); 
    var stringBuffer = new Array(); 
    for (var i = 0; i < 100000; i++) { 
        stringBuffer[stringBuffer.length] = "This is a test string"; 
    } 
    var s = stringBuffer.join(""); 
    return new Date().valueOf() - startTime; 
} 
function doTests() { 
    var htm = ""; 
    htm += "Time badTest took: " + badTest() + "<br>"; 
    htm += "Time goodTest took: " + goodTest() + "<br>"; 
    htm += "Time betterTest took: " + betterTest(); 
    htm += "<br>" + navigator.userAgent; 
    document.getElementById("result").innerHTML = htm; 
} 
 
// --></mce:script> 
</head> 
<body> 
<a href="javascript:void(0);" mce_href="javascript:void(0);" onClick="doTests();">Click here to test</a> 
<br><br> 
<div id="result">&nbsp;</div> 
</body> 
</html>


发表于 @ 2009年12月16日 09:35:00

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/misswuyang/archive/2009/12/16/5016733.aspx
3
2
分享到:
评论

相关推荐

    浅谈jquery拼接字符串效率比较高的方法

    为了提高字符串拼接的效率,有几种方法可以采用。本文中提到的是利用jQuery中的方法来实现高效的字符串拼接。 1. 使用数组存储字符串片段,利用数组的join方法来合并字符串:这是一种常见的做法,可以有效提高性能...

    浅谈JavaScript字符串拼接

    在JavaScript开发中,字符串拼接是一项基础但十分常见的操作,它允许...总之,字符串拼接在JavaScript中是一种基础且重要的操作,掌握不同的拼接技巧可以帮助我们更好地编写高质量的代码,提升开发的效率和应用的性能。

    浅谈Java字符串Java开发Java经验技巧共11页.p

    标题中的“浅谈Java字符串Java开发Java经验技巧共11页”表明这是一份关于Java编程,特别是关于Java字符串处理的深度技术文档。在Java中,字符串是编程中经常遇到的基本数据类型,对于任何Java开发者来说,理解和掌握...

    浅谈Java字符串

    这意味着每次对String对象进行操作(如拼接或替换字符)都会生成一个新的String对象,这在性能上可能不理想,特别是在频繁操作字符串时。 `StringBuffer`和`StringBuilder`则是可变的字符串序列。它们内部都维护了...

    专题资料(2021-2022年)javascript效率经验谈.docx

    对于大型字符串,使用字符串拼接方法(如`+`或`+=`)效率较低。当字符串数量增加到一定量时,应考虑使用数组join方法,它通常更快。 3. **正则表达式匹配的效率**: 在需要搜索或替换文本时,正则表达式通常比...

    浅谈javascript中遇到的字符串对象处理

    无论是处理URL参数、字符串拼接,还是进行复杂的字符串操作,这些方法都提供了强大的工具。在实际项目中,根据需求灵活运用这些知识,能够提高代码的效率和可读性。希望这篇文章提供的内容能对你有所帮助,继续学习...

    再谈PHP中单双引号的区别详解

    在PHP编程语言中,单引号(' ')和双...通常,如果你不需要字符串内解析变量,使用单引号可以提高执行效率,因为解析器处理单引号字符串时的工作量较小。而在需要变量替换或包含特殊转义序列时,使用双引号更为方便。

    浅谈mysql中concat函数,mysql在字段前/后增加字符串

    在MySQL数据库中,`CONCAT()`函数是一种非常实用的字符串操作函数,用于将一个或多个字符串连接成一个单一的字符串。这个函数的基本语法是 `CONCAT(str1, str2, ...)`,它会将所有传入的参数拼接在一起。如果任何一...

    浅谈ASP编程的思路与纠错浅谈ASP编程的思路与纠错

    例如,SQL语句中的日期格式错误、字段引用错误或者字符串拼接错误等,都需要仔细检查相关语句的语法和逻辑。 最后,分享一个简单的ASP用户注册程序的片段,该程序演示了如何从数据库中获取数据(如公司名称)并显示...

    浅谈js中StringBuffer类的实现方法及使用

    在执行大量字符串拼接操作时,这可以显著减少内存的使用,并且提高代码执行的效率。 此外,文章中还提到了FormatDate函数,这是一个用于格式化日期的函数,它被用在拼接HTML字符串的过程中。这表明StringBuffer类也...

    试谈校园网中SQL 2008注入攻击与防范.pdf

    防范SQL注入攻击的方法包括对提交数据进行合法性检查、使用参数化查询避免直接使用字符串拼接SQL语句、对错误信息进行屏蔽以防止泄露敏感信息等。此外,还应限制文件权限、去除或替换Web服务器上的危险命令,以及对...

    C#面向对象设计模式纵横谈

    `StringBuilder`类允许用户通过一系列方法调用来逐步构建字符串,这极大地提高了字符串拼接的性能和效率。 #### 结语 通过以上介绍可以看出,Builder模式为创建复杂对象提供了一种简洁有效的方式。它不仅有助于...

    浅谈java常量池

    在处理大量字符串拼接时,使用`StringBuilder`或`StringBuffer`而非`+`操作符,可以显著减少对常量池的污染和内存消耗。 总的来说,Java常量池是一种优化内存使用的技术,它可以减少对象创建、内存碎片,并提高程序...

    C语言中的指针及其应用.pdf

    指针变量特别适合处理字符串,通过指针,我们可以方便地访问字符串中的每个字符,甚至可以进行字符串的拼接和截取操作。在字符串的示例中,str是指向字符数组首地址的指针变量,对str进行加法操作能够移动指针位置,...

    谈一谈ORM的安全1

    1. 避免直接拼接SQL字符串,优先使用参数绑定。 2. 使用ORM提供的安全方法,如`where()`、`orderBy()`等,而非直接写SQL。 3. 对用户输入进行验证和过滤,确保其不会破坏查询结构。 4. 对于NoSQL数据库,也要遵循...

Global site tag (gtag.js) - Google Analytics