JavaScript字符串数组拼接的性能

原创 2013年12月04日 10:20:08

文章摘抄至 http://www.nowamagic.net/javascript/js_UseArrayJoinString.php

 

传统上,字符串连接一直是js中性能最低的操作之一。

 

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

 

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

发现这一点后,开发者们利用数组对象进行优化。

 

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,比如

var array = [];
for (i = 0; i < length; i++) {
array[i] = '<li>' + list[i] + '</li'>;
}
document.getElementById('somewhere').innerHTML = array.join('\n');

 

 

javascript(注意点) 字符串、数组、对象、循环

如果字符串内部既包含'又包含"怎么办?可以用转义字符\来标识,比如: 'I\'m \"OK\"!'; 由于多行字符串用\n写起来比较费事,所以最新的ES6标准新增了一种多行字符串的表示方法,用反引号...
  • liudan10
  • liudan10
  • 2017年03月03日 12:09
  • 358

字符串拼接和字符串数组拼装成字符串

使用前提是使用jdk1.8 package com.neutron.string; import java.util.ArrayList; import java.util.List; publ...
  • mediocre117
  • mediocre117
  • 2016年10月24日 09:41
  • 4451

数组拼接成字符串

格式: 【二维数组】 Array (    [0] => Array        (            [topicid] => 1        )    [1] => Array    ...
  • ldx904202509
  • ldx904202509
  • 2016年07月19日 18:02
  • 1391

拼接最小字典序 --字符串数组

对于一个给定的字符串数组,请找到一种拼接顺序,使所有小字符串拼接成的大字符串是所有可能的拼接中字典序最小的。 给定一个字符串数组strs,同时给定它的大小,请返回拼接成的串。 测试样例: ...
  • FreeeLinux
  • FreeeLinux
  • 2016年12月10日 21:05
  • 862

几种拼接字符串的效率问题 .

public class test { /** * @param args */ public static void main(String[] args) { // TODO Aut...
  • fuyifang
  • fuyifang
  • 2015年03月16日 12:38
  • 1562

用数组中的元素拼接出最小的数

对于数组中的所有元素,存在这多种拼接组合,如{123,23},拼接可以是12323或者23123,其中12323是最小的。代码实现求最小拼接。import java.util.*; public cl...
  • qq_31153899
  • qq_31153899
  • 2017年09月07日 20:01
  • 117

C/C++中如何写长串(字符数组的拼接)?

有时候,串太长,一行写不下,怎么办,当然你可以用反斜杠换行符,但是程序有点丑陋,比如: #include #include int main() { // 下面程序不能缩进,否则串将改变。好丑...
  • stpeace
  • stpeace
  • 2013年11月01日 23:29
  • 5905

字符串数组拼接xml

public class StringToXml { public static String getRequestMsgContent(String[] header, String[] na...
  • u010931123
  • u010931123
  • 2017年09月01日 11:25
  • 74

java小工具(三)随机返回字符串数组中的字符串

java小工具(三)随机返回字符串数组中的字符串 //随机返回字符串数组中的字符串 public static String RandomStr(String[] strs){ ...
  • u012995856
  • u012995856
  • 2016年11月24日 19:09
  • 416

JS 常用字符串,数组操作

JavaScript String/Array对象 JS String对象   String 对象属性 属性 描述 constructor 对创...
  • pengpengpeng85
  • pengpengpeng85
  • 2016年07月30日 06:26
  • 1492
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JavaScript字符串数组拼接的性能
举报原因:
原因补充:

(最多只允许输入30个字)