zoukankan      html  css  js  c++  java
  • 只为粗暴看一下ES6的字符串模板的性能

    网上查找"ES6 字符串模板 +性能"5分钟无果遂写了一个暴力测试。

    测试对象

    • +=方式,字符串累加计算方式
    • +s1+s2...+sn方式,即传统连加拼接字符串方式
    • s.push(s1); s.join('')方式,数组拼接字符串方式
    • es6字符串模板

    测试方式:各执行times次运算,记录执行时间。

    测试结果

    字符串模板的确钢!

    不过上述是在Chrome中的测试结果,结果显示字符串模板的性能和字符串连加拼接方式性能大体相当,是+=逐个链接方式性能的5倍左右,array join方式性能最差,不忍直视。

    在火狐浏览器下,除了array join依然不忍直视外,其他三种性能表现相当:

    ,火狐下贴一张撑撑门面就行了。

    微软Edge下,结果比较呵呵哒:

    除了连加方式外,其他基本上都可以算挂了。。。

    IE呢?压根就不支持字符串模板,所以咱就不测了。

    下面是测试脚本

      1 (function () {
      2 
      3     let stringPlus = function () {
      4 
      5             //+=运算
      6 
      7             let a = "ahsdgdsd'sadbd'fpdfknsndf";
      8             a += "sgeoejhsshdsksdlkfkfss";
      9             a += "weieotjmn;gjfkawjrbnvjkjke";
     10             a += "sdfnjslkdgfpla;'gjfak";
     11             a += "dsfjpojjagjksfdoaaskksgsf;adn";
     12             a += "wyehfdhfvcxaawjyfbsvkcsajgef";
     13             a += "igvbcxzxgfhpgbsna";
     14             a += "afsvcbhlksjegjfdnalrllfdjnxl";
     15             a += "awshbnlsklesfdnxsxldxdsdhkjklm";
     16             a += "uatesgsjdabsuaadjhcbdsdgcdbchnxkyesuefgdgsdxjhdbxcduhdywgbsihs";
     17             a += "agsccbjzhbcxbwefyouoiUWA8YESSIHCB";
     18             a += "dfasdkcaehwieruefandjcnxzvcuerefha";
     19             a += "vsdrleifhjs489wodjnlgsehufdja";
     20             a += "wegtfyudashnvnxntrwefkhjhfnc";
     21             a += "ASDGFODIUERTGYHJG;OLFJAMGRTYRUGFNDLAKBWYG ";
     22             a += "WEGPFHAFSDRRGJNRYTE8Aghjfoueygf";
     23             a += "erfvcdvmcdlfklvcnssejckzdjvcns";
     24             a += "wetufvnckjffbcnmfwuirldncxmlzjn";
     25             a += "fhfhjlkgeiuvlzkjdquevxx,.vnee";
     26             a += "sdchbnzkdn xxcmsbvcosihhsjm.mn soe";
     27             a += "yuuweygfyvczhvqwerhbfvnsjlhvzxv";
     28             a += "qyylkldbhjjfjJHMNVlaefl";
     29             a += "bdkvxknkniruvn,xhlsaeshksjfk z,";
     30             a += "ygufdkfhakvbxcv,nu[gq;hfauhfaks";
     31             a += "asfyerueiwsnjlkZBcharvbhzcablf";
     32             a += "dvcbzkjnvlsujvcz,cwrajklzldnahruf";
     33             a += "siihjscdcnlzzcslfahdwuiednvcaesf";
     34             a += "auhdzcjsfhjsl;ncaaureiwksnvlcl";
     35             a += "iuaehcnslklcseufjsjeotroeiosdn";
     36             a += "waeg;tirueywtrdfghjnxlghfgekfg";
     37             a += "nhgfdhjkf,v'c;lIkzxjfhbnszdv";
     38             a += "zxgfdsuyhjkglckjlYATRGFHJKXJCHASFJ";
     39             a += "afyvhjletd;LJKN;alnksrjfhbhdfn";
     40             a += "bvcxhgehglalksudjhfjdncmxwpljfd";
     41             return a;
     42         },
     43         stringPlus2 = function () {
     44 
     45             //连+运算
     46 
     47             let a = "ahsdgdsd'sadbd'fpdfknsndf"
     48             + "sgeoejhsshdsksdlkfkfss"
     49             + "weieotjmn;gjfkawjrbnvjkjke"
     50             + "sdfnjslkdgfpla;'gjfak"
     51             + "dsfjpojjagjksfdoaaskksgsf;adn"
     52             + "wyehfdhfvcxaawjyfbsvkcsajgef"
     53             + "igvbcxzxgfhpgbsna"
     54             + "afsvcbhlksjegjfdnalrllfdjnxl"
     55             + "awshbnlsklesfdnxsxldxdsdhkjklm"
     56             + "uatesgsjdabsuaadjhcbdsdgcdbchnxkyesuefgdgsdxjhdbxcduhdywgbsihs"
     57             + "agsccbjzhbcxbwefyouoiUWA8YESSIHCB"
     58             + "dfasdkcaehwieruefandjcnxzvcuerefha"
     59             + "vsdrleifhjs489wodjnlgsehufdja"
     60             + "wegtfyudashnvnxntrwefkhjhfnc"
     61             + "ASDGFODIUERTGYHJG;OLFJAMGRTYRUGFNDLAKBWYG "
     62             + "WEGPFHAFSDRRGJNRYTE8Aghjfoueygf"
     63             + "erfvcdvmcdlfklvcnssejckzdjvcns"
     64             + "wetufvnckjffbcnmfwuirldncxmlzjn"
     65             + "fhfhjlkgeiuvlzkjdquevxx,.vnee"
     66             + "sdchbnzkdn xxcmsbvcosihhsjm.mn soe"
     67             + "yuuweygfyvczhvqwerhbfvnsjlhvzxv"
     68             + "qyylkldbhjjfjJHMNVlaefl"
     69             + "bdkvxknkniruvn,xhlsaeshksjfk z,"
     70             + "ygufdkfhakvbxcv,nu[gq;hfauhfaks"
     71             + "asfyerueiwsnjlkZBcharvbhzcablf"
     72             + "dvcbzkjnvlsujvcz,cwrajklzldnahruf"
     73             + "siihjscdcnlzzcslfahdwuiednvcaesf"
     74             + "auhdzcjsfhjsl;ncaaureiwksnvlcl"
     75             + "iuaehcnslklcseufjsjeotroeiosdn"
     76             + "waeg;tirueywtrdfghjnxlghfgekfg"
     77             + "nhgfdhjkf,v'c;lIkzxjfhbnszdv"
     78             + "zxgfdsuyhjkglckjlYATRGFHJKXJCHASFJ"
     79             + "afyvhjletd;LJKN;alnksrjfhbhdfn"
     80             + "bvcxhgehglalksudjhfjdncmxwpljfd";
     81             return a;
     82         },
     83         arrayJoin = function () {
     84 
     85             //array join
     86 
     87             let a = ["ahsdgdsd'sadbd'fpdfknsndf"];
     88             a.push("sgeoejhsshdsksdlkfkfss");
     89             a.push("weieotjmn;gjfkawjrbnvjkjke");
     90             a.push("sdfnjslkdgfpla;'gjfak");
     91             a.push("dsfjpojjagjksfdoaaskksgsf;adn");
     92             a.push("wyehfdhfvcxaawjyfbsvkcsajgef");
     93             a.push("igvbcxzxgfhpgbsna");
     94             a.push("afsvcbhlksjegjfdnalrllfdjnxl");
     95             a.push("awshbnlsklesfdnxsxldxdsdhkjklm");
     96             a.push("uatesgsjdabsuaadjhcbdsdgcdbchnxkyesuefgdgsdxjhdbxcduhdywgbsihs");
     97             a.push("agsccbjzhbcxbwefyouoiUWA8YESSIHCB");
     98             a.push("dfasdkcaehwieruefandjcnxzvcuerefha");
     99             a.push("vsdrleifhjs489wodjnlgsehufdja");
    100             a.push("wegtfyudashnvnxntrwefkhjhfnc");
    101             a.push("ASDGFODIUERTGYHJG;OLFJAMGRTYRUGFNDLAKBWYG ");
    102             a.push("WEGPFHAFSDRRGJNRYTE8Aghjfoueygf");
    103             a.push("erfvcdvmcdlfklvcnssejckzdjvcns");
    104             a.push("wetufvnckjffbcnmfwuirldncxmlzjn");
    105             a.push("fhfhjlkgeiuvlzkjdquevxx,.vnee");
    106             a.push("sdchbnzkdn xxcmsbvcosihhsjm.mn soe");
    107             a.push("yuuweygfyvczhvqwerhbfvnsjlhvzxv");
    108             a.push("qyylkldbhjjfjJHMNVlaefl");
    109             a.push("bdkvxknkniruvn,xhlsaeshksjfk z,");
    110             a.push("ygufdkfhakvbxcv,nu[gq;hfauhfaks");
    111             a.push("asfyerueiwsnjlkZBcharvbhzcablf");
    112             a.push("dvcbzkjnvlsujvcz,cwrajklzldnahruf");
    113             a.push("siihjscdcnlzzcslfahdwuiednvcaesf");
    114             a.push("auhdzcjsfhjsl;ncaaureiwksnvlcl");
    115             a.push("iuaehcnslklcseufjsjeotroeiosdn");
    116             a.push("waeg;tirueywtrdfghjnxlghfgekfg");
    117             a.push("nhgfdhjkf,v'c;lIkzxjfhbnszdv");
    118             a.push("zxgfdsuyhjkglckjlYATRGFHJKXJCHASFJ");
    119             a.push("afyvhjletd;LJKN;alnksrjfhbhdfn");
    120             a.push("bvcxhgehglalksudjhfjdncmxwpljfd");
    121             return a.join('');
    122         },
    123         stringTemplate = function () {
    124 
    125             //字符串模板
    126 
    127             let a1 = "ahsdgdsd'sadbd'fpdfknsndf",
    128                 a2 = "sgeoejhsshdsksdlkfkfss",
    129                 a3 = "weieotjmn;gjfkawjrbnvjkjke",
    130                 a4 = "sdfnjslkdgfpla;'gjfak",
    131                 a5 = "dsfjpojjagjksfdoaaskksgsf;adn",
    132                 a6 = "wyehfdhfvcxaawjyfbsvkcsajgef",
    133                 a7 = "igvbcxzxgfhpgbsna",
    134                 a8 = "afsvcbhlksjegjfdnalrllfdjnxl",
    135                 a9 = "awshbnlsklesfdnxsxldxdsdhkjklm",
    136                 a10 = "agsccbjzhbcxbwefyouoiUWA8YESSIHCB";
    137             let a = `${a1}${a2}${a3}${a4}${a5}${a6}${a7}${a8}${a9}uatesgsjdabsuaadjhcbdsdgcdbchnxkyesuefgdgsdxjhdbxcduhdywgbsihs${a10}${"dfasdkcaehwieruefandjcnxzvcuerefha"}vsdrleifhjs489wodjnlgsehufdja${"wegtfyudashnvnxntrwefkhjhfnc"}${"ASDGFODIUERTGYHJG;OLFJAMGRTYRUGFNDLAKBWYG "}${"WEGPFHAFSDRRGJNRYTE8Aghjfoueygf"}${"erfvcdvmcdlfklvcnssejckzdjvcns"}${"wetufvnckjffbcnmfwuirldncxmlzjn"}${"fhfhjlkgeiuvlzkjdquevxx,.vnee"}${"sdchbnzkdn xxcmsbvcosihhsjm.mn soe"}${"yuuweygfyvczhvqwerhbfvnsjlhvzxv"}qyylkldbhjjfjJHMNVlaefl${"bdkvxknkniruvn,xhlsaeshksjfk z,"}${"ygufdkfhakvbxcv,nu[gq;hfauhfaks"}${"asfyerueiwsnjlkZBcharvbhzcablf"}${"dvcbzkjnvlsujvcz,cwrajklzldnahruf"}${"siihjscdcnlzzcslfahdwuiednvcaesf"}${"auhdzcjsfhjsl;ncaaureiwksnvlcl"}${"iuaehcnslklcseufjsjeotroeiosdn"}${"waeg;tirueywtrdfghjnxlghfgekfg"}${"nhgfdhjkf,v'c;lIkzxjfhbnszdv"}${"zxgfdsuyhjkglckjlYATRGFHJKXJCHASFJ"}${"afyvhjletd;LJKN;alnksrjfhbhdfn"}bvcxhgehglalksudjhfjdncmxwpljfd`
    138             return a;
    139         };
    140 
    141     //stringPlus
    142     let start = new Date().getTime(),
    143         string = "",
    144         times = 1000000;
    145     console.info('操作次数 -> ' + times);
    146     for(let i = 0; i < times; i++){
    147         string = stringPlus();
    148     }
    149     let end = new Date().getTime();
    150     console.info("string plus -> " + (end - start));
    151 
    152     //stringPlus2
    153     start = new Date().getTime();
    154     string = "";
    155     for(let i = 0; i < times; i++){
    156         string = stringPlus2();
    157     }
    158     end = new Date().getTime();
    159     console.info("string plus 2 -> " + (end - start));
    160 
    161     //arrayJoin
    162     start = new Date().getTime();
    163     string = "";
    164     for(let i = 0; i < times; i++){
    165         string = arrayJoin();
    166     }
    167     end = new Date().getTime();
    168     console.info("array join -> " + (end - start));
    169 
    170     //stringTemplate
    171     start = new Date().getTime();
    172     string = "";
    173     for(let i = 0; i < times; i++){
    174         string = stringTemplate();
    175     }
    176     end = new Date().getTime();
    177     console.info("string template -> " + (end - start));
    178 
    179 })();
  • 相关阅读:
    Nginx 模块开发(1)—— 一个稍稍能说明问题模块开发 Step By Step 过程
    nginx上传模块—nginx upload module-
    解决nginx上传模块nginx_upload_module传递GET参数
    nginx upload module的使用
    Nginx Upload Module 上传模块
    产品需求分析神器:KANO模型分析法
    SpringBoot @ConditionalOnBean、@ConditionalOnMissingBean注解源码分析与示例
    BAT、网易、京东等如何做大数据风控的?
    springboot 2.x 集成 drools 7.x
    Drools介绍与使用
  • 原文地址:https://www.cnblogs.com/imyeah/p/es6-stringTemplate-performance-testing.html
Copyright © 2011-2022 走看看