Skip to content

性能 ​

vuEPG 面向 TV、IPTV 和机顶盒页面。方向键需要及时响应,但低版本 WebView 的性能和浏览器能力差异很大;桌面浏览器上的测试不能代替目标设备实测。

每次方向操作做什么 ​

按方向键时,库从当前项所在的层级查找可用目标,必要时逐层向外。层级从当前 DOM 推导,候选要读取可见状态与矩形;成功移动后更新焦点 class、派发事件,并只对明确标记的容器执行滚动。没有开启滚动时,滚动模块直接返回。

实时读取 DOM 可以避免菜单、弹窗和列表更新后使用过期的几何信息。代价是耗时会随页面 DOM 和已注册焦点项增加。尤其在顶层查找时,getChildren() 会遍历文档;大量无关 DOM 也可能增加耗时。

页面组织建议 ​

  • 只给当前真正可操作的元素加 v-epg-item。长列表优先分页或只渲染可见的部分;切换页面后在新项挂载完成时用 epg.move() 指定焦点。
  • 按真实导航区域分组。分组会改变进入位置,不能仅为了减少候选数量而给每行、每卡片套组。
  • 只给实际滚动的容器加 v-epg-scroll,只有需要整页滚动时才开启 scrollViewport。默认关闭时不会为滚动读取几何信息。
  • 使用 debug: true 排查行为;测量性能时关闭它,避免控制台输出干扰结果。
  • 未涉及焦点项的指令或配置更新不会重复写入焦点 class;页面自身的大批量 DOM 更新仍应在目标设备上观察峰值耗时。
  • 在真机上连续按住方向键,观察按键到焦点 class 更新的时间、是否掉帧,以及跨组和滚动时的峰值。至少覆盖最长列表、弹窗和页面切换。

普通导航的候选选择 ​

未开启 debug 时,候选选择使用单次遍历,保留方向、重叠优先、锚点及并列顺序规则;无需为每次移动构造完整排序结果。debug 和文档示意图继续使用同一打分规则展示完整分析。DOM 层级仍实时推导,不长期缓存。

可在仓库执行 pnpm benchmark:navigation 比较纯几何选择与完整分析的耗时。它不包括 DOM 读取、事件和滚动,也不能代替盒子上的按键响应测量。

Android 4.x 的构建与运行时配置见机顶盒接入。

基于 MIT 许可发布 · 支持项目