
WebView KPI - 需要衡量什么
使用原生SplashScreen API。
应用启动性能会影响用户体验。当启动应用时,用户希望几乎立即在屏幕上看到一些东西。达成该目的所需的时间就是TTFF(第一帧时间)。适用于Vega的React Native具有原生SplashScreen功能,可以使用图像资产显示特定于应用的启动画面。当应用启动时,用户可以立即看到该画面。然后,应用可以专注处理内容加载和网络调用,而无需浪费时间来渲染基于JavaScript的启动画面。可以在启动画面中使用一系列动图中加入动画效果。
衡量这一关键性能指标 (KPI) 时,采用从启动manifest.toml文件中的主组件到渲染第一帧所需的时间。

WebView启动画面
SplashScreenManager,您可以构建静态或动画图形,让其在启动画面中显示,直到进入应用的下一个屏幕为止。SplashScreen会在应用打包期间捆绑资产,供设备用于应用启动。SplashScreen能在应用启动时降低启动过程的复杂性,因此启动画面会一直显示,直到应用准备好显示第一帧画面时为止。
实现TTFD(完全绘制时间)标记
Vega应用应在应用生命周期的各个阶段满足特定的性能标记要求。一个标记是TTFD(见上图)。应用成功加载并准备好进行用户交互后,优化应用以使其符合TTFD标记要求。在应用进程启动之前,冷启动必须满足同一标记的要求;当应用进程已在运行时,热启动也必须如此。网页应用内容完全加载后,网页应用应在onLoad回调中实现此标记。
启动并加载网页应用后,调用useReportFullyDrawn() 方法。包装器有一个onLoad事件,该事件会在应用启动并准备就绪时触发。另外,在reportFullyDrawn() 方法于热启动期间从后台移动到前台时调用该方法。
此示例代码调用useReportFullyDrawn() 来处理冷启动 (onLoad) 和warmStart (keplerAppState)。
优化网络请求
要提升网页应用启动性能,必须优化网络请求。通过尽可能合并CSS和JavaScript文件,使用图像sprite并减少外部第三方依赖项的数量,从而大幅减少HTTP请求,可以提升启动性能。使用Gzip或Brotli启用资产压缩,可显著减小HTML、CSS和JavaScript等基于文本的资源的有效负载大小。需要注意,图像文件往往已经压缩,因此它们无法通过此操作受益。缩短服务器响应时间
优化服务器响应时间对于提供响应迅速的用户体验至关重要。最有效的策略之一是使用内容分发网络 (CDN)。CDN能够从地理位置离用户更近的边缘位置提供静态资产(如图像、JavaScript和CSS文件),从而减少延迟。通过优化后端处理(例如改进数据库查询、减少中间件开销和优化服务器逻辑)来缩短第一字节时间 (TTFB) 可以大幅提高性能。 API效率也会产生影响。尽量减少API调用的数量,在适当时将其合并,并避免冗余请求,这样可以减少网络开销。为了加快内容交付速度,可考虑使用服务器端渲染 (SSR) 或静态站点生成 (SSG)。这些网页技术可在服务器上预先渲染HTML,从而加快页面加载速度并改进首次内容绘制 (FCP)。FCP是浏览器渲染第一段内容所需的时间。还可以使用延迟加载技术来延迟加载非关键数据或次要数据,从而优先处理最重要的内容。优化渲染和JavaScript执行
优化渲染和JavaScript执行,以实现响应迅速的网页应用。一种关键做法是避免在页面加载期间使用繁重计算或不必要的逻辑而阻塞主JavaScript线程。如果主线程被阻塞,可能会导致渲染延迟和丢帧,从而对用户体验产生负面影响。 为了避免阻塞主线程,请让JavaScript保持轻量化,并在初始加载期间仅执行基本代码。此外,仅执行用于处理输入事件的必要代码。输入处理程序可能会导致应用流畅度方面的性能问题,因为它们会阻碍帧完成,并导致不必要的额外布局工作。对处理程序进行去抖动,这意味着存储事件值并在下一次requestAnimationFrame回调中处理样式变化。
使用async或defer属性异步加载不必立即执行的脚本,以防它们阻碍页面渲染,从而减轻阻碍渲染的JavaScript产生的影响。
transform和will-change)启用加速,以提高动画流畅度并提升视觉性能。通过CSS进行GPU加速有助于将渲染工作转移到GPU上。这些策略可增强网页应用的感知性能和实际性能。
工作线程是另一种优化JavaScript的方法,让它能够在后台运行。有关更多信息,请参阅网页应用的工作线程最佳实践。
缓存资源
缓存可增强网页应用的性能和响应能力。客户端缓存涉及为JavaScript文件、CSS、数据和图像等资源设置适当的Cache-Control标头。缓存可以存储并重复使用网页应用资产,而不是重复下载它们。利用CDN缓存还可以从离用户较近的边缘位置提供静态内容,从而大幅缩短加载时间。通过结合客户端和CDN缓存,开发者可以减轻服务器负担、减少延迟,并为最终用户提供更流畅的体验。
使用设备硬件解码器
现代Vega设备带有用于媒体播放的专用硬件解码器。利用硬件解码代替软件解码(基于CPU),可以显著减轻CPU负担、降低内存使用量并提高视频播放流畅度,从而提升应用性能。 为何重要 软件解码的计算成本很高,可能导致视频播放期间丢帧、CPU争用增加(会让其他应用运行速度变慢)、热量输出增加(可能会触发设备节流),以及加载媒体密集型内容时第一帧时间 (TTFF) 表现变差。硬件解码器可将这项工作转移到专用的芯片上,从而腾出CPU来处理用户界面渲染和应用逻辑。 Recommended practices 务必使用带有硬件支持编解码器的元素。Vega设备支持对常见受支持编解码器(例如H.264 (AVC)、H.265 (HEVC)、VP8和VP9(因设备而异))进行硬件加速解码。首选这些格式,而不是纯软件格式。以设备硬件解码器原生支持的格式提供媒体,以避免在运行时回退到软件解码。硬件解码器资源有限,因此不要同时创建多个元素。尽可能在应用中重复使用视频元素。使用媒体源扩展 (MSE) API 进行自适应流媒体播放时,请确保传递给MediaSource.addSourceBuffer()的分段格式和编解码器字符串与硬件支持编解码器相匹配。在初始化播放之前,使用MediaSource.isTypeSupported()来验证支持。使用HTMLVideoElement.canPlayType()来检测硬件解码器的可用性,并在需要时优雅回退。
避免将高计算量CSS动画与视频播放混合,因为两者都会争用GPU资源。首选硬件加速的CSS transform,以便在不影响播放性能的情况下保持动画流畅度。
提升滚动性能
要提高应用的滚动性能,需要考虑几个方面。首先,避免在滚动事件处理程序中频繁访问或更改布局属性,例如offsetTop和scrollHeight。进行这些更改会影响性能,因为每次都会重新计算布局。您还可以使用限制或防抖机制来限制滚动事件处理的频率。最好避免在滚动侦听器内同步读取或写入布局,以防发生强制重排。
仅渲染可见或必要的元素,而不是页面上的所有内容或整个可滚动列表。还有一个不错的办法,是使用诸如transform之类GPU加速的CSS属性来实现平滑滚动,而不使用top、left或width之类大量占用CPU的属性。
Chrome DevTools中的Rendering(渲染)选项卡提供视觉提示,可突出显示滚动时绘制缓慢或冗余的图层。使用此工具来识别性能瓶颈并优化您的滚动行为。

