H5加载性能优化

43 阅读2分钟

一、加载性能指标与核心目标

截屏2025-12-30 16.53.07.png

  • 1、首次内容绘制(FCP):首次呈现DOM内容的时间
  • 2、最大内容绘制(LCP) :最大可视元素渲染完成时间
  • 3、首次输入延迟(FID):用户首次交互到浏览器响应的延迟
  • 4、累计布局偏移(CLS):视觉稳定性指标

二、页面加载缓慢的原因

1、网络请求

资源文件如(图片、JS、CSS)过大、过多;服务器响应慢或距离用户远;未充分利用缓存。

2、渲染性能

CSS或JS文件阻塞渲染;DOM结构复杂、操作频繁;大量或未优化的图片/动画。

3、容器初始化

WebView首次创建开销大,页面加载流程串行。

4、前端代码与资源

首屏JS执行/数据依赖过重;资源未压缩。

可以根据以下表格判断加载慢的瓶颈点

页面表现优先检查
首次打开特别慢,二次打开快网络请求、webview加载
一直很慢,图片加载尤其久图片等资源体积与加载策略
内容逐渐显示,但白屏时间长JS/CSS阻塞 & 首屏数据依赖

三、优化方向

1、网络层优化策略

  • 预连接关键资源域名
<link rel="preconnect" href="***" crossorigin />
<link rel="dns-prefetch" href="***" />
  • CDN预热
  • 加载离线包

2、图片加载优化

  • 图片添加 loading="lazy" 属性,实现懒加载
<img src="https://img.com" loading="lazy" alt="展开" />
  • 图片压缩(TinyPNG、Squoosh)

3、组件懒加载

  • 使用Suspense 懒加载非首屏元素
<Suspense fallback={null}>
    <RedPacketModal
        ***
    />
</Suspense>
  • 将弹窗动态导入实现代码分割
const InviteModal = React.lazy(() => import('./invite-modal/inviteModal'));
  • 图片懒加载
import LazyLoad from 'react-lazyload';
<LazyLoad height={200} offset={100}>
  <img src="image.jpg" />
</LazyLoad>

4、使用浏览器的API

使用 requestAnimationFrame 延迟执行,避免阻塞渲染

useEffect(() => {
     requestAnimationFrame(() => {
        // 上报埋点
    });
}, [])

首屏渲染的时候,用requestIdleCallback延迟执行非关键操作

// 非关键操作
const initNonCritical = () => {
 **
}
 if ('requestIdleCallback' in window) {
    requestIdleCallback(initNonCritical, { timeout: 1000 });
} else {
    setTimeout(initNonCritical, 100);
}

三、结束语

H5性能优化是一个系统工程,需要从网络传输、资源加载、渲染机制到缓存策略等多个维度综合考虑。未来可以考虑用AI优化加载。