javascript中关于Plus(String)和StringBuilder的性能比较

今天做了一下在客户端实现类似ASP.NET中的String与StringBuilder类的速率比较,其中StringBuilder的JS类为:

function StringBuilder() {
    this.__strings__ = new Array;
}

StringBuilder.prototype.append = function (str) {
    this.__strings__.push(str);
};

StringBuilder.prototype.toString = function () {
    return this.__strings__.join("");
};

方法append与toString对StringBuilder原型做了function扩展,测试数据的JS代码为:

var d1 = new Date();
var str = "";
for (var i=0; i < 10000; i++) {
    str += "leepy";
}
var d2 = new Date();

document.write("通过加号串连的测试: " + (d2.getTime() - d1.getTime()) + " 毫秒");

var sb = new StringBuilder();
d1 = new Date();
for (var i=0; i < 10000; i++) {
    sb.append("leepy");
}
var result = sb.toString();
d2 = new Date();

document.write("<br />通过StringBuilder串连的测试: " + (d2.getTime() - d1.getTime()) + " 毫秒");

通过测试在IE浏览器得到如下运行数据:
---------------------------------------------
通过加号串连的测试: 1022 毫秒
通过StringBuilder串连的测试: 110 毫秒
---------------------------------------------
多测试几次,可以发现前者总是远大于后者,说明后者性能更好。

但是,在最近的FireFox版本下测试数据发现前者会小于后者,但是相差不大,看上去像FF存在String串连的问题,比如说FireFox 1.0 以及版本之后。我也不知道为什么,不知道是不是FF浏览器内核跟IE内核有所区别的一个问题所在!

posted @   Leepy  阅读(1395)  评论(2编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫
点击右上角即可分享
微信分享提示