《高性能JavaScript》 实用指南
By XFE-堪玉
阅读《高性能javascript》后,对其内容的一个整理和精简
加载与执行
- 将script标签放在body结尾标签上面
- 控制script标签数量(每一次script解析都意味着阻塞或延迟)
- 内嵌脚本不要放在link样式之后
- 对script标签应用defer属性
- 动态创建script标签加载js文件(模块化框架即可)
数据存取
- 不影响this的情况下,对反复访问的对象进行变量保存
- 合理使用局部变量,减少作用域跨越
- 避免使用with和eval
- 谨慎地使用闭包
- 减少Object对象的层次访问,避免过长的属性读取(es6解构赋值)
DOM编程
- 尽量用新的选择器api代替老的,尽量用dom克隆替代dom创建
- html集合操作非常昂贵,可转换为数组再进行操作,同时使用局部变量缓存操作
- 对dom访问信息进行缓存,对dom改变进行批量操作
- 对操作频繁的dom,尽可能采用position:absolute
- 对操作密集的dom,先display:none——>操作——>再display:block
- 对操作量很大的dom,采用文档碎片createDocumentFragment
- 合理使用事件委托,避免对dom进行逐个事件绑定
算法和流程控制
- 减少使用for...in循环
- 条件判断上,避免类型转换
- 条件较多时,使用switch代替if..else
- 最小化语句数,避免多个var声明,插入迭代值——arr[i++]
- 简化终止条件,简化循环体,减值迭代
- 展开循环(在次数不多的情况下)
字符串与正则表达式
- 减少字符串拼接,避免"临时字符串"的出现
- 当叠加字符串的时候,字符串变量应该靠左
- 数组join方法比其他字符串连接方式慢
- 字符串concat方法比使用简单的+和+=慢
- 正则优化(个人略过...)
快速响应的用户界面
- 对于异步操作的任务,可使用定时器分解任务,分割循环项
- 定时器最小延迟建议为25毫秒,应避免高频定时器的数量
- 合理使用web workers
Ajax
- 对那些不会改变服务器状态,只获取数据的请求,应该使用get类型(会被游览器缓存起来,有利于性能)
- 如果你只关心发送数据到服务器,可以使用图标信标(img.src="请求地址")
- 使用能被http缓存的get查询请求的时候,应该同时在服务端设置Expires头信息(过期时间)
- 本地设置缓存(变量缓存与storage缓存)
编程实践
- 避免使用eval,Function,setTimeout和setInterval去执行需要解析的字符串代码
- 对数组和对象使用字面量进行创建,而非构造器模式
- 涉及计算的过程,应该尽量用原生方法(Math),合理使用位运算符
构建并部署高性能javascript应用
- 合并js,减少http请求
- 压缩js,降低请求大小
- 设置Accept-Encoding HTTP请求头,对js进行gzip压缩
- 设置Expires HTTP响应头,对js文件进行过期时间缓存(客户端使用时间戳更新js文件)
- 使用内容分发网络CDN
工具
- javascript的性能分析简单的分析可以通过Date日期和Log函数,推荐使用当前的集成测试和单元测试
- 每个游览器都具备各种的检查器和资源面板,可以通过分析得出一些javascript性能的数据
《高性能JavaScript》 实用指南的更多相关文章
- 【读书笔记】读《高性能网站建设指南》及《高性能网站建设进阶指南:Web开发者性能优化最佳实践》
这两本书就一块儿搞了,大多数已经理解,简单做个标记.主要对自己不太了解的地方,做一些记录. 一.读<高性能网站建设指南> 0> 黄金性能法则:只有10%~20%的最终用户响应时间 ...
- Chrome 控制台实用指南【转】
转自伯乐在线. Chrome 控制台实用指南 前言 Chrome浏览器我想是每一个前端er必用工具之一吧,一部分原因是它速度快,体积不大,支持的新特性也比其它浏览器多,还有一部分我想就是因为它的控制台 ...
- 最棒的 JavaScript 学习指南(2018版)
译者注:原文作者研究了近2.4万篇 JavaScript 文章得出这篇总结,全文包含学习指南.新人上手.Webpack.性能.基础概念.函数式编程.面试.教程案例.Async Await.并发.V8. ...
- Lodash JavaScript 实用工具库
地址:https://www.lodashjs.com/ Lodash 是一个一致性.模块化.高性能的 JavaScript 实用工具库.
- 《高性能javascript》阅读摘要
最近在阅读这本Nicholas C.Zakas(javascript高级程序设计作者)写的最佳实践.性能优化类的书.记录下主要知识. 加载和执行 脚本位置 放在<head>中的javasc ...
- JavaScript权威指南 - 函数
函数本身就是一段JavaScript代码,定义一次但可能被调用任意次.如果函数挂载在一个对象上,作为对象的一个属性,通常这种函数被称作对象的方法.用于初始化一个新创建的对象的函数被称作构造函数. 相对 ...
- JavaScript权威指南 - 对象
JavaScript对象可以看作是属性的无序集合,每个属性就是一个键值对,可增可删. JavaScript中的所有事物都是对象:字符串.数字.数组.日期,等等. JavaScript对象除了可以保持自 ...
- JavaScript权威指南 - 数组
JavaScript数组是一种特殊类型的对象. JavaScript数组元素可以为任意类型,最大容纳232-1个元素. JavaScript数组是动态的,有新元素添加时,自动更新length属性. J ...
- 《高性能javascript》一书要点和延伸(上)
前些天收到了HTML5中国送来的<高性能javascript>一书,便打算将其做为假期消遣,顺便也写篇文章记录下书中一些要点. 个人觉得本书很值得中低级别的前端朋友阅读,会有很多意想不到的 ...
随机推荐
- docker 学习(四) springboot + docker
下面演示: 在Windows上新建一个简单的Springboot工程,生成docker iamge,然后在本地的docker上运行: (1):登录到 https://start.spring.io/, ...
- Eclipse中建立自己的类库,给不同的工程使用
win7 进入服务 开始 运行 services.msc 在多个工程当中,可能使用到相同的jar包,这时,如果我们建立一个自己的类库,该类库中存放着所有工程均需要的jar包,就可以免去重复导入的麻烦. ...
- 简单运行Lua代码
http://blog.csdn.net/hamenny/article/details/4420522
- 给source insight添加.cc的C++文件后缀识别(转载)
转自:http://blog.chinaunix.net/uid-9950859-id-99172.html 今天在读mysql代码的时候,发现.cc结尾的文件都没有添加进来,google下了,发现原 ...
- 两个MATLAB在线工具,画图啥的都不用安装了
1. matlab网页版 http://octave-online.net/ http://www.compileonline.com/execute_matlab_online.php 2. 函 ...
- VR相关网站
VR87870 http://www.87870.com/ VR玩家网 http://www.vrwanjia.cn/ VR之家 http://www.vr.cn/ http://gad.qq.com ...
- WindApi2 , WindOriginalApiLibrary 突然不兼容问题
1. 在新的电脑上从tfs拉下代码后编译, windoriginalapilibrary 这个工程弹出对话框,要求转为vs2013编译,选择同意,编译成功 2.WindApi2 的Reference列 ...
- [Xcode 实际操作]八、网络与多线程-(4)使用UIApplication对象发送短信
目录:[Swift]Xcode实际操作 本文将演示如何使用应用程序单例对象,发送短信的功能. 在项目导航区,打开视图控制器的代码文件[ViewController.swift] 注:需要使用真机进行测 ...
- 阿里云物联网 .NET Core 客户端 | CZGL.AliIoTClient:3. 订阅Topic与响应Topic
文档目录: 说明 1. 连接阿里云物联网 2. IoT 客户端 3. 订阅Topic与响应Topic 4. 设备上报属性 4.1 上报位置信息 5. 设置设备属性 6. 设备事件上报 7. 服务调用 ...
- 1.python真的是万恶之源么?(初识python)
python真的是万恶之源么? 计算机基础及puthon了解 1.计算机基础知识 cpu : 相当于人类大脑,运算和处理问题 内存 : 临时存储数据,单点就消失,4G,8G,16G,32G 硬盘 : ...