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. 洛谷P4014分配问题——网络流24题

    题目:https://www.luogu.org/problemnew/show/P4014 最大/小费用最大流裸题. 代码如下: #include<iostream> #include& ...

  2. POJ1163(基础线性DP)

    The Triangle Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 42547   Accepted: 25721 De ...

  3. .Net框架中的CLR,CTS,ClS的解释

    CLR的全称(Common Language Runtime) 公共语言运行时 可以把它理解为包含运行.Net程序的引擎 和 一堆符合公用语言基础(CLI)的类库的集合,他是一个规范的实现,我们开发的 ...

  4. matlab白底换红底

    白底换红底 局部阈值调整 边界高斯滤波 function demo global R global threshold global img global dstColor global rect g ...

  5. mysql 快捷键

    1.ctrl+q           打开查询窗口2.ctrl+/            注释sql语句3.ctrl+shift +/  解除注释4.ctrl+r           运行查询窗口的s ...

  6. 4.1-4.2 基于HDFS云盘存储系统分析及hadoop发行版本

    一.基于HDFS云盘存储系统 如:某度网盘 优点: *普通的商用机器 内存 磁盘 *数据的安全性 操作: *put   get *rm  mv *java api *filesystem 核心: *H ...

  7. Flutter实战视频-移动电商-36.FlutterToast插件使用

    36.FlutterToast插件使用 https://github.com/PonnamKarthik/FlutterToast fluttertoast: ^ category_page.dart ...

  8. ES6笔记总结

    常用命令 函数的rest参数和扩展 promise使用 module.exports和Es6 import/export的使用 function sum(x,y,z){ let total = 0; ...

  9. 算法学习--Day8

    今天重拾算法复习. 今天学习了两个类型的算法——并查集与最小生成树(MST) 简单记录一下并查集的大致内容. 一.并查集的内容大致作用为查找当前图中的点有几个集合. 该算法起到查询分组的情况.通过给定 ...

  10. CodeForces722C Destroying Array【瞎搞】

    题意: 先给你一个序列,然后给你n个1-n的一个数,让你求前i个元素销毁的时候,区间字段和区间最大: 思路: 离线处理,维护新区间首尾位置的起点和终点,倒着处理: #include <bits/ ...