第24章 最佳实践

1、性能

1、避免全局查找

将在一个函数中会用到多次的全局对象保存在局部变量。比如多次使用document.getElement。。。,可以首先var doc=document,把document对象保存在本地的doc变量中。

2、避免with语句。

with会创建自己的作用域,需要额外的作用域链查找

3、避免不必要的属性查找

如果需要多次用到对象属性,应该将其存储在局部变量中。

4、优化循环

减值迭代更快,优化循环体

5、展开循环

循环次数确定时,消除循环更快。Duff装置的基本概念是将循环展开。

6、避免双重解释

JS解析字符串代码时需要启动解析器,慢

7、其他

①原生方法较快。因为使用C/C++等编译型语言写的

②Switch语句较快。比if-else语句更快。

③位运算符较快。

8、最小化语句

①多个变量声明组合

②插入迭代值,比如var name=values[i++];

③使用数组和对象字面量,比使用构造函数好

9、优化DOM交互

①最小化现场更新,比如使用DOM多次插入元素,可以先创建文档片段,之后将片段插入,只进行一次现场更新。

②使用innerHTML,比JS创建DOM结构更快。应构建好内容后一次性调用innerHTML,避免多次innerHTML。

③使用事件委托,利用事件冒泡,减少页面上的事件处理程序。

④注意HTMLCollection对象。避免多次调用,它是动态的,每次调用需要进行一次文档查询!

以下情况会返回HTMLCollection对象

  • 进行了对getElementsByTagName的调用
  • 获取了元素的childNodes属性
  • 获取了元素的attributes属性
  • 访问了特殊的集合,如document.forms/document.images等。

js-JavaScript高级程序设计学习笔记21 改善JavaScript性能的方法的更多相关文章

  1. JavaScript高级程序设计---学习笔记(一)

    今天,2017.3.17开始利用课余时间仔细学习<JavaScript高级程序设计>,将需要掌握的知识点记录下来,争取把书里的所有代码敲一遍并掌握. 1.标识符命名最好是第一个字母小写,剩 ...

  2. javascript高级程序设计学习笔记

    javascript高级程序设计,当枕头书已经好久了~zz  现在觉得自己在js的开发上遇到了一些瓶颈,归根究底还是基础太薄弱,所以重新刷一遍js高程希望有更新的认识. 一.javascript简介 ...

  3. JavaScript高级程序设计学习笔记第一章

    作为学习javascript的小白,为了督促自己读书,写下自己在读书时的提炼的关键点. 第一章: 1.JavaScript简史:Netscape Navigator中的JavaScript与Inter ...

  4. JavaScript高级程序设计学习笔记--错误处理与调试

    try-catch语句 只要代码中包含finally子句,则无论try或catch语句块中包含什么代码--甚至return语句,都不会阻止finally子句的执行,来看下面这个函数: function ...

  5. JavaScript高级程序设计学习笔记第二十章--JSON

    1.JSON:JavaScript Object Notation, JavaScript 对象表示法. 2.最重要的是要理解它是一种数据格式,不是一种编程语言.虽然具有相同的语法形式,但 JSON ...

  6. javascript 高级程序设计 学习笔记

    <!--<script> // 异步请求封装 IE6即以上浏览器 // ajax(url,fnSucc,selectID,fnFaild) //url 请求地址 //fnSucc 异 ...

  7. JavaScript高级程序设计---学习笔记(二)

    面向对象程序设计1.属性类型.定义多属性.读取属性特性对象的属性在创建时都带有一些特征值,JavaScript通过这些特征值来定义它们的行为.这些特性是为了实现JavaScript引擎用的,因此不能直 ...

  8. JavaScript高级程序设计学习笔记--DOM

    DOM(文档对象模型)是针对HTML和XML文档的一个API(应用程序接口). Document类型 文档的子节点 虽然DOM标准规定Document节点的子节点可以是DocumentType,Ele ...

  9. Javascript高级程序设计学习笔记一

    看完w3school的javascript的概念,有点基础,开始红皮书的路程,今晚总结前二章的心得. 第一章:javascript简介 重点是javascript的实现是由 ECMAScript(核心 ...

随机推荐

  1. mac osx get postgresql path

    sudo lsof -i :5433 ps xuwww -p 91 sudo port install py27-psycopg2

  2. SQL Server 复制快照执行错误 错误代码 14068

    问题描述: 使用基于快照初始化的事务复制,在上次发布的时候,添加项,执行快照agent,报错,错误信息: Error messages:Message: The subscription status ...

  3. android android 判断是否滑动

    (转自:http://blog.csdn.net/angle_rupert/article/details/6255522) 声明: float x_temp01 = 0.0f; float y_te ...

  4. ipv4理论知识3-分类编址之两级编址

    两级编制 分类编址时,同一网络中的所有地址都属于统一个地址块,而每个地址块包含两部分:网络标识和主机标识.网络标识指明了网络,主机标识则指明了连接到该网络的一台特定的主机.如下图描绘了分类编址中一个I ...

  5. [原创]首次制作JQueryUI插件-Timeline时间轴

    特点: 1. 支持多左右滚动,左右拖动. 2. 时间轴可上下两种显示方式. 3. 支持两种模式的平滑滚动/拖动. 4. 行压缩(后续版本此处可设置是否开启,上传的代码不带这个功能). 5. 支持hov ...

  6. PHP-SplDoublyLinkedList

    <?php /** * @package a doubly linked list test * @author zhaoyingnan<zhaoyn@bbtree.com> * @ ...

  7. 推荐一款 chrome SSH 插件 - Secure Shell

    http://blog.csdn.net/jizhongchun/article/details/8519413 导读:我就是一个Chrome Fans.最近发现一款google官方出的SSH插件 - ...

  8. [AJAX]ajax在兼容模式下失效解决办法

    使用jQuery,用ajax实现局部刷新功能,在火狐,360急速浏览器高速模式下,ie8,9都能正常运行,但切换到兼容模式下无效,解决办法有两种关闭浏览器兼容性视图,二是引入json2.js文件 这里 ...

  9. NIO与AIO,同步/异步,阻塞/非阻塞

    1.flip(),compact(),与clear()的使用 flip()内部实现,先将limit设为当前位置,再将缓冲区的postion设为0,所以是为将缓冲区的数据写出到其它通道或者get()作准 ...

  10. MMORPG大型游戏设计与开发(服务器 游戏场景 地图和区域)

    地图的数据以及区域的信息是场景的重要组成部分,这些数据同时存在客户端和服务器,而且都是由编辑器生成的.那么保存的文件数据结构是怎样的?一张3D的场景地图又是怎样处理这些数据的?同时告诉大家这里同样只是 ...