ECMAScript 中最常见的一个问题是字符串连接的性能。与其他语言类似,ECMAScript 的字符串是不可变的,即它们的值不能改变。请考虑下面的代码:
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("");
};
这段代码首先要注意的是 strings 属性,本意是私有属性。它只有两个方法,即 append() 和 toString() 方法。append() 方法有一个参数,它把该参数附加到字符串数组中,toString() 方法调用数组的 join 方法,返回真正连接成的字符串。要用 StringBuffer 对象连接一组字符串,可以用下面的代码:
var buffer = new StringBuffer ();
buffer.append("hello ");
buffer.append("world");
var result = buffer.toString();
可用下面的代码测试 StringBuffer 对象和传统的字符串连接方法的性能:
var d1 = new Date();
var str = "";
for (var i=0; i < 10000; i++) {
str += "text";
}
var d2 = new Date();
document.write("Concatenation with plus: "
+ (d2.getTime() - d1.getTime()) + " milliseconds");
var buffer = new StringBuffer();
d1 = new Date();
for (var i=0; i < 10000; i++) {
buffer.append("text");
}
var result = buffer.toString();
d2 = new Date();
document.write("<br />Concatenation with StringBuffer: "
+ (d2.getTime() - d1.getTime()) + " milliseconds");
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助~如果有疑问大家可以留言交流,谢谢大家对的支持!
# js
# 字符串连接
# 浅谈JS中的三种字符串连接方式及其性能比较
# 你必须知道的JavaScript 中字符串连接的性能的一些问题
# 再论Javascript下字符串连接的性能
# 数组方法解决JS字符串连接性能问题有争议
# javascript下高性能字符串连接StringBuffer类
# JS 字符串连接[性能比较]
# JavaScript 字符串连接性能优化
# javascript 字符串连接的性能问题(多浏览器)
# 这段
# 可以用
# 问题是
# 的是
# 组中
# 这一
# 就会
# 很好
# 都不
# 成问题
# 要注意
# 要用
# 只在
# 这篇文章
# 谢谢大家
# 更容易
# 时才
# 解决方法
# 最常见
# 使它
相关文章:
Android滚轮选择时间控件使用详解
微网站制作教程,我微信里的网站怎么才能复制到浏览器里?
在线制作视频网站免费,都有哪些好的动漫网站?
建站之星如何实现网站加密操作?
建站之星×万网:智能建站系统+自助建站平台一键生成
上海网站制作网站建设公司,建筑电工证网上查询系统入口?
建站之星会员如何解锁更多建站功能?
浅析上传头像示例及其注意事项
已有域名如何快速搭建专属网站?
智能起名网站制作软件有哪些,制作logo的软件?
英语简历制作免费网站推荐,如何将简历翻译成英文?
建站OpenVZ教程与优化策略:配置指南与性能提升
完全自定义免费建站平台:主题模板在线生成一站式服务
如何通过NAT技术实现内网高效建站?
,购物网站怎么盈利呢?
Bpmn 2.0的XML文件怎么画流程图
全景视频制作网站有哪些,全景图怎么做成网页?
制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?
如何在阿里云服务器自主搭建网站?
建站主机SSH密钥生成步骤及常见问题解答?
如何打造高效商业网站?建站目的决定转化率
如何制作一个表白网站视频,关于勇敢表白的小标题?
C#如何使用XPathNavigator高效查询XML
制作证书网站有哪些,全国城建培训中心证书查询官网?
C++ static_cast和dynamic_cast区别_C++静态转换与动态类型安全转换
如何用花生壳三步快速搭建专属网站?
如何快速启动建站代理加盟业务?
如何配置WinSCP新建站点的密钥验证步骤?
正规网站制作公司有哪些,目前国内哪家网页网站制作设计公司比较专业靠谱?口碑好?
在线流程图制作网站手机版,谁能推荐几个好的CG原画资源网站么?
建站主机核心功能解析:服务器选择与网站搭建流程指南
定制建站流程解析:需求评估与SEO优化功能开发指南
深圳 网站制作,深圳招聘网站哪个比较好一点啊?
建站主机解析:虚拟主机配置与服务器选择指南
如何快速生成凡客建站的专业级图册?
广德云建站网站建设方案与建站流程优化指南
如何在云主机上快速搭建网站?
,如何利用word制作宣传手册?
如何在Windows 2008云服务器安全搭建网站?
制作网站的软件免费下载,免费制作app哪个平台好?
猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?
高防服务器租用指南:配置选择与快速部署攻略
学校为何禁止电信移动建设网站?
为什么Go需要go mod文件_Go go mod文件作用说明
建站主机默认首页配置指南:核心功能与访问路径优化
网站建设制作、微信公众号,公明人民医院怎么在网上预约?
如何在VPS电脑上快速搭建网站?
建站之星好吗?新手能否轻松上手建站?
c++怎么实现高并发下的无锁队列_c++ std::atomic原子变量与CAS操作【详解】
如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?
*请认真填写需求信息,我们会在24小时内与您取得联系。