您的位置:首页 > Web前端 > JavaScript

javascript性能;

2015-08-03 13:51 495 查看
ajax的性能:

在接收到响应之前还可以调用 abort()方法来取消异步请求,如下所示:xhr.abort();
调用这个方法后, XHR 对象会停止触发事件,而且也不再允许访问任何与响应有关的对象属性。在
终止请求之后,还应该对 XHR 对象进行解引用操作。由于内存原因,不建议重用 XHR 对象。

与 GET 请求相比, POST 请求消耗的资源会更多一些。从性能角度来看,以发送
相同的数据计, GET 请求的速度最多可达到 POST 请求的两倍

4. 内存与性能问题
使用本节介绍的方法替换子节点可能会导致浏览器的内存占用问题,尤其是在 IE 中,问题更加明
显。在删除带有事件处理程序或引用了其他 JavaScript 对象子树时,就有可能导致内存占用问题。假设
某个元素有一个事件处理程序(或者引用了一个 JavaScript 对象作为属性),在使用前述某个属性将该元
素从文档树中删除后,元素与事件处理程序(或 JavaScript 对象)之间的绑定关系在内存中并没有一并
删除。如果这种情况频繁出现,页面占用的内存数量就会明显增加。因此,在使用 innerHTML、
outerHTML 属性和 insertAdjacentHTML()方法时,最好先手工删除要被替换的元素的所有事件处理
程序和 JavaScript 对象属性(第 13 章将进一步讨论事件处理程序)。
不过,使用这几个属性——特别是使用 innerHTML,仍然还是可以为我们提供很多便利的。一般
来说,在插入大量新 HTML 标记时,使用 innerHTML 属性与通过多次 DOM 操作先创建节点再指定它
们之间的关系相比,效率要高得多。这是因为在设置 innerHTML 或 outerHTML 时,就会创建一个 HTML
解析器。这个解析器是在浏览器级别的代码(通常是 C++编写的)基础上运行的,因此比执行 JavaScript
快得多。不可避免地,创建和销毁 HTML 解析器也会带来性能损失,所以最好能够将设置 innerHTML
或 outerHTML 的次数控制在合理的范围内。例如,下列代码使用 innerHTML 创建了很多列表项:
for (var i=0, len=values.length; i < len; i++){
ul.innerHTML += "<li>" + values[i] + "</li>"; //要避免这种频繁操作!!
}
这种每次循环都设置一次 innerHTML 的做法效率很低。而且,每次循环还要从 innerHTML 中读
取一次信息,就意味着每次循环要访问两次 innerHTML。最好的做法是单独构建字符串,然后再一次
性地将结果字符串赋值给 innerHTML,像下面这样:
var itemsHtml = "";
for (var i=0, len=values.length; i < len; i++){
itemsHtml += "<li>" + values[i] + "</li>";

1.避免全局查找
可能优化脚本性能最重要的就是注意全局查找。使用全局变量和函数肯定要比局部的开销更大,因
为要涉及作用域链上的查找。2. 避免 with 语句

2
避免不必要的属性查找

4. 避免双重解释

原生方法较快——只要有可能,使用原生方法而不是自己用 JavaScript 重写一个。原生方法是用
诸如 C/C++之类的编译型语言写出来的,所以要比 JavaScript 的快很多很多。 JavaScript 中最容
易被忘记的就是可以在 Math 对象中找到的复杂的数学运算;这些方法要比任何用 JavaScript 写
的同样方法如正弦、余弦快的多。

Switch 语句较快 —— 如果有一系列复杂的 if-else 语句,可以转换成单个 switch 语句则可
以得到更快的代码。还可以通过将 case 语句按照最可能的到最不可能的顺序进行组织,来进一
步优化 switch 语句。

位运算符较快 —— 当进行数学运算的时候,位运算操作要比任何布尔运算或者算数运算快。选
择性地用位运算替换算数运算可以极大提升复杂计算的性能。诸如取模,逻辑与和逻辑或都可
以考虑用位运算来替换

JavaScript 代码中的语句数量也影响所执行的操作的速度。完成多个操作的单个语句要比完成单个
操作的多个语句快。所以,就要找出可以组合在一起的语句,以减少脚本整体的执行时间。这里有几个
可以参考的模式。

2. 插入迭代值
当使用迭代值(也就是在不同的位置进行增加或减少的值)的时候,尽可能合并语句。请看以下
代码:
var name = values[i];
i++;
前面这 2 句语句各只有一个目的:第一个从 values 数组中获取值,然后存储在 name 中;第二个
给变量 i 增加 1。这两句可以通过迭代值插入第一个语句组合成一个语句,如下所示:
var name = values[i++];

只要有可能,尽量使用数组和对象的字面量表达方式来消除不必要的语句。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: