今天看了javascript高级程序设计,其中注意到字符串连接性能问题的谈论.感觉以前自己写的程序只讲简单但是没有注意到性能问题.其中,在javascript中用的最多的字符串连接就有最大的问题.
例如:
var str = "hello";
str += "world";
大家可能使用最普遍的就是这种了,实际上,这段代码在幕后执行的步骤如下:
1, 创建存储"hello"的字符串.
2. 创建存储"world"的字符串.
3.创建存储连接结果的字符串.
4. 把str的当前内容复制到结果中.
5.把"world"复制的结果中.
6.更新str,使它指向结果.
大家不难看出:每次完成字符串连接都会执行步骤2到6,使得这种操作非常消耗资源.如果重复这一过程几百次,甚至几千次,就会造成性能问题.所以,以后一定要注意,别做毫无意义的消耗...
既然有问题,那就要解决.解决方法就是用Array对象存储字符串,然后用join()方法(参数是空字符串)创建最后的字符串.
例如:
var arr = new Array;
arr[0] = "hello";
arr[1] = "world";
var str = arr.join("");
这样,无论在数组中引入多少字符串都不成问题,因为只在调用join()方法时才会发生连接操作.执行的步骤:
1. 创建存储结果的字符串.
2. 把每个字符串复制到结果中的合适位置.
当然,我们可以使它更容易理解一些,可以用StringBuffer类打包该功能:
- function StringBuffer() {
- this.__strings__ = new Array;
- }
-
- StringBuffer.prototype.append = function (str) {
- this.__strings__.push(str);
- }
-
- StringBuffer.prototype.toString = function() {
- return this.__strings__.join("");
- }
-
上述代码很容易理解,就不用多说,下面着重看一下,两种方法的性能比较.(用事实说话哟)^_^
下面代码测试StringBuffer对象和传统的字符串连接方法的性能比较:
- 传统方法:
-
- var d1 = new Date();
-
- var str = "";
-
- for (var i=0; i < 10000; i++) {
- str += "text";
- }
-
- var d2 = new Date();
-
-
- StringBuffer对象实现:
-
- var oBuffer = new StringBuffer();
-
- d1 = new Date();
-
- for (var i=0; i < 10000; i++){
- oBuffer.append("text");
- }
-
- var sResult = oBuffer.toString();
-
- d2 = new Date();
-
- document.write("<br/>concatenation with StringBuffer: " + (d2.getTime() - d1.getTime()) + " milliseconds" );
-
经过上述测试结果应该说明使用StringBuffer类比使用加号可节省50%-66%的时间.(计算程序执行的时间差,是衡量javascript性能最常用的方法).
好了,大家可能对字符串连接有一种新的认识,其实,我们也可以看到使用对象编程的一个好处..^_^.有什么理解有误或写法不准确的地方,希望高手留言或评论指正.
<javascript 高级程序设计=""></javascript>
分享到:
相关推荐
今天看了javascript 高级程序设计谈到了字符串连接的性能问题
1.2 使用数组 在常用的语言中,字符串连接运算的性能普遍不高,为此在C#中就专门提供了StringBuilder(Java中提供了StringBuffer)用于连接字符串。而在Javascript中就出现了通过Array模拟StringBuilder的方案。 ...
每种程序语言中都会涉及到字符窜连接,而这个小小的字符窜连接问题很可能会影响到系统的整体性能,本文主要探讨JavaScript中字符串连接的性能问题
每拼接一次字符串就循环重复2)~6),如果重复成百上千次则会非常消耗资源,影响性能。 解决方法: 使用 Array 对象存储字符串,之后使用 join()方法输出结果。 仿照 Java 中的 StringBuffer 类。
主要介绍了Javascript三种字符串连接方式及性能比较,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
主要介绍了JS中的字符串连接问题,ECMAScript 中最常见的一个问题是字符串连接的性能。在调用 join() 方法时才会发生连接操作,具体操作步骤大家可查看下文的详细讲解,感兴趣的小伙伴们可以参考一下。
使用低端台式机和1MB字符串进行的近似测量:3-14MB / s压缩,20-120MB / s解压缩(详细基准以及与其他Javascript库的比较可以在找到)。 由于专注于时间效率,因此与LZW +熵编码等尺寸更高效的算法相比,压缩率会...
使用StringBuffer类比使用加号节省50%左右的时间,大家对于大数据的连接最好使用这个方法。
字符串的连接 一、 最常用+... 每次完成字符串连接都会执行步骤2到6,使得这种操作非常消耗资源。如果重复这一过程几百次,甚至几千次,就会造成性能问题。所有以后就要摒弃这种用法了,哈哈哈。^_^ 二、 join()方法 代
我结合下面译者的译注和上网查找得出的结论大概是这样的:对于IE/7,使用Aarry.join()连接大量字符串的效率确实优于使用+元素运算符,归根到底是由于IE
每次完成字符串连接都会执行步骤2到6,使得这种操作非常消耗资源。如果重复这一过程几百次,甚至几千次,就会造成性能问题。解决方法是用Array对象存储字符串,然后用join()方法(参数是空字符串)创建最后的字符串...
第1章使用JavaScript字符串 1.0简介 1.1连接两个或多个字符串 1.2连接字符串和另一种数据类型 1.3条件比较字符串 1.4在字符串中查找子字符串 1.5从一个字符串提取子字符串 1.6检查一个存在的、非空...
多行 JavaScript中的多行字符串没有更多的字符串连接或数组联接! 尽可能使用ES2015 。前const str = '' +'<!doctype html>' +'<html>' +'<body>' +'<h1>:red_heart: unicorns</h1>' +'</body>...