只为粗暴看一下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 })();
原文地址:https://www.cnblogs.com/imyeah/p/es6-stringTemplate-performance-testing.html