体积与性能
微应用全部资源都打包在包内,包体积直接影响下载安装速度与首屏体验;事件脚本的执行则有硬性超时。本页给出体积与性能的实践建议。
包体积
基线:脚手架模板(Vue / React + Vite)构建后的空项目产物通常在几十 KB 量级,主要空间来自引入的依赖和资源文件。
| 手段 | 说明 |
|---|---|
| 压缩图片 | 界面图标 / 图片用压缩后的 webp / png;大图优先考虑按需加载 |
| 字体子集化 | 中文字体务必子集化(全量字体动辄数 MB),或改用系统字体栈 |
| 依赖裁剪 | 引入库时用按需引入(如组件库的 tree-shaking 导入方式);import lodash 改为 import lodash-es 或具体函数 |
| 移除开发产物 | 不要把 sourcemap、测试文件、类型声明打进发布包 |
代码分割仍然可用
构建工具的代码分割(chunk)产物是包内文件,属于合法的包内资源,按需加载没有问题。被禁止的是远程域名的 chunk。
首屏体验
- 入口
index.html保持轻量,首屏关键资源内联或优先加载; - 非首屏内容(设置面板、二级页面)延迟加载;
- 页面打开即请求的数据,接口尽量并发(
Promise.all),避免串行瀑布; - 窗口初始尺寸与页面布局匹配(
manifest.window),避免打开后大范围重排。
大数据下载
页面生成 / 中转大数据时,避免一次性载入内存:
小数据:
Blob直接交给xunlei.runtime.blob.createObjectURL;大文件 / 流式:使用 opener 模式按需分片供给(支持 Range),内存占用与文件大小无关:
ts// 数据源按区间懒加载,下载器要多少读多少 await xunlei.runtime.blob.createObjectURL( async ({ offset, end }) => openStream(offset, end), { contentType, size: totalSize, range: true }, );
事件脚本性能
事件脚本有总超时限制(时限见钩子事件):
- 脚本加载后立即注册回调,不要在注册前做耗时初始化;
onResolve中的网络请求设置合理超时,避免拖满总超时才失败;- 复杂解析逻辑拆分为多个请求并发执行;
- 能缓存的解析结果(页面结构、接口 token)存入
xunlei.storage,下次触发直接复用。
任务查询
tasks.list+tasks.detail组合查询,用limit控制单次详情数量,不要一次性拉全量;- 页面轮询任务进度时,控制频率(一般 1 秒一次足够),窗口不可见时暂停轮询;
- 大量任务的展示做分页 / 虚拟滚动。


