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. 安装tensorflow-gpu出现的问题

    1.Could not install packages due to an EnvironmentError: [Errno 13] Permission denied: '/usr/local/l ...

  2. Ubuntu 安装indicator-sysmonitor

    之前就像安装一个软件用来查看Ubuntu的CPU, 内存, 网速情况, 终于让我碰到了--indicator-sysmonitor 仅需三条命令, 你值得拥有: sudo add-apt-reposi ...

  3. Android开发---开发文档翻译

    2014.11.24 1:ClipData类:用于表示剪切的数据,此剪切的数据可以是复杂类型,包括一个或多个条目实例 (1)基础知识 >公共类:public class >嵌套类:Clip ...

  4. 20个Flutter实例视频教程-第03节: 不规则底部工具栏制作-1

    第03节: 不规则底部工具栏制作-1 博客地址: https://jspang.com/post/flutterDemo.html#toc-973 视频地址: https://www.bilibili ...

  5. 参考手册(html css)

    HTML CSS DOM XML DOM   XML DOM Document JavaScript JavaScript RegExp JSP

  6. hihocoder #1608 : Jerry的奶酪(状压DP)

    传送门 题意 分析 设dp[i][j]为在i状态下当前在第j个奶酪的最小费用 转移方程:dp[(1<<k)|i][k]=dp[i][j]+d[j][k] 预处理出每个奶酪之间的距离,加入起 ...

  7. laravel 安装配置前准备

    Laravel 框架使用 Composer 来管理其依赖性.所以,在你使用 Laravel 之前,你必须在你电脑上是否安装了 Composer.最简单的获取Composer的方式就是百度之,百度关键字 ...

  8. Unity开发MMOARPG游戏解决方案

    http://www.csdn.net/article/2015-05-07/2824634 天神互动是一家已经上市的以研发MMOARPG游戏为主的技术公司,<苍穹变>是天神互动研发的第一 ...

  9. ubuntu 安装 RPostgreSQL 库

    其实大家在Linux 的R 中安装其他库,完全可以使用R 自带的安装方式,只是这个 RPostgreSQL 库需要用到 postgresql 的lib 库与include 头文件,所以才有若干个步骤去 ...

  10. Spark 学习(三) maven 编译spark 源码

    spark 源码编译 scala 版本2.11.4 os:ubuntu 14.04 64位 memery 3G spark :1.1.0 下载源码后解压 1 准备环境,安装jdk和scala,具体参考 ...