1.多使用事件委托
指定给元素的事件处理程序,相当于浏览器运行的程序和网页js代码的连接,这种连接越多,页面执行的速度也就会越慢,因此,使用事件委托减少了这种性能影响,同时也方便事件的卸载
2.避免使用二次评估
类似于 eval("num1+num2") ; var fun1 = new Function("arg1","arg2","return arg1 + arg2"); setTimeout("fun('arg')",500);
二次评估是一项非常昂贵的操作,因此,谨慎使用
3.使用对象和数组直接量创建对象和数组
有些人喜欢这样创建对象: var obj1 = new Object(); obj1.name="name1";
很明显我们可以使用直接量创建方法 var obj1 = {name:"name1"}
虽然性能上没有差别,但是有一个代码简洁编程的好习惯不是更好
4.使用惰性函数,避免多次评估(最常见的是浏览器兼容性调整)
看下面这段代码:
function addHandler(target, eventType, handler){
if (target.addEventListener){ //DOM2 Events
addHandler = function(target, eventType, handler){
target.addEventListener(eventType, handler, false);
};
} else { //IE
addHandler = function(target, eventType, handler){
target.attachEvent("on" + eventType, handler);
};
}
//call the new function
addHandler(target, eventType, handler);
}
这样兼容性调整的代码只运行了一遍,以后每次的调用都不用在进行评估,是不是提高了不必要的检验
5.条件判断语句根据可能性从高到低进行排序,减少否定的判断次数
我们写的流程控制语句,很多的可能性都是有侧重的,那么我们按可能性大小的顺序,将代码进行排序,就减少了那些不必要的非操作,岂不是明智之举
6.多多利用计算速度快的位运算
很多人都特别疑惑,js中提供的位运算到底有什么大的作用,我们的开发好像从来就没有用到过,其实位运算是最底层的运算,也是最快的运算,我们抛弃位运算不用实则是一项巨大的损失呀。举个例子:我们经常进行的奇偶判断:
while(k--){
if(k % 2 == 1){
//奇数
}else{
//偶数
}
}
其实我们可以改为:
while(k--){
if(k & 1){
//奇数
}else{
//偶数
}
}
7.使网页动画脱离文档流
网页渲染是一个很复杂的工作,虽然我们感受不到,但是由于页面动画持续修改页面标签的大小或者坐标,会给浏览器增加很大的负担,但是我们可以选择将动画元素脱离文档流的方式,例如给其使用
position:relative,或者position:fixed,这样,元素的各种改变就不会影响到页面元素了,何乐而不为呢。
8.多多使用原生方法
举一个很简单的例子,我们要求一个数的绝对值,有些人就写了一个判断语句:
if(num < 0){num *= -1};
虽然代码不是很麻烦,但是我们有原生的 Math.abs(num) 方法,而且,原生方法要比我们自己写的方法快好多的,这一点我相信大家只要对js基础够了解都不会犯错的
9.缓存需要使用的初级作用域以外的变量
了解作用域链的人应该都知道,代码访问变量的顺序,变量越靠外,访问的速度也就越慢,所以,当我们需要访问的变量不在初级作用域中而且访问次数大于1次时,我们可以选择缓存该变量到初级作用域
10.多使用数组来代替集合
我们看这样一段代码:
var coll = document.getElementsByTagName('span');
function toarray(coll){
var a = [];
for(var i=0,j = coll.length;i<j;i++){
a.push(coll[i]);
}
return a;
}
var arr = toarray(coll);
//循环1
for(var i=0,j = coll.length;i<j;i++){
coll[i].style.height="0px";
}
//循环2
for(var i=0,j = arr.length;i<j;i++){
arr[i].style.color="#F00";
}
这里面的循环1要比循环2慢一倍,coll是一个对象集合,而数组的访问速度是高于对象集合的,对象集合不是数组,它只不过有length属性和按序号取元素的方法,但不具有数组的push,shift等方法。
10.for循环的优化
先看一段代码:
var N1 = 1000000;
//循环1
for(var i = 0; i< N1 ;i++){
var l = i;
}
//循环2
var i=0;
for(; i< N1 ;i++){
var l = i;
}
经过试验得知,循环而的执行速度比循环1高5倍左右,有图为证:
11.迭代次数超过1000次,最好使用 达夫设备,减少迭代次数,提高效率
实现代码:
function duff(items,process){
var i = j = items.length % 8,//取余数
multiple= Math.floor(items.length / 8);//向下取整获取8的倍数
while(j){
process(items[--j]);
}
while(multiple--){ //有效的减少了循环判断的次数
process(items[i++]);
process(items[i++]);
process(items[i++]);
process(items[i++]);
process(items[i++]);
process(items[i++]);
process(items[i++]);
process(items[i++]);
}
}
12.if else 二分法,减少抵达正确分支的判断次数
这里给个图吧,应该能说明问题:
欢迎批评指正。
相关推荐
### 前端开发学习建议 #### 一、学习路径规划 前端开发是现代网站建设和应用开发中的一个重要组成部分。为了成为一名合格的前端开发者,合理的学习路径尤为重要。 1. **HTML与CSS基础**:HTML(HyperText Markup ...
总的来说,这个"code-roadmap-main"资源包为你提供了一个完整的学习蓝图,涵盖了从入门到精通Java和前端的关键步骤,以及求职所需的资源和建议。遵循这个路线,结合实践,相信你将在编程世界中游刃有余,实现自己的...
1. **网页设计的指导与建议**:在设计阶段,前端工程师需要与设计师紧密合作,提供有关页面布局、元素位置等方面的建议。例如,他们可以帮助避免使用过多的阴影、透明效果或圆角等难以通过代码实现的设计元素。 2. *...
【前端优化合集】主要涉及前端JavaScript的使用规范和Vue.js开发中的技巧,旨在提高代码质量和性能。以下是一些关键知识点: 1. **全局命名空间污染与IIFE**:为防止全局变量冲突,应始终使用IIFE(立即调用的函数...
【WEB前端研发工程师编程能力成长之路】 在WEB前端研发领域,无论是初学者还是经验丰富的开发者,都需要不断提升自己的技能。此文档旨在为不同阶段的前端工程师提供一条清晰的成长路径,帮助他们找到提高之路。 ...
文件提到了腾讯2018年度前端开发大会的课件内容,并且建议如何成为一个大型互联网公司所需的前端人才。 首先,文件信息提到在大型互联网公司工作能够带来的好处,其中三点被强调:丰富的学习资源、活跃的技术交流...
同时,也会有针对前端项目经验、设计模式、前端性能优化、跨域解决方案、前端安全等问题的模拟问答,帮助面试者熟悉面试流程和常见问题。 文档部分则可能是详细的理论知识整理,包括但不限于前端开发标准、最佳实践...
性能优化是前端开发不可忽视的一环。规范中可能包括减少HTTP请求、压缩资源、合理利用缓存、优化图片加载、避免阻塞DOM渲染等策略,以提升用户体验。 最后,团队协作和版本控制也是规范的一部分。使用Git进行版本...
这意味着无论你是专注于Web前端还是探索后端编程,都能在这个编辑器中进行。此外,它还支持自定义语法高亮,使代码更加清晰易读,这对于理解不同语言的结构非常有帮助。 其次,EditPlus拥有强大的文本处理功能。它...
4. **前端工程化与性能优化** - 模块化开发思想。 - Webpack打包工具使用技巧。 - 代码压缩与资源加载优化策略。 - 缓存机制及CDN加速原理。 5. **CSS与MV*框架解析** - CSS3新特性及布局技巧。 - 响应式设计...
完成这门课程后,学员应能独立设计和开发复杂的前端应用,具备良好的代码组织能力和项目管理能力,能够应对前端面试,并为团队提供前端架构方面的专业建议。同时,对于前端新技术和趋势保持敏锐的洞察力,以便在...
面试官可能要求你分析一个网页的加载流程,并提出优化建议。 五、前端工程化与构建工具 掌握Webpack、Gulp、Grunt等构建工具的使用,理解模块化(CommonJS、ES modules)、自动化测试(Jest、Mocha)和代码质量检查...
- 技术选型与开发实践:提供了在前端项目中进行技术选型的指导,以及一些开发实践的建议。 5. 前端工程化的其他方面: - 协作流程与接口设计:讨论了前后端分离的协作流程以及如何设计良好的API接口。 - 版本...
同时,培养良好的代码组织习惯,学习前端架构设计原则,如模块化和面向对象编程。此外,跨领域的知识,如用户体验设计和后端开发,也是提升个人竞争力的关键。 总之,前端开发的未来充满无限可能。作为从业者,我们...
JS、Vue、React、性能优化、前端工程化、...最后祝所有的小伙伴都能找到心仪的工作,卡皮巴拉是你的前端编程学习伙伴、助手。喜欢的朋友麻烦点赞支持,这是最大的动力,更多资源分享,请关注卡皮巴拉账号,感谢关注。
CSS 规范中,命名建议使用 BEM(Block Element Modifier)方法,确保模块化和可维护性。选择器应该简洁,避免使用过于复杂的选择器链,以提升性能。尽量使用缩写属性,如 `margin: 0 auto;` 替换 `margin-left: 0; ...
前端资源优化主要包括图片资源的优化和代码资源的压缩打包。Sprite拼合图技术可以合并多张小图片,减少HTTP请求的数量,从而提高加载速度。代码压缩打包工具如webpack可以帮助开发者压缩和打包JavaScript、CSS等静态...