优化函数html代码,前端性能优化-代码优化

JS开销和如何缩短解析时间

代码解决方案

Code splitting代码拆分,按需加载

Tree shaking代码减重

减少主线程工作量

避免长任务

避免超过1KB的行间脚本

使用rAF(requestAnimationFrame)和rIC(requestIdleCallback)进行时间调度

逐步引导(progressive bootstrapping)

可见不可交互vs最小可交互资源集

配合V8有效优化代码

抽象语法树

源码 => 抽象语法树 => 字节码Bytecode => 机器码

编译过程会进行优化

运行时可能发生反优化

V8优化机制

脚本流

字节码缓存

懒解析

函数优化

lazy parsing懒解析vs eager parsing饥饿解析 – (function Fn() {})

利用Optimize.js优化初次加载时间

对象优化

以相同顺序初始化对象成员,避免隐藏类型的调整

class RectArea { // HC0

constructor(l, w) {

this.l = l // HC1

this.w = w // HC2

}

}

const rect1 = new RectArea(3, 4)

const rect2 = new RectArea(5, 6)

// 隐藏类型无法复用

const car1 = {color: 'red'} // HC0

car1.seats = 4 // HC1

const car2 = {seats: 2} // HC2

car1.color = 'blue' // HC3

实例化后避免添加新属性

const car1 = {color: 'red'} // In-object属性

car1.seats = 4 // Normal/Fast属性,存储property store里,需要通过描述数组间接查找

尽量使用Array代替array-like对象

Array.prototype.forEach.call(arrObj, (value, index) => { // 不如在真实数组上效率高

console.log(`${index}:${value}`)

})

const arr = Array.prototype.slice.call(arrObj, 0) // 转换的代价比影响优化小

arr.forEach((value, index) => {

console.log(`${index}:${value}`)

})

避免读取超过数组的长度

function foo(array) {

for(let i = 0; i <= array.length; i++) { // 越界比较

if(array[i] > 1000){ // 1、造成undefined跟数字比较 2、沿原型链的查找

console.log(array[i]) // 业务上无效

}

}

}

避免元素类型转换

const array = [3, 2, 1] // PACKED_SMI_ELEMENTS

array.push(4.4) // PACKED_DOUBLE_ELEMENTS

HTML优化

减少iframes使用

压缩空白符

避免节点深层级嵌套

避免table布局

删除注释

CSS&JavaScript尽量外链

删除元素默认属性

借助工具

html-minifier

CSS优化

降低CSS对渲染的阻塞

利用GPU进行完成动画

使用contain属性

使用font-display属性

原创文章,作者:犀牛前端部落,如若转载,请注明出处:https://www.pipipi.net/4329.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值