《高性能Javascript》 Summary(二)
第四章、算法和流程控制 Algorithms And Flow Control
原因:代码整体结构是执行速度的决定因素之一。代码量少不一定运行速度快,代码量多不一定运行速度慢。性能损失与组织代码和具体问题解决办法直接相关。
解决:
- 与其他编程语言一样,代码的写法和算法选用影响JavaScript的运行时间。与其他编程语言不同是,JavaScript可用的资源有限,所以优化的技术更为重要。
- For, While, Do while循环特性相似,谁也不必谁更快或更慢。
- 除非迭代遍历一个未知的属性, 否则不用for in 循环(效率低)。
- 一般来说,switch 比if else 效率高,但判断条件少时用if else结构更好。
- 当判断条件多时,查表法比if else或者switch速度更快。
- 浏览器调用栈尺寸限制了递归算法在JavaScript中的应用,栈溢出错误导致其他代码也不能正常执行。
- 如果遇到栈溢出错误,将方法修改为一个迭代算法或者使用制表法可以避免重复工作。
- 运行的代码总量越大,使用这些策略带来的性能提升越明显。
第五章、字符串和正则表达式 String and Regular Expressions
问题: 密集的字符串操作和粗劣的编写正则表达式可能是主要的性能障碍。
解决:
- 当连接数量巨大或者尺寸巨大的字符串时,数组联合是IE7和它早期版本上唯一具有合理性能的方法。
- 如果不关心IE7和早期版本,数组联合则是最慢的方法之一。使用简单的+和+=取而代之,可以避免产生不必要的中间字符串。
- 回溯既是正则表达式匹配功能的基本组成之一,又是正则表达式影响效率的常见原因。
- 避免回溯失控:使用邻字元互斥,避免嵌套量词对一个字符串的相同部分多次匹配,通过重复利用前瞻操作的原子特性除去不必要的回溯。
- 正则表达式不总是完成工作的最佳选择,比如当你搜索一个字符串的时候。
第六章、响应接口 Responsive Interfaces
问题: 网页应用程序响应的速度是一个重要的性能关注点。
建议:
- Javascript运行时间不能超过100毫秒,过长的运行时间可能导致UI更新出现可观察的延迟,从而对整体用户体验产生负面影响。
- Javascript运行期间,浏览器响应用户交互的行为存在差异。无论无何,Javascript长时间运行将导致用户混乱和脱节。
- 定时器可用于安排代码推迟执行,它使得你可以将长运行脚本分解成一系列较小的任务。
- 网页工人线程(worker)是新式浏览器才支持的特性,他允许你在UI进程之外运行Javascript代码和避免锁定了UI。
- 网页程序越复杂,积极主动的管理UI线程就越显得重要。没有什么Javascript代码可以重要到允许影响用户体验的程度。
第七章、Ajax --异步的Javascript 和 xml
问题: Ajax是高性能Javascript的基石。他可以通过延迟下载和异步下载,是页面加载更快。
建议:
- 作为数据格式,纯文本和HTML是高度限制的,但他们可以节省客户端CPU周期。XML被广泛应用普遍支持,但它非常冗长且解析缓慢。JSON是轻量级的,解析迅速,交互性与XML相当。字符分隔的自定义格式非常轻量,在大量数据解析时速度最快,但需要编写额外的程序在服务器端构造格式,并在客户端解析。
- 当从页面域请求数据时,XML提供最完善的控制和灵活性,尽管它将所有传入的数据视为一个字符串,这有可能降低解析速度。另一方面,动态脚本标签插入技术允许跨域请求和本地运行Javascript和Json,虽然它的接口不够安全,而且不能读取信息头或响应报文代码。多部分的XHR可以减少请求的数量,可以在单次响应中处理不同的文件类型,尽管它不能缓存到响应报文中。当发送数据时,图像灯标(使用image标签发送请求)是最简单和最有效的方法。XHR也可以用POST发送大量数据。
- 减少请求数量,可通过Javascript和CSS文件打包,或者使用XHR。
- 缩短页面的加载时间,在页面其他内容加载之后,使用Ajax获取少量重要文件。
- 确保错误代码不要直接显示给用户,并在服务器端处理错误。
- 学会何时使用一个健壮的Ajax库,何时编写自己的底层Ajax代码。
《高性能Javascript》 Summary(三)
《高性能Javascript》 Summary(二)的更多相关文章
- 高性能JavaScript笔记二(算法和流程控制、快速响应用户界面、Ajax)
循环 在javaScript中的四种循环中(for.for-in.while.do-while),只有for-in循环比其它几种明显要慢,另外三种速度区别不大 有一点需要注意的是,javascript ...
- 《高性能Javascript》 Summary(一)
第一章.加载和执行 Loading & Execution 原因:Javascript 的执行导致页面渲染中止等待. 解决: 将script放在页面底部,紧靠body 闭合标签之前,保证页面在 ...
- 《高性能javascript》 领悟随笔之-------DOM编程篇(二)
<高性能javascript> 领悟随笔之-------DOM编程篇二 序:在javaSctipt中,ECMASCRIPT规定了它的语法,BOM实现了页面与浏览器的交互,而DOM则承载着整 ...
- 《高性能Javascript》 Summary(三)
第八章.编程实践 Programming Practices 经验: 避免使用 eval_r()和Function构造器避免二次评估.此外,给setTimeout()和setInterval()函数传 ...
- 高性能JavaScript 重排与重绘
先回顾下前文高性能JavaScript DOM编程,主要提了两点优化,一是尽量减少DOM的访问,而把运算放在ECMAScript这一端,二是尽量缓存局部变量,比如length等等,最后介绍了两个新的A ...
- 【读书笔记】读《高性能JavaScript》
这本<高性能JavaScript>讲述了有关JavaScript性能优化的方方面面,主要围绕以下几个方面: 1> 加载顺序 2> 数据访问(如怎样的数据类型访问最快,怎样的作用 ...
- 高性能JavaScript(1)
---------------------------------------------------------------------------------------------------- ...
- 《高性能JavaScript》--读书笔记
第一章 加载和运行 延迟脚本 defer 该属性表明脚本在执行期间不会影响到页面的构造,脚本会先下载但被延迟到整个页面都解析完毕后再运行.只适用于外部脚本 <script src="j ...
- QrCode C#生成二维码 及JavaScript生成二维码
一 C#的二维码 示例: class Program { static void Main(string[] args) { QrEncoder qrEncoder = new QrEncode ...
随机推荐
- SCP和SFTP相同点和区别
都是使用SSH协议来传输文件的.不用说文件内容,就是登录时的用户信息都是经过SSH加密后才传输的,所以说SCP和SFTP实现了安全的文件传输. SCP和CP命令相似,SFTP和FTP的使用方法也类似. ...
- python局部变量与全局变量
name = "head first python"def what_happens_here(): print(name) 1 name = "pytho ...
- 2017.2.20 activiti实战--第二章--搭建Activiti开发环境及简单示例(二)简单示例
学习资料:<Activiti实战> 第一章 搭建Activiti开发环境及简单示例 2.5 简单流程图及其执行过程 (1)leave.bpmn 后缀名必须是bpmn.安装了activiti ...
- 2016.10.10 Failed to start component [StandardService[Catalina]]
Failed to start component [StandardService[Catalina]] 错误原因:有数据残留,点击clean(见下图) 解决办法: 右键点击servers下 ...
- Struts2 convention插件试用+ Spring+Hibernate SSH整合
第一步,引入struts2-convention-plugin-2.2.1.jar 然后,改动配置文件. 我是在struts.properties文件里改动的: struts.objectFactor ...
- Java中对象、对象引用、堆、栈、值传递以及引用传递的详解
Java中对象.对象引用.堆.栈.值传递以及引用传递的详解 1.对象和对象引用的差别: (1).对象: 万物皆对象.对象是类的实例. 在Java中new是用来在堆上创建对象用的. 一个对象能够被多个引 ...
- Android的Framework分析---5 ActivityManager分析
Android系统开发交流群:484966421 OSHome. 微信公众号:oshome2015 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font ...
- Android中的Telephony学习笔记(2)
上一篇文章中学习了android.provider中Telephony类. 这一篇文章学习android.telephony包中的类,这些类是android提供给上层调用的API. 为监測基本电话信息 ...
- 总结自己使用shell命令行经常使用到的8个小技巧
原创blog,转载请注明出处 Shell是命令解释器 [root@localhost ~]# cat /etc/shells 查看本系统共支持哪些shell 1 tab 命令补全 这个差点儿每次都能用 ...
- android:scrollbar的一些属性
1. activity_maim.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android ...