// 请把以下用于连接字符串的JavaScript代码修改为更高效的方式

var htmlString = ‘ < div class=”container” > ’ + ‘ < ul id=”news-list” > ’;
for (var i = 0; i < NEWS.length; i++) {
  htmlString += ‘ < li > < a href=”’ +NEWS[i].LINK + ‘” > +NEWS[i].TITLE + ‘ < /a > < /li > ’;
}
htmlString += ‘ < /ul > < /div > ’;

考点有两个:

  1. JavaScript字符串的连接机制。
  2. 大规模的循环体是重点优化对象

先看第一点,字符串的连接机制

var str ;
str = 'this is a string';
str = str + ',another string.';
对于这个连接操作JS的处理机制是:
(1)新建一个临时字符串,
(2)将新字符串赋值为 str + ',another string.' ,然后返回这个新字符串
(3)并同时销毁原始字符串
所以字符串的连接效率较低。提高效率的办法是用数组的join函数,使用join代替字符串拼接这个技巧对于IE6、7有显著性能提升,同时对现代浏览器,没有太过明显的性能损耗

第二点,大规模的循环体是主要的优化对象

在JavaScript中,我们可以使用for(;;),while(),for(in)三种循环,事实上,这三种循环中for(in)的效率极差,因为它需要查询散列键,只要可以,就应该尽量少用。for(;;)和while循环,while循环的效率要优于for(;;),因为for(;;)结构的问题,需要经常跳转回去。常用的循环优化都会将循环倒过来,最常用的for循环和while循环都是前测试循环,而如do-while这种后测试循环,可以避免最初终止条件的计算,因此运行更快。

        var arr = [1, 2, 3, 4, 5, 6, 7];
var sum = 0;
for (var i = 0, l = arr.length; i < l; i++) {
sum += arr[i];
} //可以考虑替换为: var arr = [1, 2, 3, 4, 5, 6, 7];
var sum = 0, l = arr.length;
do{
sum += arr[l];
}while(l--)

NEWS.length需要缓存,减少每次循环都去访问一次属性不然每次循环都要重新计算一次length

对NEWS,NEWS[i]使用局部变量是高效的:
var item =NEWS[i]。

NEWS[i].LINK - > item.LINK

NEWS[i].TITLE - > item.TITLE

经过上面两步优化,最终程序为


var htmlString=[];
htmlString.push( "< div class='container' > < ul id='news-list' > ");

//此处要保持拼接的次序,所以采用i++而不是len--的书写方式
for(var i=0,len=NEWS.length; i<len;i++){
  var item = NEWS[i];
   htmlString .push(‘ < li > < a href=”’ +item.link + ‘” > +item.title + ‘ < /a > < /li > ’);
}
htmlString.push( ‘ < /ul > < /div > ’);
htmlString=htmlString.join(“”);
 
 

JS字符串拼接优化的更多相关文章

  1. html转js字符串拼接

    https://www.bejson.com/convert/html_js/ html转js字符串拼接

  2. 【javaScript】js出现allocation size overflow以及字符串拼接优化

    字符串拼接长一点了,就出现了allocation size overflow异常! 先创建缓冲字符串数组,最后将数组转化为字符串 <script type="text/javascri ...

  3. Js 字符串拼接的两种方法

    字符串拼接的两种方法 用数组的方法的好处是:避免变量重新定义.赋值 <!DOCTYPE html> <html lang="en"> <head> ...

  4. js 字符串拼接、截取、查找...

    函数:split() 功能:使用一个指定的分隔符把一个字符串分割存储到数组 例子: let str=”020-88888888-03”; let arr=str.split(”-”); console ...

  5. js 字符串拼接

    正常来说已经使用es6 的 模板了如`` //页面层 layer.open({ type: 1, content:`<div class="child_card"> & ...

  6. js 字符串拼接 html 累加 html 叠加

    正常来说已经使用es6 的 模板了如`` //页面层 layer.open({ type: 1, content:`<div class="child_card"> & ...

  7. ajax 参数data问题 data中的 参数名 参数值为string 提交到后台后,会自动转换参数名相同的 类型 和 js字符串拼接

    latlng"14.6005238,100.43635419999998"Cusid"accb5c1b-6aef-4f3b-a4eb-d60ea1ca5f54" ...

  8. js字符串拼接

    1. 2. 3.

  9. 从字符串拼接看JS优化原则

    来自知乎的问题:JavaScript 怎样高效拼接字符串? 请把以下用于连接字符串的JavaScript代码修改为更高效的方式: var htmlString ='< div class=”co ...

随机推荐

  1. lesson7:java线程池

    在jdk1.5的版本中,java提供了语言级别的线程池,对于需要使用线程池的业务系统和中间件框架等提供了方便的选择.我认为线程池主要有两个方面的作用:第一就是防止因为外部条件的变化,造成线程数的瞬间飙 ...

  2. BNU10792:沙漠旅行者

    有个旅行者计划横穿沙漠,沙漠中水资源很匮乏.旅行者需要依靠补给站的支持,才能横穿整个沙漠.假设所有的补给站都在一条直线上,而且旅行者一定沿着这条直线走.起点在1号补给站,终点在第N号补给站,起点和终点 ...

  3. OD: Big_Endian vs Little_Endian

    经调试,Windows 下为 Little_Endian,OD 中堆栈数据区的 (dword)0xAABB0102,0x02 存储在低地址,0x01 存储在高地址. 内容来自:http://blog. ...

  4. Java 二维码生成工具类

    /** * 二维码 工具 * * @author Rubekid * */ public class QRcodeUtils { /** * 默认version */ public static fi ...

  5. Sherpa | Complete Navigation System 介绍与教材

    这里的夏尔巴人在iPad上使用的一种新的视频. 正如其名称所暗示的,夏尔巴人是所有您的导航需求的整体解决方案. 夏尔巴人带来了每个接口的三个主要的导航元素结合在一起 - 导航栏,侧边栏和页脚粘. 每一 ...

  6. C#中静态构造函数含义及使用

    static以前都接触过,可是最近才发现了还有静态类的写法,也可能是以前没太注意了,所以自己去研究了一下! 1.什么是构造函数: 1.1 例如:static  Class{} 1.2 使用静态函数的注 ...

  7. scala学习笔记——类和对象

    基础语法关于Scala程序,这是非常要注意以下几点. 区分大小写 - Scala是大小写敏感的,这意味着标识Hello 和 hello在Scala中会有不同的含义. 类名 - 对于所有的类名的第一个字 ...

  8. C#高级知识点概要(2) - 线程并发锁

    本文目录: 线程的简单使用 并发和异步的区别 并发控制 - 锁 线程的信号机制 线程池中的线程 案例:支持并发的异步日志组件 线程的简单使用 常见的并发和异步大多是基于线程来实现的,所以本文先讲线程的 ...

  9. Ping命令详解

    引言:我们每天都在使用Ping命令,但是我们可能不太清楚Ping的工作原理,对运行结果中的很多细节也不是很清楚.查找了一下资料,现在和大家分享一下Ping的运行原理和相关细节. A.Ping命令的工作 ...

  10. MVC 4.0 Razor模板引擎 @Html.RenderPartial 与 @Html.RenderAction 区别

    近来在学习MVC 4.0,设置布局全局网页的页脚,使用了Razor语法 @{ Html.RenderPartial("Footer", Model.FooterData); } 但 ...