点位列表 |
---|
点击tab |
进入秒送频道分包 |
定位接口开始 |
定位接口结束 |
cms接口 开始 |
cms接口 结束 |
渲染cms 开始 |
渲染cms 结束 |
渲染入口球开始 |
渲染入口球结束 |
整体耗时 |
为了解决首屏耗时较长的问题,我们经过调研,决定采用Skyline引擎来进行优化。
Skyline是微信官方提供的渲染引擎,目标是进一步优化小程序性能,提供更为接近原生的用户体验。其使用更精简高效的渲染管线,并带来诸多增强特性,让 Skyline拥有了更接近原生渲染的性能体验。
Skyline 创建了一条渲染线程来负责渲染任务,并在 AppService 中划出一个独立的上下文,来运行之前 WebView 承担的 JS 逻辑、DOM 树创建等逻辑。
style={{
backgroundPosition: `center calc(100% + ${getPx(gradientHeight)})`
}} >
style={{
backgroundPosition: `center bottom -${gradientHeight}px`
}} >
style={{
position: sticky,
top: statusBarHeight,
>
<ScrollView type="list">
<StickySection pushPinnedHeader={false}>
<StickyHeader offsetTop={statusBarHeight}>
<View className={styles.view}>
...
</View>
</StickyHeader>
</StickySection>
</ScrollView>
.loading {
border-radius: 100%;
border-top-color: transparent;
}
<ScrollView
...
onScrollToLower={handleScrolltolower}
...
/>
const handleScrolltolower = useCallback(e => {
if (loadMoreImg.current == false) {
loadMoreImg.current = true
//加载剩余图片
setDatasource)
}
}, [loadMoreImg])
除了使用懒加载的方式,我们也积极与产品和UED团队沟通,针对店带品的使用场景沟通解决方案。最终确定可以将首屏下发的楼层数从13个调整为9个,进一步降低渲染压力,提升feeds部分的渲染速度。
在实际优化实践中,往往与其他团队进行沟通,是最有效的优化方式,大家可以多借鉴一下。
图片资源尺寸过大,会导致图片下载缓慢,资源位白屏,用户体验差。以往网管在进行商品图片下发的时候,无论是店带品楼层的商品还是商品详情页展示的商品大图,采用的都是同一套尺寸较大的图片,这就导致在店带品楼层商品列表过多时,图片下载过程等待时间过长。经过与后端团队,产品和UED团队积极沟通,确定了一套3尺寸图片方案:
产品配置图片的时候,会配置大、中、小三种尺寸的图片,网关在下发时会根据资源位的类型区别下发,针对店带品楼层、feeds商品这种楼层,仅下发小尺寸图片,以减小接口请求数据量以及图片下发时间,极大地提高了图片夹杂速度。
秒送频道页涉及到两个接口请求,分别是主接口和feeds数据接口,之前因为代码结构的原因,两个接口采用了串行请求的方式做请求。这次的优化经过方案评审,将串行改为并行,并将两个接口返回的结果进行隔离,分批渲染,从而降低了整体接口请求的时长。
Taro小程序开发的性能优化实践,不仅涉及到前端代码优化,还涉及到了多个团队之间的沟通配合,好的代码习惯也不是一朝一夕就能养成的,优化也需要日积月累,不断持续地推进,希望这篇文章可以帮助到大家,助力大促期间的用户体验改进。
扫一扫,加入技术交流群