论坛首页 入门技术论坛

一个js写的StringBuffer类

浏览 4382 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (2) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-11-02  
function StringBuffer() {
	this._objArray = [];
	this._undoFlag = false;
};

StringBuffer.prototype.toString = function() {
	if(this._objArray.length==0) {
		return '';
	}
	var str = this._objArray.join('');
	if(this._objArray.length > 1) {
		this.clear();
		this.append(str);
	}
	this._undoFlag = false;
	return str;
};

StringBuffer.prototype.append = function(object) {
	this._objArray[this._objArray.length] = object;
	this._undoFlag = true;
	return this;
};

StringBuffer.prototype.clear = function() {
	this._objArray.length = 0;
	this._undoFlag = false;
};

StringBuffer.prototype.undoLastAppend = function() {
	if(this._undoFlag) {
		this._objArray.length = this._objArray.length -1;
		this._undoFlag = false;
	}
};

StringBuffer.prototype.setSize = function(size) {
	if(size==null || size<=0) {
		this.clear();
		return;
	}
	var str = this._objArray.join('');
	if(size < str.length) {
		str = str.substring(0, size);
		this.clear();
		this.append(str);
	} else if(this._objArray.length > 1) {
		this.clear();
		this.append(str);
	}
	this._undoFlag = false;
};

StringBuffer.prototype.getSize = function() {
	var str = this.toString();
	return str.length;
};

 

   发表时间:2008-11-15  
这个函数好!
0 请登录后投票
   发表时间:2008-11-15  

这里也有一个
http://doctype.googlecode.com/svn/trunk/goog/util/stringbuffer.js

 

0 请登录后投票
   发表时间:2008-11-16  
多此一举,直接用 数组 不就完了。
0 请登录后投票
   发表时间:2008-11-16  
stringbuffer其实原本是不必要的。除了IE之外,其他浏览器上stringbuffer并不能提高性能。IE的问题其实在于垃圾回收算法。等到都升级到ie7,估计就可以不用stringbuffer了。
0 请登录后投票
   发表时间:2008-11-17  
hax 写道
stringbuffer其实原本是不必要的。除了IE之外,其他浏览器上stringbuffer并不能提高性能。IE的问题其实在于垃圾回收算法。等到都升级到ie7,估计就可以不用stringbuffer了。

请问hax在那里得到的“其他浏览器上stringbuffer并不能提高性能”的结论???
0 请登录后投票
   发表时间:2008-11-19  
我做过测试。在字符串长度小于一定值(忘记多大了,不过至少是64k)的情况下,StringBuffer的性能是不如 + 的。因为 + 是JS操作符,得到最大优化的。

参见本篇:http://hax.iteye.com/blog/126859

至于IE,问题也不在 + 本身上。
引用
比如我们常见的字符串拼接问题,经过我的测试验证,单纯的多次创建字符串对象其实根本不是性能差的原因。要命的是在对象创建期间的无谓的垃圾回收的开销。而Array.join的方式,不会创建中间字符串对象,因此就减少了那该死的垃圾回收的开销。


IE上的测试方法很简单,就是你创建无数字符串,但是用 , 操作符连接,这样就不会触发垃圾回收,测试下来串接字符串本身并无性能问题。
0 请登录后投票
   发表时间:2008-11-20   最后修改:2008-11-20
先不管 这个js有没有实际用处

用js 实现一个 stringbuffer 似乎是学习js的过程中必不可少的一个环节啊

我接触过很多搞js的人 他们都经历过 "用js 实现一个 stringbuffer"的考验
(很多笔试也喜欢考这题 呵呵)
要做到很完备 还是不简单的
lz这个 我只能给打70分左右, 只是实现了基本功能 很多东西考虑的不周全.

0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics