zoukankan      html  css  js  c++  java
  • 探讨js字符串数组拼接的性能问题

    这篇文章主要介绍了有关js对字符串数组进行拼接的性能问题,字符串连接一直是js中性能最低的操作之一,应该如何解决呢?请参看本文的介绍

    我们知道,在js中,字符串连接是性能最低的操作之一。
    例如:

    复制代码 代码如下:

    var text="Hello"; 
    text+=" World!"; 

    早期浏览器没有对这种运算进行优化。
    由于字符串是不可变的,这意味着要创建中间字符串来存储连接的结果。频繁地在后台创建和销毁字符串导制性能异常低下。

    因此,可以利用数组对象进行优化。
    例如:

    1
    2
    3
    4
    var buffer=[],i=0;
    buffer[i++]="Hello"//通过相应索引值添加元素比push方法快
    buffer[i++]=" World!";
    var text=buffer.join("");

    在早期的浏览器中,没有创建和销毁中间字符串,在大量字符串连接情况下,这技术已被证明远快于使用加法方式。
     
    如今浏览器对字符串的优化已经改变了字符串相连的局面。Safari、Opera、Chrome、Firefox和IE8都在使用加法运算符上表现出了更 好的性能。但是,IE8之前的版本没有优化,因此数组方法依然有效。这并不意味着字符串相连时我们要进行浏览器检测。在决定如何连接时要考虑的是字符串的 大小和数量。

    当字符串相对较小(小于20字符)且连接数量也较小时(小于1000个),所有的浏览器使用加法运算符都能在不到1毫秒内轻松完成连接。增加字符串 数量或大小时,IE7中性能会明显下降。字符串大小增加时,Firefox中加法运算符和数组成技巧性能差异会变小。字符串数量增加时,Safari中加 法运算符和数组成技巧性能差异会变小。改变字符串数量或大小时,Chrome和Opera中加法运算符一直保持领先优势。

    所以,由于在各浏览器下性能不一致,选用技术取决于实际情况和面对的浏览器。

    大多数情况下,加法运算符是首选;如果用户主要使用IE6或7,并且字符串大小较大或数量较多时,那么数组技术就很值得。
     
    一般情况下,如果是语义性的字符串,不应该使用Array,比如:
    'Hello, my name is ' + name; 
     
    如果字符串是"相似情况的重复"的话,建议使用Array,比如:

    1
    2
    3
    4
    5
    var array = [];
    for (i = 0; i < length; i++) {
    array[i] = '<li>' + list[i] + '</li'>;
    }
    document.getElementById('somewhere').innerHTML = array.join(' ');

    有关js字符串数组连接的性能比较,就介绍到这里了,希望对大家有所帮助。

  • 相关阅读:
    Linux下的搜索查找命令的详解(locate)
    Linux下的搜索查找命令的详解(whereis)
    Linux下的搜索查找命令的详解(which)
    Linux下的awk文本分析命令实例(二)
    Linux下的awk文本分析命令实例(一)
    Linux下的awk文本分析命令详解
    Linux下的at定时执行任务命令详解
    六. 元素修改与空值处理
    七. 高级方法
    八. Pandas的轴
  • 原文地址:https://www.cnblogs.com/gyjWEB/p/4535647.html
Copyright © 2011-2022 走看看