javascript性能优化(5)

2023-05-16

字符串和正则表达式

    str="a"+"b"+"c"; //low

    str="a";
    str+='b';
    str+='c';//faster等同于 str=str+'a'+'b'+'c';

数组字符串方法

    str=['a','b','c'].join("");//数组

    str='a';//字符串
    str=str.concat('b','c');

数组链接join

在大多数浏览器上使用数组链接join要比 链接字符串的其他的方法更慢。
测试一个5000次的字符串拼接

//low
    var str="I,m a super man",
        newstr="",
        strs=[],
        appends=5000;
    while (appends--){
        newstr+=str;
    }
    console.log(newstr);

和join结合

//faster
    var str="I,m a super man",
        newstr="",
        strs=[],
        appends=5000;
    while (appends--){
        strs[strs.length]=str;
    }
    newstr=strs.join("");
    console.log(newstr);

字符串链接concat

优点是接收任意数目的字符串;但是多数情况下他要比+和+=慢一些。

    str=str.concat(s1);
    str=str.concat(s1,s2,s3);
    str=String.prototype.concat.apply(str,array);//和数组拼接

正则

以下是基于正则表达式的修剪实例,去除左右两个空格

//trim1
     String.prototype.trim=function () {
        return  this.replace(/^\s+|\s+$/g,"");
    }

通过分支功能合并了两个简单的正则表达式,并使用全局/g标记替换所有匹配,而不只是第一个(当目标字符串首尾都有空格时它将匹配两次)。但是对长字符串操作时,它比使用两个简单的字表达式要慢,因为两个分支选项都要测试每个字符的位置。

//trim2
    String.prototype.trim=function () {
        return  this.replace(/^\s*([\s\S]*?)\s*$/,"$1");
    }

匹配整个字符串,捕获从第一个到最后一个非空格字符之间的序列,记入后向引入1,然后使用后向引入1替代整个字符串,就留下了这个字符串的修剪版本。

混合解决方案

用正则表达式修剪头部表格,用非正则表达式修剪尾部字符。

String.prototype.trim=function () {
        var str=this.replace(/^s+/,""),
            end=str.length-1,
            ws=/|s/;
        while (ws.test(str.charAt(end))){
            end--;
        }
        return  str.slice(0,end+1);
    }

总结

  • 数组链接是链接字符串比较慢的方法之一。使用简单的+/+=,可以避免产生不必要的中间字符串。
  • 当链接数量巨大或链接尺寸巨大的字符串时,数组链接是一个比较好的方法。
  • 回溯既是正则表达式匹配功能的基本的组成部分,又是正则表达式影响效率的常见原因。
  • 回溯失控发生在正则表达式本应很快发现匹配的地方,因为某些特殊的匹配字符串动作,导致运行缓慢,甚至浏览器崩溃。避免此问题的技术包括:使邻近字元互斥,避免嵌套量词对一个字符串的相同部分多次匹配,通过重复利用前瞻操作的原子特性去除不必要的回溯。
  • 虽然有很多方法来修正一个字符串,使用两个简单的正则表达式(一个用于去除头部空格,另一个用于去除尾部空格)提供了一个简洁、跨浏览器的方法,适用于不同内容长度的字符串。从字符串末尾开始循环查找第一个非空格字符,或者在一个混合应用中将此技术与正则表达式结合起来,提供了一个很好的替代方案,它很少受到字符串整体长度影响。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

javascript性能优化(5) 的相关文章

随机推荐

  • input上传图片并预览

    首先说一下input 大家都知道上传文件 xff0c 图片是通过input 的file进行上传的 1 首先是样式 大家都知道input在HTML的代码为 lt input type 61 34 file 34 gt xff1b 在页面的样式
  • PyQt5 使用QT Desinger 布置QChartViewer

    QChartView原来是QT公司的商用包 xff0c 后来开源了 但是相对来说文档说明少 最近想利用QT DESINGER直接拖拉拽在GUI窗体里放QChartViewer xff0c 网上参考部分资料后顺利实现 xff0c 现留作备忘
  • js拳皇特效

    js拳皇特效 效果图 很简单的特效 xff0c 运用了面向对象 xff0c 原型等简单的方法 废话不多说 xff0c 上代码 xff1a span class hljs tag lt span class hljs title script
  • 微信小程序从入门到放弃(七)

    scroll view不显示滚动条 新版本的微信小程序已经把scroll view的滚动条默认为隐藏了 xff0c 而有的业务逻辑需要把滚动条显示出来 xff1b 所以 xff1a 本人查了好久终于找到了解决的方案 xff0c 就是找到滚动
  • cookie+bootstrap-table+抽奖概率算法

    span class hljs comment 获得cookie span span class hljs function span class hljs keyword function span span class hljs tit
  • Vue新手入门-1

    基于vue2 5 9版本 数据绑定v bind 像img这样的标签 xff0c 直接在src里面写 lt img src 61 34 picimg 34 alt 61 34 34 gt xff1b 是不正确的 xff0c 这里需要用v bi
  • Vue新手入门-2

    基于vue2 5 9版本 生命周期vue1 0 created gt beforeCompile gt compiled gt ready gt attached gt detached gt beforeDestroy gt destro
  • cropper.js 裁剪图片并上传(文档翻译+demo)

    官网http fengyuanchen github io cropper 文档https github com fengyuanchen cropper blob master README md v3 x版本 引入 43 使用 span
  • Vue新手入门-3

    基于vue2 5 9版本 定义全局组件 xff08 3种写法 xff09 首先声明一个new Vue xff08 xff09 xff1b 然后在js里面编写 xff1b 最后把注册的组件放入进去即可 xff1b 写法 1 span clas
  • Vue遇到的bug-02(vue中修改了数据但视图无法更新的情况)

    基于vue2 5 9版本 vue中修改了数据但视图无法更新的情况 最近的项目需要用vue处理数组和json的数据类型发现一些问题在这里简单的列举一下 xff1b 因为 JavaScript 的限制 xff0c Vue js 不能检测到下面数
  • Vue遇到的bug-03(VUE之使用高德地图API)

    步骤一 xff1a 申请高德地图密钥 xff1b 步骤二 xff1a 在index html中添加高德地图JavaScript API接口 xff1b span class hljs tag lt span class hljs title
  • 纯css模仿微信switch开关按钮

    业务需要需要做一个微信switch开关 效果图 html样式 span class hljs tag lt span class hljs title label span gt span span class hljs tag lt sp
  • SDN实验环境的搭建UBUNTU 14LTS+MININET+RYU

    RYU是NTT主推的开源SDN 控制器项目 xff0c 采用PYTHON语言 因为工作需要 xff0c 进行了一些尝试 xff0c 现将基础环境的搭建和相关参考资料记录如下 1 系统选择UBUNTU 14 LTS xff0c 采用VMWAR
  • 移动端开发小记

    meta 在我们开发移动端的时候 xff0c 首先在head里面写入如下的代码 span class hljs tag lt span class hljs title meta span span class hljs attribute
  • less 简单用法

    less 示例 声明变量 用 64 span class token atrule span class token rule 64 man color span span class token punctuation span f0f0
  • javascript性能优化(1)

    加载 1 javascript的第一条定律 xff1a 将脚本 xff08 js xff09 放到底部 2 每一个http请求都会造成额外的性能负担 xff0c 下载一个100k的文件比下载四个25k的文件要快 xff1b 减少引用外部脚本
  • javascript性能优化(2)

    数据访问 四种基本数据类型 xff1a 1 直接量 xff1a 仅是自身不存储于特定位置 包括 xff1a 字符串 数字 布尔值 对象 数组 函数 正则表达式 xff0c 具有特殊意义的空值 xff0c 以及未定义 2 变量 xff1a v
  • javascript性能优化(3)

    DOM编程 1 文档对象模型 xff08 DOM xff09 访问的dom越多 xff0c 代码的执行速度就越慢 2 innerHtml和DOM方法 更改dom的时候 xff0c 使用innerHTML xff08 字符串拼接 xff09
  • javascript性能优化(4)

    算法和流程控制 代码整体结构是执行速度的决定因素之一 代码量少不一定运行速度快 xff0c 代码量多也不一定运行速度慢 性能损失与代码组织方式和具体问题解决办法直接相关 循环 1 减少对象成员和数组项查找的次数 span class hlj
  • javascript性能优化(5)

    字符串和正则表达式 span class hljs keyword str span 61 span class hljs string 34 a 34 span 43 span class hljs string 34 b 34 span