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. [HAOI 2010] 计数

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=2425 [算法] 类似与数位动态规划的思想 , 用组合数学进行简单推导即可 时间复杂度 ...

  2. linear_classifier.py

    import numpy as np from cs231n.classifiers.linear_svm import * from cs231n.classifiers.softmax impor ...

  3. 也谈Flash mmorpg地图问题【转】

    网上看一篇关于目前几个流行flash mmorpg地图实现的分析,这里也想说说自己的一些看法. 常见的三种方式:1.整图2.Tile元素拼装3.栅格化切片 整图 整图加载很好理解直接加载一张背景图.这 ...

  4. 通过HTTP请求WEBAPI的方式

    平时工作中长期需要用到通过HTTP调用API进行数据获取以及文件上传下载(C#,JAVA...都会用到).这里获取的是包括网页的所有信息.如果单纯需要某些数据内容.可以自己构造函数甄别抠除出来!一般的 ...

  5. 7 二分搜索树的原理与Java源码实现

    1 折半查找法 了解二叉查找树之前,先来看看折半查找法,也叫二分查找法 在一个有序的整数数组中(假如是从小到大排序的),如果查找某个元素,返回元素的索引. 如下: int[] arr = new in ...

  6. E20180605-hm

    arbitrary adj. 乱; 随意的,任性的,随心所欲的; 主观的,武断的; 霸道的,专制的,专横的,独断独行的; session n. 开会,会议; (法庭的) 开庭; 会期,学期; (进行某 ...

  7. E20180601-hm

    trade-off n. 权衡; 交易;(不是商业方面的交易,而是“利”与“弊”的权衡) vertex n. 顶点; 最高点; <数>(三角形.圆锥体等与底相对的)顶; (三角形.多边形等 ...

  8. 小程序隐藏或自定义 scroll-view滚动条

    css 隐藏滚动条 ::-webkit-scrollbar { width:; height:; color: transparent; } 自定义滚动条样式 ::-webkit-scrollbar ...

  9. Android 跨应用调用Activity

    http://blog.csdn.net/ouyangliping/article/details/7972141 如何调用另外一个app应用的activity或者service,本文提供一个验证可行 ...

  10. HTTPS为什么更安全,请看这里

    本文转载于https://foofish.net/https-story-1.html HTTPS 是建立在密码学基础之上的一种安全通信协议,严格来说是基于 HTTP 协议和 SSL/TLS 的组合. ...