关于大前端:互动游戏团队如何将性能体验优化做到TOP级别
一、背景随着互动游戏业务 DAU 量级减少,性能和体验重要性也越发重要,好的性能和体验不仅能够减少用户应用体感,也能够减少用户对于互动游戏的应用粘性。 对现状剖析,次要存在首屏渲染速度慢、关上页面存在白屏、页面加载过多资源等问题,外围伎俩是减少骨架、接口优先级调整、预渲染、减小包体积等。 优化后,互动游戏签到性能做到同类业务性能体验 Top 级别,上面是优化后数据: 首屏渲染速度:优化后晋升首屏渲染速度 39%。首屏骨架:骨架体积大小缩小 44%(压缩后缩小 50%)。首次加载总资源:资源总体积优化后,大小缩小 69%。二、骨架骨架屏是指在页面加载时,长期显示出页面的次要构造,能够让用户在期待页面加载实现时,失去视觉上的反馈,晋升页面的用户体验。骨架示意图vs数据渲染 能够看出在接口返回数据之前,能够先应用骨架失去一些界面反馈。 三、缓存尽管骨架屏能够让用户在视觉上失去反馈,毕竟不是实在的数据,总体还是有一些简陋,用户也可能并不知道这块区域理论渲染的是什么样的内容,若是网络环境不好,很可能会长工夫的停留在骨架屏阶段,为了加强一些体感,应用缓存进一步对页面进行优化。应用缓存渲染具备以下劣势: 与骨架屏相比,缓存渲染非常靠近用户最终所见,因为每次接口返回数据都会更新缓存,用户再次进入时看到的都是本人上次进入时的数据。当用户处在弱网或者断网等不可抗力的环境中时,能够失去较为残缺的页面数据展现,能够很好削弱用户环境带来的网络营销。应用缓存注意事项: 一些缓存渲染应屏蔽事件响应,防止造成不必要的报错和客诉。比方商品的缓存渲染,因为商品存在下架、优惠券调整等状况,缓存的数据和理论数据会存在肯定的偏差。缓存渲染逻辑须要更加前置,不应该将缓存渲染的逻辑放在本来的地位,这样会拖慢渲染的机会。四、接口后置浏览器对同一时间内的申请数量是有限度的,既并发申请限度。当一个页面首次渲染时须要浏览器发动很多接口申请,用于填充页面渲染须要的数据,若是对于页面渲染时的申请数量不加以控制,便可能导致一些问题呈现。 当初有 home 和 info 两个接口,home 接口返回的数据是首屏渲染须要依赖的,info 接口返回的数据则不是首屏必须依赖的。假如当初还有一些其余申请占据了并发申请限度的数量,导致 home 接口申请变慢。若是 info 接口响应慢,长时间占据这浏览器的申请过程,会导致页面首屏渲染速度更慢,那么就须要有个一套计划能够依据接口的优先级进行加载顺序控制,能够将程序变为如下。计划: 当页面加载实现后肯定工夫后,进行低优先级接口的申请,或者触发页面的滚动、点击等时立刻进行接口申请。 此计划实用于:确定接口提早加载并不会阻塞用户的交互和操作。 将其封装为一个 hooks,便于复用,间接先看代码再解释: import { useRM, createRM } from 'xxx'const listen = (type: string, listener: () => void) => { const l = () => { listener() document.removeEventListener(type, l) } document.addEventListener(type, l)}const pageFlowModule = createRM( { assemble(state) { const reactionObserver = () => { state.isUserReactioned = true } ;['scroll', 'mousedown', 'touchstart'].forEach((type) => { listen(type, reactionObserver) }) setTimeout(reactionObserver, 4000) }, }, { isUserReactioned: false },)pageFlowModule.actions.assemble()export const usePageFlow = () => { const [state] = useRM(pageFlowModule) return state}应用: ...