By XFE-堪玉


阅读《高性能javascript》后,对其内容的一个整理和精简

加载与执行

  1. 将script标签放在body结尾标签上面
  2. 控制script标签数量(每一次script解析都意味着阻塞或延迟)
  3. 内嵌脚本不要放在link样式之后
  4. 对script标签应用defer属性
  5. 动态创建script标签加载js文件(模块化框架即可)

数据存取

  1. 不影响this的情况下,对反复访问的对象进行变量保存
  2. 合理使用局部变量,减少作用域跨越
  3. 避免使用with和eval
  4. 谨慎地使用闭包
  5. 减少Object对象的层次访问,避免过长的属性读取(es6解构赋值)

DOM编程

  1. 尽量用新的选择器api代替老的,尽量用dom克隆替代dom创建
  2. html集合操作非常昂贵,可转换为数组再进行操作,同时使用局部变量缓存操作
  3. 对dom访问信息进行缓存,对dom改变进行批量操作
  4. 对操作频繁的dom,尽可能采用position:absolute
  5. 对操作密集的dom,先display:none——>操作——>再display:block
  6. 对操作量很大的dom,采用文档碎片createDocumentFragment
  7. 合理使用事件委托,避免对dom进行逐个事件绑定

算法和流程控制

  1. 减少使用for...in循环
  2. 条件判断上,避免类型转换
  3. 条件较多时,使用switch代替if..else
  4. 最小化语句数,避免多个var声明,插入迭代值——arr[i++]
  5. 简化终止条件,简化循环体,减值迭代
  6. 展开循环(在次数不多的情况下)

字符串与正则表达式

  1. 减少字符串拼接,避免"临时字符串"的出现
  2. 当叠加字符串的时候,字符串变量应该靠左
  3. 数组join方法比其他字符串连接方式慢
  4. 字符串concat方法比使用简单的+和+=慢
  5. 正则优化(个人略过...)

快速响应的用户界面

  1. 对于异步操作的任务,可使用定时器分解任务,分割循环项
  2. 定时器最小延迟建议为25毫秒,应避免高频定时器的数量
  3. 合理使用web workers

Ajax

  1. 对那些不会改变服务器状态,只获取数据的请求,应该使用get类型(会被游览器缓存起来,有利于性能)
  2. 如果你只关心发送数据到服务器,可以使用图标信标(img.src="请求地址")
  3. 使用能被http缓存的get查询请求的时候,应该同时在服务端设置Expires头信息(过期时间)
  4. 本地设置缓存(变量缓存与storage缓存)

编程实践

  1. 避免使用eval,Function,setTimeout和setInterval去执行需要解析的字符串代码
  2. 对数组和对象使用字面量进行创建,而非构造器模式
  3. 涉及计算的过程,应该尽量用原生方法(Math),合理使用位运算符

构建并部署高性能javascript应用

  1. 合并js,减少http请求
  2. 压缩js,降低请求大小
  3. 设置Accept-Encoding HTTP请求头,对js进行gzip压缩
  4. 设置Expires HTTP响应头,对js文件进行过期时间缓存(客户端使用时间戳更新js文件)
  5. 使用内容分发网络CDN

工具

  1. javascript的性能分析简单的分析可以通过Date日期和Log函数,推荐使用当前的集成测试和单元测试
  2. 每个游览器都具备各种的检查器和资源面板,可以通过分析得出一些javascript性能的数据

《高性能JavaScript》 实用指南的更多相关文章

  1. 【读书笔记】读《高性能网站建设指南》及《高性能网站建设进阶指南:Web开发者性能优化最佳实践》

    这两本书就一块儿搞了,大多数已经理解,简单做个标记.主要对自己不太了解的地方,做一些记录.   一.读<高性能网站建设指南> 0> 黄金性能法则:只有10%~20%的最终用户响应时间 ...

  2. Chrome 控制台实用指南【转】

    转自伯乐在线. Chrome 控制台实用指南 前言 Chrome浏览器我想是每一个前端er必用工具之一吧,一部分原因是它速度快,体积不大,支持的新特性也比其它浏览器多,还有一部分我想就是因为它的控制台 ...

  3. 最棒的 JavaScript 学习指南(2018版)

    译者注:原文作者研究了近2.4万篇 JavaScript 文章得出这篇总结,全文包含学习指南.新人上手.Webpack.性能.基础概念.函数式编程.面试.教程案例.Async Await.并发.V8. ...

  4. Lodash JavaScript 实用工具库

    地址:https://www.lodashjs.com/ Lodash 是一个一致性.模块化.高性能的 JavaScript 实用工具库.

  5. 《高性能javascript》阅读摘要

    最近在阅读这本Nicholas C.Zakas(javascript高级程序设计作者)写的最佳实践.性能优化类的书.记录下主要知识. 加载和执行 脚本位置 放在<head>中的javasc ...

  6. JavaScript权威指南 - 函数

    函数本身就是一段JavaScript代码,定义一次但可能被调用任意次.如果函数挂载在一个对象上,作为对象的一个属性,通常这种函数被称作对象的方法.用于初始化一个新创建的对象的函数被称作构造函数. 相对 ...

  7. JavaScript权威指南 - 对象

    JavaScript对象可以看作是属性的无序集合,每个属性就是一个键值对,可增可删. JavaScript中的所有事物都是对象:字符串.数字.数组.日期,等等. JavaScript对象除了可以保持自 ...

  8. JavaScript权威指南 - 数组

    JavaScript数组是一种特殊类型的对象. JavaScript数组元素可以为任意类型,最大容纳232-1个元素. JavaScript数组是动态的,有新元素添加时,自动更新length属性. J ...

  9. 《高性能javascript》一书要点和延伸(上)

    前些天收到了HTML5中国送来的<高性能javascript>一书,便打算将其做为假期消遣,顺便也写篇文章记录下书中一些要点. 个人觉得本书很值得中低级别的前端朋友阅读,会有很多意想不到的 ...

随机推荐

  1. LuoguP4861 按钮

    传送门 这题一眼看上去要解\(k^x \equiv 1(mod\ m)\)的最小正整数解. 于是我打了一个扩展BSGS 这题这样做算的答案一直是0的.不过有另一个定理欧拉定理,\(k^{\varphi ...

  2. Turn your Session into FlushMode.COMMIT/AUTO or remove 'readOnly' marker from transaction definition.

  3. Update 出现在的问题

    报错提示:之前的操作没有完成,运行deanup被打断,请先执行Cleanup方法. 正常右键点击Cleanup,如果只让默认值勾选,可能还是会报这个错.所以正确操作如下: 全部选中再点击OK,这样就可 ...

  4. python虚拟环境管理包virtualenvwrapper

    1.打开cmd 2.安装virtualenvwrapper pip install virtualenvwrapper-win 3.配置虚拟环境的位置 新建系统变量默认在c盘 4.新建虚拟环境 mkv ...

  5. Firebug 的脚本页面不能用

    1.遇到这种情况,一般重置firebug,然后开启“脚本“功能,刷新页面,就能显示正常 2.要不就是 版本问题,50.0不行,下载回49版本就可以了

  6. wannafly test D

    题意: 给定n,m求满足: 1.a[i][j]互不相同,且有$1<=a[i][j]<=n*m$ 2.对于$a[i1][j1],a[i2][j2]$,如果有 $i1 \oplus j1 &g ...

  7. C#读写Access数据库、表格datagridview窗体显示代码实例

    C#读写Access数据库.表格datagridview窗体显示代码实例 最近项目中用到C#对于Access数据库表读写.mdb操作,学习了下相关的东西,这里先整理C#对于Access数据库的操作,对 ...

  8. C#基础之--线程、任务和同步:一、异步委托

    创建线程的一种简单方式是定义一个委托,并异步调用它.委托是方法的类型安全的引用. Delegate还支持异步地调用方法.在后台Delegate类会创建一个执行任务的线程. 为了说明委托的异步特性,从一 ...

  9. 徒手撸一个 Spring Boot 中的 Starter ,解密自动化配置黑魔法!

    我们使用 Spring Boot,基本上都是沉醉在它 Stater 的方便之中.Starter 为我们带来了众多的自动化配置,有了这些自动化配置,我们可以不费吹灰之力就能搭建一个生产级开发环境,有的小 ...

  10. phpStrom/webstrom如何修改Terminal命令行的字体大小

    phpstrom.webstrom中有个Terminal窗口效果就是打开cmd.exe,利用它就不用打开本地cmd命令行了. 默认的Terminal字体很大,如何修改呢? 1.Color Scheme ...