JS 去空格 trim() 实战性能优化

 代码如下 复制代码

Function.prototype.method = function(name, func) {
    this.prototype[name] = func;
    return this;
};

String.method('trim', function() {
    return this.replace(/^s+|s+$/g, '');
});

熟悉吧,/^s+|s+$/g,这样的正则表达式。多少框架在用呢。比如 jQuery 的 trimLeft, trimRight:

 代码如下 复制代码
    // Used for trimming whitespace
 trimLeft = /^s+/,
 trimRight = /s+$/,

这是最佳实践么?但我们框架使用的不是这种方法(暂且称为半正则方法)。上次在其他产品组在内部 PK 的时候,说过,为什么我们框架要用下面这样的方法来实现 trim(),而不是用上面的那种。

 

 代码如下 复制代码
trim: function(){
    var str = this.str.replace(/^s+/,'');
    for(var i= str.length - 1; i >= 0; i--){
        if(/S/.test(str.charAt(i))){
            str = str.substring(0,i+1);
            break;
        }
    }
    return str;
}

原因工友已经说了,因为正则的反向匹配比较慢。我对其性能进行了对比。综合速度和写法上来说,个人还是偏向于第一种写法。因为速度其实相差很少很少。从代码来说第二种比较晦涩并且并字节很多,这对于一个流量很高但需要用 trim() 很少的网站来说,第一种明显比较合适,看看下面的测试结果(自已测试
trim 性能

Preparation code

 代码如下 复制代码
<input id="theinput" value="     dslakfjdls     dlskafjdslaf    ldsakfjdlskaf    lsdakfjdslka   sdlkafjdlska    sdlafkjdslkajf    "/>
<script>
  Function.prototype.method = function(name, func) {
   this.prototype[name] = func;
   return this;
  };
 
  String.method('trimReg', function() {
   return this.replace(/^s+|s+$/g, '');
  });
 
  String.method('trimSemiReg', function() {
   var str = this.replace(/^s+/, '');
   for (var i = str.length - 1; i >= 0; i--) {
    if (/S/.test(str.charAt(i))) {
     str = str.substring(0, i + 1);
     break;
    }
   }
   return str;
  });
 
  var r, v = document.getElementById('theinput').value;
</script>

?原来不是半正则的方式最快啊?是的,其实很多高级浏览器中已经默认提供 trim() 了。速度就不用说了,100 倍?哈哈哈。最后,方案如下:

 代码如下 复制代码

if(!String.prototype.trim){
    String.prototype.trim = function(){
        return this.replace(/^s+|s+$/g, '');
    }
}

时间: 2024-10-21 08:00:37

JS 去空格 trim() 实战性能优化的相关文章

JS 去空格trim()最佳实践

方案如下:  代码如下 复制代码 if(!String.prototype.trim){     String.prototype.trim = function(){         return this.replace(/^s+|s+$/g, '');     } } 上面代码测试性能上15S,后来国外网站找到了优化方法  代码如下 复制代码 function trim10 (str) {  var whitespace = ' nrtfx0bxa0u2000u2001u2002u2003

php去空格trim无效用str_replace实现

平时过虑空格,一般都是用trim,今天发现,中间的空格去不掉.倒,查了说明才知道,trim只能去两头的,比如$abc =  a b c; ,用trim只能把a前面c后面的空格去掉,但是b前后的空格怎么办呢. str_replace出场了,这样就行了  代码如下 复制代码 str_replace(' ','',$abc). 需要去空格的同学们小心了,php去空格,trim不行,str_replace行了,但是trim可以删除头空格了如下 例  代码如下 复制代码 <?php trim 去除一个字符

获取服务器传来的数据 用JS去空格的正则表达式_javascript技巧

今天早上到现在,一直在搞一个很愚蠢的问题,竟然一直没发现 如果$str=""; $str = "$str-$sno"; 这样下来,$str前面会有个空格,js获取此值后,必须去掉空格 去空格函数rstr=rstr.replace(/(^\s*)|(\s*$)/g,""); 另: 去左空格replace(/(^\s*)/g, ""); 去右空格replace(/(\s*$)/g, ""); 另外,如果进行程序

比较简单实用的使用正则三种版本的js去空格处理方法_javascript技巧

分别去字符串前后,左边,右边空格  复制代码 代码如下: String.prototype.trim = function(){ return this.replace(/^\s+|\s+$/g,"")}   String.prototype.ltrim = function(){ return this.replace(/^\s+/g,"")}   String.prototype.rtrim = function(){ return this.replace(/

js去空格技巧分别去字符串前后、左右空格_javascript技巧

分别去字符串前后,左边,右边空格 复制代码 代码如下: String.prototype.trim = function(){ return this.replace(/^\s+|\s+$/g,"")} String.prototype.ltrim = function(){ return this.replace(/^\s+/g,"")} String.prototype.rtrim = function(){ return this.replace(/\s+$/

《Oracle数据库性能优化方法论和最佳实践》——1.7 Oracle性能优化的神话和误区

1.7 Oracle性能优化的神话和误区 Oracle性能优化工作是Oracle数据库科学最为神秘莫测的领域,自然也就会流传着各种传言和八卦.本书最主要的目的就是真正使Oracle性能优化成为一门严谨的科学,使任何阅读并且理解本书内容的读者可以比较简单地完成Oracle性能优化工作,使自己在其他人面前成为"巫师"或"神秘的对象".1.7.1 艺术和科学 从百度.Google等网站搜索"性能优化艺术",会出现大量的条目,部分Oracle性能优化的图

js 去掉空格实例 Trim() LTrim() RTrim()

 js 去掉空格实例Trim(),LTrim(),RTrim() 需要的朋友可以过来参考下,希望对大家有所帮助 1.js去掉字符串的空格 //去左空格; function ltrim(s) ...{   return s.replace(/(^s*)/g, ""); } //去右空格; function rtrim(s) ...{ return s.replace(/(s*$)/g, ""); } //去左右空格; function trim(s)...{ //s.

TUP第十三期:客户端性能优化实战经验分享

8月25日下午,CSDN TUP第十三期"架构师沙龙快时代之客户端优化"在北京丽亭华苑酒店举行.暴风影音播放研发总监黄森堂.搜狗研发总监李子拓和鲜果CEO梁公军担任本次活动讲师,分别从PC和Moblie两个方面分享了客户端性能优化的实战经验. 合理的架构设计,对客户端后期优化至关重要 暴风影音播放器一直因为"慢",而引发用户诸多抱怨.新发布的暴风影音5在启动速度上较暴风影音3提升了3倍.暴风影音播放研发总监黄森堂以暴风影音5的研发为案例,分享了暴风影音在实现&quo

js去字符串前后空格的实现方法_javascript技巧

当我们进行一些页面编辑时,字符串前后的空格,通常是无效的.因此需要在获取信息时,进行过滤. 比如: 输入:[空格][空格]a[空格]b[空格][空格][空格] 得到:a[空格]b 代码如下: 去掉前面的空格 function LTrim(str){ var i; for(i=0;i<str.length;i++){ if(str.charAt(i)!=" ") break; } str = str.substring(i,str.length); return str; } 去掉