本示例使用预渲染实现了Web页面的瞬开效果。
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 2 年前 | ||
| 1 年前 | ||
| 2 年前 | ||
| 1 年前 | ||
| 2 年前 | ||
| 28 天前 | ||
| 28 天前 | ||
| 1 年前 | ||
| 2 年前 | ||
| 1 年前 |
基于预渲染技术实现Web页面瞬开效果
介绍
本示例基于预渲染技术,实现了点击后Web页面瞬间打开的效果,无需额外加载过程,减少用户等待时长,提高了用户体验。
效果预览
| web |
|---|
![]() |
使用说明:
- 点击标签打开弹窗,加载Web网页。
工程目录
├──entry/src/main/ets/
│ ├──common
│ │ └──Constants.ets // 公共常量类
│ ├──entryability
│ │ └──EntryAbility.ets // 程序入口类
│ └──pages
│ ├──Index.ets // 首页
│ └──WebPage.ets // Web预渲染页面
└──entry/src/main/resources // 应用静态资源目录
具体实现
本示例利用 ArkUI 的节点控制器(NodeController)与构建节点(BuilderNode)能力,在首页 Index 页面加载完成后、用户点击之前,提前在后台完成 Web 组件的创建与网页加载(预渲染),从而实现点击弹窗后 Web 页面"瞬开"的效果。
- 在
WebPage.ets中定义WebBuilder构建函数,内部创建Web组件并关联WebviewController,用于承载待预渲染的网页。 - 通过
wrapBuilder包装WebBuilder构建函数,使其可以被BuilderNode的build方法调用。 - 自定义
MyNodeController继承自NodeController,重写makeNode方法返回BuilderNode对应的FrameNode,作为节点的渲染载体。 - 在
EntryAbility.onWindowStageCreate中,loadContent加载首页完成后,调用createNWeb(Constants.WEB_URL, windowStage.getMainWindowSync().getUIContext()):- 创建
BuilderNode实例,并调用其build方法将WebBuilder构建为真实组件节点,提前完成网页的加载与渲染(预渲染)。 - 以 URL 为 key,将对应的
MyNodeController和WebviewController分别存入全局的NodeMap、controllerMap中。
- 创建
- 首页
Index.ets中,通过bindSheet绑定弹窗,弹窗内容使用NodeContainer(getNWeb(Constants.WEB_URL)):getNWeb从NodeMap中取出预渲染好的MyNodeController并挂载到NodeContainer上,将已渲染完成的 Web 页面直接展示出来,无需等待加载过程。
- 点击首页文字区域,切换
isShowSheet状态打开弹窗,即可瞬时看到已预渲染完成的 Web 页面。
关键 API 说明
- NodeController(节点控制器):ArkUI 提供的原生视图控制器,用于以命令式方式创建并管理自定义组件节点。继承该类并重写
makeNode(uiContext: UIContext): FrameNode | null方法,返回需要挂载的节点;本示例中返回BuilderNode的FrameNode,从而让预渲染的 Web 页面能够被动态挂载到任意组件树位置。 - BuilderNode(构建节点):用于承载由
@Builder构建函数创建出来的组件节点。通过new BuilderNode(uiContext)创建实例,再调用build(wrapperBuilder, params)传入wrapBuilder包装后的构建函数及参数,即可在非 UI 代码中(如 Ability 中)预先完成组件构建,这是实现预渲染的关键能力。 - NodeContainer(节点容器):用于在组件树中挂载
NodeController返回的节点。将NodeContainer(controller)放入页面任意位置,即可显示控制器对应的预渲染内容,实现"先渲染、后展示"。 - wrapBuilder(构建函数包装器):将
@Builder构建函数包装后,供BuilderNode.build使用,实现构建函数的跨上下文传递与调用。 - WebviewController(Web 视图控制器):管理
Web组件的控制器,用于后续对网页进行前进、后退、刷新等控制。本示例在预渲染阶段即创建并关联到Web组件。
相关权限
- 网络使用权限:ohos.permission.INTERNET。
依赖
不涉及
约束与限制
1.本示例仅支持标准系统上运行,支持设备:直板机。
2.HarmonyOS系统:HarmonyOS 5.0.5 Release及以上。
3.DevEco Studio版本:DevEco Studio 5.0.5 Release及以上。
4.HarmonyOS SDK版本:HarmonyOS 5.0.5 Release SDK及以上。
