JavaScript之 高性能读书笔记

1.当浏览器在执行javascript代码时,不能同时做其它任何事情。大多数浏览器都使用单一进程来处理用户界面更新和javascript脚本执行。
2.雅虎特别性能小组 http://developer.yahoo.com/performance/
3.<script>标签可以在<head>或<body>中。
4.推荐将所有<script>标签放在body标签的底部
5.减少页面中外链脚本文件的数量将会改善性能。
6.无阻塞的脚本:
a.延迟的脚本,defer
b.动态脚本元素
c.XMLHttpRequest脚本注入
LazyLoad类库,LAVjs,requireJS
7.函数中读写局部变量总是最快的,而读写全局变量通常是最慢的。全局变量总是存在于运行期上下文作用域链的最末端,因此它也是最远的。
8.如果某个跨作用域的值在函数中被引用一次以上,那么就把它存储到局部变量里。
9.避免使用with语句,try-catch中的catch子句也会改变作用域
10.with/catch/使用eval函数的函数,都被认为是动态作用域。
11.嵌套的对象成员会明显影响性能,尽量少用
12.属性或方法在原型链中的位置越深,访问它的速度也越慢
13.可以通过把常用的对象成员、数组元素、跨域变量保存在局部变量中来改善javascript性能,因为访问局部变量访问速度更快。
14.下述情况会发生重排:
添加或删除可见的dom元素
元素位置改变
元素尺寸改变(margin/padding,border-width,width,height等)
内容改变,如文本改变或图片被另一个不同尺寸的图片替代
页面渲染器初始化
浏览器窗口尺寸改变
15.获取布局信息会导致队列刷新,如:
offsetTop/offsetLeft/offsetWidth/offsetHeight
scrollXXX
clientXXX
getComputedStyle函数(IE中是currentStyle)
16.当要对dom元素进行一系列操作时,可以通过以下步骤来减少重绘和重排的次数:
a.使元素脱离文档流
b.对其应用多重改变
c.把元素带回文档中
17.有三种基本方法可使dom脱离文档流:
a.隐藏元素,应用修改,重新显示
b.使用文档片断在当前dom之外构建一个子树,再把它拷贝回文档
c.将原始元素拷贝到一个脱离文档的节点中,修改副本,完成后再替换原始元素
18.文档片断的一个使得的语法特性是当你附加一个片断到节点中时,实际上被添加的是该片断的子结点,而不是片断本身。如:
var fragment = document.createDocumentFragment();
appendDataToElement(fragment,data);
document.getElementById("mylist").appendChild(fragment);
19.使用事件委托减少事件处理器个数
20.动画中使用绝对定位,使用播放代理,使用如下步骤可避免动画过程中的大部分重排:
a.使用绝对位置定位页面上的动画元素,将其脱离文档流
b.让元素动起来。
c.当动画结束时恢复定位
21.在for循环初始化中的var语句会创建一个函数级的变量,而不是循环级。
22.除非明确需要迭代一个属性数量未知的对象,否则应避免使用for-in循环。除了for-in外,其它类型的性能都差不多。
23.通过倒序循环和减少属性查找,可以快50%~60%。
24.达夫设备
25.基于函数的迭代比基于循环的迭代慢8倍。
26.if-else用于判断两个离散值或几人不同的值域;当判断多于两个离散值时,switch语句是更佳选择。
27.在js中,switch语句比较值时使用全等操作,不会发生类型转换。
28.使用定时器让出ui线程
29.js可持续运行的最长时间是100ms。
30.简化版XML格式更为有利,但比那些最快的格式依然慢上一个数量级。在高性能Ajax中,XML没有立足之地。
31.字符串操作是javascript中最慢的部分。
32.通常来说数据格式越轻量级越好,JSON和字符分隔的自定义格式是最好的。如果数据集很大并且对解析时间有要求,那么就从如下两种格式中做出选择:
a.JSON-P数据,使用动态脚本注入获取。它把数据当作可执行javascript而不是字符串,解析速度极快。它能跨域使用,但涉及敏感数据时不应该使用它。
b.字符分隔的自定义格式,使用XHR或动态脚本注入获取,用split解析。这项技术解析大数据集比JSON-P略快,而且通常文件尺寸更小。
33.避免双重求值是实现javascript运行期性能最优化的关键所在。
34.使用object/array直接量
35.Gzip压缩主要适用于文本,其它类型,如图片或PDF,不用使用Gzip压缩,因为它们本身已经被压缩过。
36.把改动过的静态资源重命名可以解决缓存问题
37.ant支持scp和ftp
38.脚本之间存在间隙就说明脚本被阻塞了,使用网络分析工具找出并优化加载资源之间的间隙。
39.使用Fiddler分析网络资源加载
40.YSlow给页面中加载 的外部资源评分,提供页面性能报告,并给出提升加载速度的建议。
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值