javascript规范
通用约定
命名
变量、函数名使用 Camel 命名法(首字母小写、后面首字母大写)
少使用全局变量
代码块使用!function(){}()包裹,不污染全局
每个页面基本模块js
//初始化
!function(){
var app = {
init:function(){
this.fetchData();
this.bindEvent();
},
bindEvent:function(){
},
fetchData:function(){
this.renderData();
},
renderData:function(){
}
}
app.init();
}();
高效使用
推荐使用三元运算符、||、&& 可以可参考:传送门
js优化
节流函数和防抖
使用节流函数优化滚动事件 使用防抖优化多次点击问题
解绑事件
一旦元素不需要再次执行事件,或者隐藏过渡掉可以解绑事件removeEventListener或者使用off,提高性能
function handler(e){
//操作
console.log(e)
}
ele.addEventListener('click', handler);//绑定
ele.removeEventListener('click', handler);//解绑
事件委托
document.querySelector('.xxx').onclick = function(ev){
var ev = ev || window.event;
var target = ev.target || ev.srcElement;
if(target.nodeName.toLocaleLowerCase() == 'xx'){
var index = Array.prototype.indexOf.call(xx,target)//获取索引
}
}
jQuery(zepto)优化
保存jQuery 变量
存放 jQuery 对象的变量以 $ 开头
将 jQuery 选择器返回的对象缓存到本地变量中复用
使用id寻找dom
尽可能的使用 ID 选择器,因为它会调用浏览器原生方法 document.getElementById 查找元素,比class快
dom操作
$('#xx').find('li') 速度优先于 $('#xx li') 尽可能不使用find直接绑定元素上
链式写法
$("#myDiv").addClass("error").show();
减少浏览器的回流和重绘
改变元素的样式直接用class替换 除了改变颜色之类会重绘,布局之类会影响回流,回流一定会重绘
优化方案:
- 通过class增加引发一次重绘
- 使用translate 替代top
- 不要使用 table 布局
- 将频繁运行的动画变为图层,图层能够阻止该节点回流影响别的元素。 一下可以生成一个图层 3D 变换:translate3d、translateZ will-change video、iframe 标签 通过动画实现的 opacity 动画转换 position: fixed