JS操作性能优化
1. 适当使用变量
Maybe
document.getElementById("myField").style.backgroundColor = "#CCC";
document.getElementById("myField").style.color = "#FF0000";
document.getElementById("myField").style.fontWeight = "bold";
Better
var myField = document.getElementById("myField");
myField.style.backgroundColor = "#CCC";
myField.style.color = "#FF0000";
myField.style.fontWeight = "bold";
每次调用document.getElementById("myField"),浏览器都要在 DOM 中搜索 ID 为 myField 的元素,效率低。
2. 元素尽量一次性应用全部样式
Maybe
var myField = document.getElementById("myField");
myField.style.backgroundColor = "#CCC";
myField.style.color = "#FF0000";
myField.style.fontWeight = "bold";
Better
var myField = document.getElementById("myField");
myField.style.cssText = "background-color: #CCC; color: #FF0000; font-weight: bold";
对 ID 为 myField 的元素,分别使用 style 应用三个不同的样式属性。将导致三次回流(reflow)和重绘(repaint),效率低,可以一次性应用全部样式,只导致一次回流和重绘。
3. for循环遍历数组
Maybe
var myArray = [1, 2, 3];
for(var i=0; i < myArray.length; i++) {
//do something
}
Better
var i = 0,
myArray = [1, 2, 3],
len = myArray.lenght; for(; i<len; i++){
//do something
}
每次循环迭代时,i<myArray.length 都要重新计算 myArray.length 数组的长度, 效率低。
4. 数组包含的元素太多
数组包含的元素太多,势必会导致循环的次数非常的多,如果操作也非常多,循环时间过长会直接导致锁死浏览器。倘若后面的循环不依赖前面的处理结果,则可以对循环进行拆解,这样不会长时间占用处理器,使浏览器有一个流畅的状态。
function handle(arr, callback){
setTimeout(function(){
callback(arr.shift());
if(arr.length){
setTimeout(arguments.callee, 0);
}
}, 0);
}
5. 函数内不相干的操作太多
函数内有很多不相干的操作,也可以进行拆解。
function handle(){
setTimeout(doSomething1, 0);
setTimeout(doSomething2, 0);
setTimeout(doSomething3, 0);
setTimeout(doSomething4, 0);
}
6. 优化递归函数
斐波那契(Fibonacci)数列是一个非常简单的递归数列,除第一个和第二个数外,任意一个数都可由前两个数相加得到。
var i = 0;
function fibonacci(n){
i++;
return n<2 ? n: fibonacci(n-1) + fibonacci(n-2);
}
console.log(fibonacci(40)); //102334155
console.log("counter: " + i); //counter: 331160281
哇,一个函数执行那么多次,其实在递归过程中,重复计算的次数非常多,比如:要得到fibonacic(40)的值,要计算fibonacic(39)、fibonacic(38)、fibonacic(37)、fibonacic(36)、fibonacic(35)、fibonacic(34).....fibonacic(1),要得到fibonacic(39)的值,又要重复计算fibonacic(38)、fibonacic(37)、fibonacic(36)、fibonacic(35)、fibonacic(34).....fibonacic(1),随着n增大,重复计算的次数增长的非常快。那我们不要重复计算值来看看:
var i = 0;
fibonacci = function (n) {
var memo = {
0: 0,
1: 1
};
var fib = function (n) {
i++;
if ('undefined' === typeof memo[n]) {
memo[n] = fib(n - 1) + fib(n - 2);
}
return memo[n];
};
return fib(n);
} console.log(fibonacci(40)); //102334155
console.log("counter: " + i); //counter: 79
这次函数只执行了79次,节省了不少性能开销吧!!!
优化的目的就是让浏览器表现的更流畅,快速的响应用户操作,但请记住不要滥用这些优化的方法!
JS操作性能优化的更多相关文章
- 应用r.js来优化你的前端
r.js是requireJS的优化(Optimizer)工具,可以实现前端文件的压缩与合并,在requireJS异步按需加载的基础上进一步提供前端优化,减小前端文件大小.减少对服务器的文件请求.要使用 ...
- js性能优化-事件委托
js性能优化-事件委托 考虑一个列表,在li的数量非常少的时候,为每一个li添加事件侦听当然不会存在太多性能方面的问题,但是当列表非常的长,长到上百上千甚至上万的时候(当然只是一个解释,实际工作中很少 ...
- js 性能优化利器:prepack
1. js 性能优化 js 本身是没有像 python 一样的预编译功能,更没有像 java 一样的编译功能,所以,这里所说的 js 代码预编译 只是通过工具实现的类似功能而已. 这就要提到 prep ...
- js 性能优化 篇一
JS性能优化 摘自:http://www.china125.com/design/js/3631.htm 首先,由于JS是一种解释型语言,执行速度要比编译型语言慢得多.(注:,Chrome是第一款内 ...
- js性能优化文章集锦
总结的js性能优化方面的小知识http://www.it165.net/pro/html/201503/35336.html 如何优化你的JS代码http://www.php100.com/html/ ...
- js DOM优化相关探索
我在这尝试两个方面:-->DOM与js -->DOM与浏览器 (最近在秒味视频上学到不少,哈哈哈) 一.DOM与js 1.js与dom的交互问题 频繁的与dom交互,是一件浪费时间与金钱的 ...
- javascript定时器,取消定时器,及js定时器优化方法
通常用的方法: 启动定时器: window.setInterval(Method,Time) Method是定时调用的js方法 Time是间隔时间,单位是毫秒 取消定时器: clearInterval ...
- 总结的js性能优化方面的小知识
前言 一直在学习javascript,也有看过<犀利开发Jquery内核详解与实践>,对这本书的评价只有两个字犀利,可能是对javascript理解的还不够透彻异或是自己太笨,更多的是自己 ...
- 我所经历的JS性能优化
转自http://www.cnblogs.com/koking/archive/2011/10/17/2215665.html 折腾了好几天,纠结了好几天,郁闷了好几天,终于在今天可以释怀了,留下其中 ...
随机推荐
- 导出C++ dll文件
方法1. 直接新建 Qt dll library, 使用工程自动创建的宏定义 方法2. (1)新建一个Empty的Win32项目(如ExampleDLL),选择Application type 为DL ...
- USACO月赛数据
终于找到了usaco月赛的数据…… 根据月赛的名称,我们可以写出数据地址.比如08年一月的月赛即是:http://contest.usaco.org/JAN08 这里要注意区分大小写.
- 【最短路】血色先锋军(scarlet) 解题报告
问题来源 BYVoid魔兽世界模拟赛 [问题描述] 巫妖王的天灾军团终于卷土重来,血色十字军组织了一支先锋军前往诺森德大陆对抗天灾军团,以及一切沾有亡灵气息的生物.孤立于联盟和部落的血色先锋军很快就遭 ...
- [置顶] [混迹IT职场系列]一、转正的那些事儿
讲起转正,是每个IT人进入职场后要面对的第一关,只有越过这第一关卡才能更加顺利玩弄职场或被职场玩弄或互相玩弄. 很多人觉得转正只需自身努力即可,譬如有句话叫做 “只要功夫深,铁针磨成棒”.其实不然,职 ...
- Theano 在windows下安装
Theano + win8 一切为了 Deep Learning 选择安装方式:AnacondaCE 学术免费 Simply download and execute the installer f ...
- sl4j记录
- Django之牛刀初试
一.Django安装 1.使用pip安装django pip3 inistall django 2.将django-admin加入到环境变量中 # 如果是windows的系统需要操作这一步,linux ...
- [HDU 2068] RPG的错排 (错排问题)
RPG的错排 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2068 题目大意: 有N个人对应N个名字,然后你去把每一个名字对应到每个人,只要求答对一半 ...
- Java中的字符串流的读取和写入(创建文件并判断重复账户)
各位我又来了!!哎!好心酸!我还没注册到三天!!没法登上博客的首页!!心累!! import java.io.BufferedOutputStream; import java.io.Buffered ...
- 设计模式21---设计模式之享元模式(Flyweight)(结构型)
1.讲解享元模式(结构型) 1.1享元模式定义 运用共享技术有效地支持大量细粒度对象. 享元:把内部状态共享出来 1.2享元模式要点 重点在于分离变与不变. 把一个对象的状态分为内部状态和外部状态,内 ...