Lynx 3.8:Android 上的 WebAssembly、自适应布局与更多能力

所有文章
2026年5月31日
岳明
岳明基础设施主管 @ Lynx
Lynx 团队
Lynx 团队lynxjs.org

Lynx 3.8 已经正式发布!

正如 2026 路线图中提到的规划,Lynx 3.8 开启了新的月度发布节奏。切换到月度发布后,每个版本都会更小、更聚焦。3.8 的重点包括 Android 上的 WebAssembly<frame> 自适应尺寸、按行数调整字号、HarmonyOS SessionStorage、LynxEngine 复用和 DevTool 协议更新。

进入 3.8 之前,也别错过我们最近发布的 lynx-ui:一套开箱即用的组件库,帮助你构建跨平台 Lynx 界面。

Android 上的 WebAssembly

本次发布通过 PrimJS 运行时集成,在 Android 上引入了 WebAssembly 初步支持。Lynx 应用现在可以在后台线程加载和执行 WebAssembly 模块,让计算密集型逻辑在 JavaScript 性能不够时获得另一种实现选择。

当前实现主要覆盖常见的构造函数式使用方式:

const module = new WebAssembly.Module(wasmBytes);
const instance = new WebAssembly.Instance(module, imports);

const result = instance.exports.add(1, 2);

下面这个完整的 Lynx 页面示例展示了同样的调用流程:

当前实现完整支持 WebAssembly.ModuleWebAssembly.Instance,并覆盖 WebAssembly.MemoryWebAssembly.TableWebAssembly.Global 的常见用法。

自适应布局、文本适配与平台行为

本次版本改进了 Lynx 内容对宿主容器的适配、受限布局中的文本呈现,并补齐了一些平台行为差异。

<frame> 自适应尺寸与加载指标

<frame> 现在可以通过新的 auto-widthauto-height 属性,根据嵌入 Lynx 页面的内容确定自身尺寸,减少宿主侧手动计算尺寸的需要。

<frame src={url} auto-width auto-height />

它也增强了启动和可观测性支持,包括预设布局、更好的 dataglobal-props 传递、通过 layoutchange 上报固有尺寸,以及 Android 和 iOS 上的 <frame> 加载指标。

按行数调整字号

新的 -x-auto-font-size-line-ranges CSS 属性可以根据实际渲染行数,为不同文本行数设置不同的字号搜索范围。配合 -x-auto-font-size: true 使用:

.title {
  -x-auto-font-size: true;
  -x-auto-font-size-line-ranges:
    line-range(1, 18px, 22px), line-range(2, 16px, 18px),
    line-range(3 to infinity, 14px);
}

这适用于标题、卡片和信息流等场景,让单行、双行和多行文本分别使用更合适的字号范围。

桌面端曝光与 HarmonyOS 动画

macOS 和 Windows 现在支持 enable-exposure-ui-clip,让开发者可以在复杂布局中更精细地控制曝光计算。

HarmonyOS <view> 也新增了关键帧动画管线支持。

原生侧集成

LynxViewGroup 中的引擎复用

在 Android 上,LynxViewGroup 现在可以为同一个组创建出的 LynxView 缓存并复用 LynxEngine。当应用反复基于同一个 template bundle 创建视图时,例如多页面或嵌入式视图场景,这一能力会很有用。

不少应用里,用户会反复离开并重新进入同一个 Lynx 页面。此时,缓存 LynxEngine 可以避免反复创建和销毁引擎,并复用引擎已经完成的工作,例如已经构建好的 UI 树,从而让页面再次进入时更快完成渲染。

应用无需直接管理 LynxEngine。创建启用缓存的 group,将它传给每个 LynxViewBuilder,并在不再需要时释放即可:

ILynxViewGroup group = new LynxViewGroupBuilder()
    .setContext(context)
    .setTemplateBundle(templateBundle)
    .setGlobalProps(globalProps)
    .setEnableCacheEngine(true) // 启用缓存。
    .build();

LynxView first = new LynxViewBuilder()
    .setLynxViewGroup(group)
    .build(context);

// 稍后,使用同一个 group 创建的另一个 LynxView 可以复用缓存的引擎。
LynxView second = new LynxViewBuilder()
    .setLynxViewGroup(group)
    .build(context);

group.release();

资源加载回调

LynxViewClientV2 新增 onResourceLoaded 回调,使客户端可以在原生侧观察资源加载过程。这为宿主应用提供了统一入口,用来收集资源耗时、成功或失败状态以及其他诊断信息。

HarmonyOS 上的 SessionStorage

HarmonyOS 现在支持 SessionStorage API,可用于跨页面数据共享。前端代码可以在 HarmonyOS 上使用已有的 lynx.setSessionStorageItemlynx.getSessionStorageItemlynx.subscribeSessionStoragelynx.unsubscribeSessionStorage API,管理 session 级的跨页面状态。

DevTool 协议与调试

DevTool 协议和调试能力改进包括:

  • MTS 调试现在支持已预执行、已预解码的 MTSRuntime 实例。
  • CDP 支持新增 DOM.describeNode
  • DOM.getDocument 现在支持 depth 参数。
  • DevTool 可以通过 CDP Performance domain 查询 PerformanceEntry 数据。

升级指南

参照官网接入 Lynx 到现有应用,更新 Lynx 依赖版本,即可完成 Lynx 3.8 版本升级。

感谢

Lynx 3.8 是月度发布节奏的第一步:更小的版本、更清晰的升级路径,也让我们更快响应反馈。

感谢每一位正在使用 Lynx、尽早试用新版本、提交 issue,并帮助项目在开放社区中持续进步的开发者。下次月度发布再见。

除非另有说明,本项目采用知识共享署名 4.0 国际许可协议进行许可,代码示例采用 Apache License 2.0 许可协议进行许可。