数码资讯
您需要了解Javascript中字符串连接的性能的一些问题
与Javascript的核心是ECMAscript。类似于其他语言,ECMAscript的字符串是不可变的,即它们的值不能被改变。 请考虑下面的代码: 复制代码代码如下所示: hello; 事实上,这个代码执行如下步骤: 1。创建一个存储hello的字符串。 2。创建一个存储世界的字符串。 三.创建
选购提示
关注价格、性能、续航、售后和真实使用场景,理性比较后再下单。
与Javascript的核心是ECMAscript。类似于其他语言,ECMAscript的字符串是不可变的,即它们的值不能被改变。
请考虑下面的代码:
复制代码代码如下所示:
hello;
事实上,这个代码执行如下步骤:
1。创建一个存储hello的字符串。
2。创建一个存储世界的字符串。
三.创建一个存储连接结果的字符串。
4。将STR的当前内容复制到结果中。
5。将世界复制到结果。
6。更新STR将其指向结果。
每次一个字符串连接完成,步骤2到6进行操作,这非常耗费资源的。如果这个过程重复几百次,甚至上千倍,这会导致性能问题,解决方案是存储字符串的数组对象,然后创建连接字符串(最终()方法的参数是一个空字符串)。想象用下面的代码来代替以前的代码:
复制代码代码如下所示:
VaR ARR =新的数组();
ARR { 0 } =你好;
ARR { 1 } =世界;
var str = arr.join();
这样,不管数组中引入多少字符串,连接操作将只在调用连接()方法时发生:
1。创建存储结果的字符串
2。将每个字符串复制到结果中的适当位置
尽管这一解决方案是好的,有一个更好的方式去做。问题是,代码不能准确反映其意图。让它更容易理解,你可以用StringBuffer类的功能包:
复制代码代码如下所示:
函数的StringBuffer(){
这_strings_ =新的数组();
}
stringbuffer.prototype.append =功能(STR){
这个_strings_推(STR);
};
stringbuffer.prototype.tostring =函数(){
退货。_strings_。加入();
};
注意此代码的第一件事是字符串的属性,这是一个私人财产。它只有两个方法append()()和toString()方法。append()方法有一个参数,将参数字符串数组。toString()方法调用的方法返回的数组字符串实际上是连接。连接字符串集合与StringBuffer对象,你可以使用下面的代码:
复制代码代码如下所示:
VaR缓冲=新StringBuffer();
buffer.append(你好);
buffer.append(世界);
VaR结果= buffer.tostring();
实现基于以上,我们有一个运行时间比较,即字符串连接和工具封装之一。下面的代码可以用来测试StringBuffer的表现对象和传统的字符串连接方法,并输入代码在Chrome控制台并运行:
复制代码代码如下所示:
新日期();
var;
对于(var i = 0;i < 10000;i + +){
文本;
}
新的日期();
console.log(串联加:)
+(d2.gettime d1.gettime()-())+毫秒);
VaR缓冲=新StringBuffer();
D1 =新日期();
对于(var i = 0;i < 10000;i + +){
buffer.append(文本);
}
VaR结果= buffer.tostring();
新日期();
console.log(串联与StringBuffer:)
+(d2.gettime d1.gettime()-())+毫秒);
这段代码执行字符串连接两个测试,使用加号的第一、第二使用StringBuffer类。每个操作连接10000个字符串。日期值D1和D2是用来确定完成该操作所需的时间。注意当约会对象被创建,如果没有参数,对象是给定的当前日期和时间。计算连接需要多少时间,日期的毫秒表示(随着GetTime返回值()方法)可以降低。这是衡量Javascript性能的常用方法。这个测试的结果可以帮助你比较StringBuffer类和一个加号的使用效率差异。
以上结果如下:
然后有人可能会说,Javascript字符串对象不封装concat()方法。我们还使用concat()来做同样的事情,下面的方法,输入以下代码到consoel:
复制代码代码如下所示:
新日期();
var;
对于(var i = 0;i < 10000;i + +){
Str.concat(文本);
}
新的日期();
console.log(串联加:)
+(d2.gettime d1.gettime()-())+毫秒);
我们可以看到10000个字符通道连接到它的时间:
可以得出结论,在一定数量的字符串连接,我们可以把一个类似的StringBuffer对象(功能)在Javascript中提高java运行性能。
请考虑下面的代码:
复制代码代码如下所示:
hello;
事实上,这个代码执行如下步骤:
1。创建一个存储hello的字符串。
2。创建一个存储世界的字符串。
三.创建一个存储连接结果的字符串。
4。将STR的当前内容复制到结果中。
5。将世界复制到结果。
6。更新STR将其指向结果。
每次一个字符串连接完成,步骤2到6进行操作,这非常耗费资源的。如果这个过程重复几百次,甚至上千倍,这会导致性能问题,解决方案是存储字符串的数组对象,然后创建连接字符串(最终()方法的参数是一个空字符串)。想象用下面的代码来代替以前的代码:
复制代码代码如下所示:
VaR ARR =新的数组();
ARR { 0 } =你好;
ARR { 1 } =世界;
var str = arr.join();
这样,不管数组中引入多少字符串,连接操作将只在调用连接()方法时发生:
1。创建存储结果的字符串
2。将每个字符串复制到结果中的适当位置
尽管这一解决方案是好的,有一个更好的方式去做。问题是,代码不能准确反映其意图。让它更容易理解,你可以用StringBuffer类的功能包:
复制代码代码如下所示:
函数的StringBuffer(){
这_strings_ =新的数组();
}
stringbuffer.prototype.append =功能(STR){
这个_strings_推(STR);
};
stringbuffer.prototype.tostring =函数(){
退货。_strings_。加入();
};
注意此代码的第一件事是字符串的属性,这是一个私人财产。它只有两个方法append()()和toString()方法。append()方法有一个参数,将参数字符串数组。toString()方法调用的方法返回的数组字符串实际上是连接。连接字符串集合与StringBuffer对象,你可以使用下面的代码:
复制代码代码如下所示:
VaR缓冲=新StringBuffer();
buffer.append(你好);
buffer.append(世界);
VaR结果= buffer.tostring();
实现基于以上,我们有一个运行时间比较,即字符串连接和工具封装之一。下面的代码可以用来测试StringBuffer的表现对象和传统的字符串连接方法,并输入代码在Chrome控制台并运行:
复制代码代码如下所示:
新日期();
var;
对于(var i = 0;i < 10000;i + +){
文本;
}
新的日期();
console.log(串联加:)
+(d2.gettime d1.gettime()-())+毫秒);
VaR缓冲=新StringBuffer();
D1 =新日期();
对于(var i = 0;i < 10000;i + +){
buffer.append(文本);
}
VaR结果= buffer.tostring();
新日期();
console.log(串联与StringBuffer:)
+(d2.gettime d1.gettime()-())+毫秒);
这段代码执行字符串连接两个测试,使用加号的第一、第二使用StringBuffer类。每个操作连接10000个字符串。日期值D1和D2是用来确定完成该操作所需的时间。注意当约会对象被创建,如果没有参数,对象是给定的当前日期和时间。计算连接需要多少时间,日期的毫秒表示(随着GetTime返回值()方法)可以降低。这是衡量Javascript性能的常用方法。这个测试的结果可以帮助你比较StringBuffer类和一个加号的使用效率差异。
以上结果如下:
然后有人可能会说,Javascript字符串对象不封装concat()方法。我们还使用concat()来做同样的事情,下面的方法,输入以下代码到consoel:
复制代码代码如下所示:
新日期();
var;
对于(var i = 0;i < 10000;i + +){
Str.concat(文本);
}
新的日期();
console.log(串联加:)
+(d2.gettime d1.gettime()-())+毫秒);
我们可以看到10000个字符通道连接到它的时间:
可以得出结论,在一定数量的字符串连接,我们可以把一个类似的StringBuffer对象(功能)在Javascript中提高java运行性能。
声明:本文内容用于数码产品信息整理与选购参考,具体价格、库存、售后政策以官方渠道和电商页面实时信息为准。