来源:得物技术
目录
一、前言
二、系统简介
三、性能现状
1. 性能看板分析
2. 渲染流程分析
四、方案拆解
五、具体动作
1. 首屏资源优化
2. 渲染优先级优化
六、效果回收
1. 主要性能指标
七、总结展望
一
前言
二
系统简介
三
性能现状

性能看板分析
相关阅读:https://juejin.cn/post/6844904074551230471



渲染流程分析

四
方案拆解

五
具体动作
首屏资源优化
// 我们采用 Cache aside 旁路缓存策略async function cacheRequest(params: any) {const startTime = Date.now()const key = params.keyconst cache: any = JSON.parse(localStorage.getItem(key) || '{}')// 当天有缓存const canCache = cache.cacheTime && moment(cache.cacheTime).isSame(moment(startTime), 'day')window.sendTrack?.({event: 'main_request_cache',tags: {eventTitle: '主应用数据缓存',eventType: canCache ? 1 : 0,},})const requestCache = async () => {const data = await request(params)localStorage.setItem(key, JSON.stringify({data,cacheTime: Date.now()}))return data}// 优先从缓存中读取数据 后续再更新缓存 保证数据的一致性if (canCache) {setTimeout(requestCache, DELAY_CACHE_TIME * 1000)return cache.data} else {const data = await requestCache()return data}}
渲染优先级优化
相关阅读:当不希望因为不重要的任务导致用户感觉到卡顿的话,就应该考虑使用requestIdleCallback:https://juejin.cn/post/6844903592831238157
// 采用 requestIdleCallback 方式利用 CPU 空闲时间渐进地加载内容try { requestIdleCallback((deadline) => { // 当前帧有剩余时间 可以执行任务 while (deadline.timeRemaining() > 0 && || deadline.didTimeout) { // 加载剩余部分菜单项 } }) } catch (e) { // 低版本浏览器兜底处理 setTimeout(() => { // 加载剩余部分菜单项 }, DELAY_LOAD_TIME) }}
六
效果回收
主要性能指标
秒开率(首次打开页面<1秒占比,以 FMP 为准):🔝15%+
页面首次进入FMP90分位均值(秒):🔝35%+
页面TTI%(可交互时长<1.5s占比) :🔝30%+
TTI 90分位均值(秒):🔝50%+


七
总结展望
往期回顾
1. 得物 Zookeeper SLA 也可以 99.99% | 得物技术
2. 基于Java代码模型生成质量平台自动化用例方案与实践 | 得物技术
3. 得物技术海量职位“职”等你来!速投!
4. “不知今夕是何年”的周基年解法 | 得物技术
5. 得物千人规模敏捷迭代实践分享
文 / Johnny
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70027824/viewspace-3012318/ ,如需转载,请注明出处,否则将追究法律责任。