提高用户体验,保证用户留存
前端常见 I/O 是网络 I/O
[[016.HTTP 各版本差异|HTTP 各版本差异]]
polyfill:用来为旧浏览器提供它没有原生支持的较新的功能(API)
polyfill 包,而不是全部都加载 polyfilltree shake 等cookie 的大小:每次请求的请求头中都会携带同域下所有的 cookiePromise.all:并行执行异步任务prefetch、prerender、preload,[[002.资源提示关键词|资源提示关键词]]添加 loading、骨架屏设计,而不是白屏,降低用户焦虑度
JS 执行和页面渲染都在渲染主线程一个线程中执行,JS 占用太长时间超出一帧的时间(16.667 ms),用户就会感知卡顿
解决方法:将长任务打断成多个短任务
// 下一个宏任务再继续运行
function sleep(time) {
return new Promise(resolve => setTimeout(resolve, time))
}
export function measure(target: any, name: string, descriptor: any) {
const oldValue = descriptor.value
descriptor.value = async function () {
console.time(name)
const ret = await oldValue.apply(this, arguments)
console.timeEnd(name)
return ret
}
return descriptor
}
使用 [[007.Web Worker|Web Worker]] 创建多线程运行
requestAnimationFramerequestAnimationFrame 每帧调用,保证动画流畅性
符合人体工学,区分任务优先级,优先执行用户关心度和感知度高的任务
test 正则没匹配上,但是都要过一遍,比较慢。实际上只需要匹配一个 loader,剩下的就不匹配了