选择”开发者技术前线 “星标🔝,内容一触即达。点击原文更多惊喜! 开发者技术前线 汇集技术前线快讯和关注行业趋势,大厂干货,是开发者经历和成长的优秀指南。
滴滴业务中台构建实践
腾讯 Flutter 跨平台 Web 实践
10 款 Web 开发最佳的 Python 框架
点击上方“开发者技术前线”,选择“星标”
13:21 在看 真爱
通过用户反馈、QA测试等多种渠道,发现落地页首屏加载慢问题
定义首屏性能指标(首屏含图,以图片加载为准;首屏无图,以文字渲染结束为准)
NA、内核、H5三方针对自己加载H5的流程进行划分并埋点上报
统计侧根据三端上报的数据产出平均值、80分位值的性能报表
分析性能报表,找到不合理的耗时点,并进行优化
以AB实验方式,对比优化前后的性能报表数据,产出优化效果,同时评估用户体验等相关指标
按照长期优化的方式,不断分析定位性能瓶颈点并优化,以AB实验方式评估效果,最终达到我们的落地页秒开目标
渲染为什么这么慢
图片请求能否提前
串行逻辑是否可以改为并行
WebView初始化时间是否还可以优化
百度APP直出方案:
手百预取服务架构图
Special version of ContextWrapper that allows the base context to be modified after it is initially set. Change the base context for this ContextWrapper. All calls will then be delegated to the base context. Unlike ContextWrapper, the base context can be changed even after one is already set.
简单来说,就是一种新的context包装类,允许外部修改它的baseContext,并且所有ContextWrapper调用的方法都会代理到baseContext来执行
具体到Feed落地页场景,由于我们的落地页包含两部分,WebView+NA评论组件,正常流程会在WebView初始化结束后,开始评论组件的初始化及评论数据的获取。由于此时评论的初始化仍处在onCreate的UI消息处理中,会严重延迟内核加载主文档的逻辑。考虑到用户进入落地页的时候,评论组件对用户来说并不可见,所以将评论组件的初始化延迟到页面的pageFinish时机或者firstScreenPaintFinished;80分位性能提升60ms~100ms
压缩预取的包大小,减少下行流量
少预取或者不预取
提前做:包括预创建WebView和预取数据
并行做:包括图片直出&拦截加载,框架初始化阶段开启异步线程准备数据等
轻量化:对于前端来说,要尽量减少页面大小,删减不必要的JS和CSS,不仅可以缩短网络请求时间,还能提升内核解析时间
简单化:对于简单的信息展示页面,对内容动态性要求不高的场景,可以考虑使用直出替代hybrid,展示内容直接可渲染,无需JS异步加载
页面的更新机制,目前方案仅适用于偏静态页面,对于动态性要求较高的业务,需要提供页面更新机制,保证每次显示的正确性。
开源之路:后续计划将我们总结下来的这套方案打包开源,前行之路必定坎坷,希望大家多多支持。
选择”开发者技术前线 “星标🔝,内容一触即达。点击原文更多惊喜! 开发者技术前线 汇集技术前线快讯和关注行业趋势,大厂干货,是开发者经历和成长的优秀指南。