<script>标签放在</body>前面,不要放在<head>中,防止造成堵塞const el = document.querySelector('.myDiv')
el.style.borderLeft = '1px'
el.style.borderRight = '2px'
el.style.padding = '5px'可以使用如下语句代替
const el = document.querySelector('.myDiv')
el.style.cssText = 'border-left: 1px; border-right: 2px; padding: 5px;'cssText会覆盖已存在的样式,如果不想覆盖已有样式,可以这样
el.style.cssText += ';border-left: 1px; border-right: 2px; padding: 5px;':hover <ul>
<li>苹果</li>
<li>香蕉</li>
<li>凤梨</li>
</ul>
// good
document.querySelector('ul').onclick = (event) => {
let target = event.target
if (target.nodeName === 'LI') {
console.log(target.innerHTML)
}
}
// bad
document.querySelectorAll('li').forEach((e) => {
e.onclick = function() {
console.log(this.innerHTML)
}
}) 当你需要批量修改DOM时,可以通过以下步骤减少重绘和重排次数:
该过程会触发两次重排——第一步和第三步。如果你忽略这两个步骤,那么在第二步所产生的任何修改都会触发一次重排。 有三种方法可以使DOM脱离文档:
for while do-while for-in,只有for-in循环比其他其中明显要慢,因为for-in循环要搜索原型属性forEach比一般的循环要慢,如果对运行速度要求很严格,不要使用if-else switch,条件数量越大,越倾向于使用switch if-else switch,速度更快switch(value) {
case 0:
return result0
break
case 1:
return result1
break
case 2:
return result2
break
case 3:
return result3
break
}
// 可以使用查找表代替
const results = [result0, result1, result2, result3]str += 'one' + 'two'此代码运行时,会经历四个步骤:
onetwo 被赋值给该临时字符串str += 'one'
str += 'two'第二种方式比第一种方式要更快,因为它避免了临时字符串的产生
你也可以用一个语句就能达到同样的性能提升
str = str + 'one' + 'two'setTimeout和setInterval来对代码进行分割,避免对页面造成堵塞Web Workers来处理,因为Web Workers不占用浏览器UI线程的时间const obj = new Object()
const newObj = {}
const arry = new Array()
const newArry = []使用字面量会运行得更快,并且节省代码量
x =* x
// 用位运算代替
x <<= 1