Skip to content

Changelog ​

本页内容由 VitePress 直接 include packages/lens/CHANGELOG.md,changesets 在每次发版时自动维护,无需手工编辑。首个正式版本发布前,下方暂无版本记录。

@tripo3d/lens ​

1.4.0 ​

Minor Changes ​

  • 056c11f: hide 后台刷新(hidden-refresh):stale-page-refresh 新增第二条触发路径——页面存活超过 minPageAgeMs 后发生 hide,延迟 delayMs 在后台执行一次刷新,覆盖「切走后不再回来」的会话。

    • 新增 HiddenRefreshCollector 与共享 receipt 纯函数层 refresh-gate,receipt 消费权仍归 on-show 采集器(confirmed 不双报)。
    • 远端配置新增 performance.stalePageRefresh.onHide(enabled / delayMs / minPageAgeMs);缺省或非法时只关该子路径,不影响已上线的 on-show 路径。
    • 事件契约只增不改:tags.trigger 区分 on-show / on-hide、新增 tags.reason = timer_missed、data.pageAgeMs;op 与 stage 不变,下游查询零破坏。
    • 单次语义:后台刷出的页面出生即 hidden,不再武装;延迟窗口内用户返回即取消。

1.3.0 ​

Minor Changes ​

  • 8030af4: 页面 hide/show 刷新整个页面:新增 stale-page-refresh / stale-route 性能采集能力,扩展 remote-config 配置项;最后一次上报携带请求头,避免 401 鉴权失败。

    (补齐 #263 遗漏的 changeset:该 PR 已合入 main,但配套 changeset 子 PR #264 被误关,导致 lens 未发版。)

1.2.0 ​

Minor Changes ​

  • 0e6328b: 结构性修复卸载竞态:此前 L4 管线为无条件异步(async process 至少一个微任务),而队列卸载兜底在同一次 pagehide 派发里同步排空,导致 dwell 的 leave/hide 标记与 performance 插件的卸载时刻数据几乎全部丢失(真实卸载路径 leave 送达率 ~0)。本次两刀根治:

    • 管线条件同步化:beforeEmit 钩子缺失或同步返回时,事件从 emit 到入队全同步完成;钩子返回 Promise 才转异步。Pipeline.process 返回类型相应拓宽为 WireItem | null | Promise<WireItem | null>(await 调用方源兼容)。
    • 生命周期相位派发:LifecycleAdapter.onHide/onUnload 新增 collect/flush 相位(缺省 collect),同一次派发内采集者先产出、队列排空后执行,「先采集后排空」成为时序契约。

    修复后 leave/hide 标记与 perf 卸载数据同步进入首批卸载 keepalive,不依赖卸载后微任务仍会执行;beforeEmit 公开契约(可同步或异步)不变。

    同步入队随之带来一条新竞争路径,一并收口:collect 相位的采集者同步入队后,push 的即时 flush(P0 入队即发 / maxBatch 满)会在 flush 相位之前同步 drain 走整个队列,使这批事件改走常规路径——带 X-DeviceId 头(跨域需预检 OPTIONS,卸载期会被丢弃)且丢掉「先落快照再发」的兜底。现由 LifecycleAdapter.isUnloadDispatching() 标出派发窗口,窗口内 push 不抢跑,整批仍交卸载兜底收口;代价是此期间入队的 P0 拿不到真回执,按「卸载排空,回执作废」reject(与滞留队列的 P0 同一口径)。

    同步化只改「入队时机」,不改「投递完成」语义:两条分支产出的投递 promise 一律登记在途集,故 flush() 仍等 P0 送达回执(1.1.2 保证),void ctx.emit(e) 这类不加 .catch 的调用也仍不会冒出 unhandledrejection。

1.1.3 ​

Patch Changes ​

  • 924ba10: - @tripo3d/lens & @tripo3d/trace: landing 上报去重窗口从「当日一次」改为「滚动 1 分钟一次」,去重存储由日期串改为标记时间戳,旧数据自动 GC 无需迁移

1.1.2 ​

Patch Changes ​

  • ac99915: 修复 flush() 追不上 L4 pipeline 的时序竞态:事件从 emit 到入 L5 队列存在异步微任务窗口,业务同步连写 track(...); flush()(典型场景:整页跳转前手动 flush)时,flush 会对着空队列空转、一个请求都不发,事件滞留到 30s 调度或页面卸载兜底,跳转场景下表现为丢事件。现在 flush() 先等调用时刻已在途的 emit 落队(快照一次,flush 期间新 emit 不追),再排空队列——track(...); void flush(); location.href = ... 即可保证请求在跳转前以 fetch keepalive 发出,无需 await、零跳转延迟。

1.1.1 ​

Patch Changes ​

  • 42c6498: 修复两处评审与单测发现的口径问题。

    • schema 校验:timestamp 改用有限数判定(Number.isFinite),区分「缺失/NaN/Infinity」与合法的 0 值,不再误丢 falsy 时间戳。
    • 曝光策略解析:setExposurePolicy 的 overrides 多条同时命中时按具体度取胜者——精确键 > 最长通配前缀(如 a.b.* 胜过 a.*),不再依赖对象键书写顺序。
    • 上报 header:网关请求头补充 X-Lang(取 navigator.language),修复上报缺失语言信息的问题。

1.1.0 ​

Minor Changes ​

  • c25c400: - @tripo3d/lens: 支持远端 performance.slowResourceMs 慢资源阈值,优先于本地 options,缺省回退本地/内置默认

1.0.0 ​

Major Changes ​

  • 23d845e: 首个正式版 1.0.0:商业化埋点与广告归因采集内核。

    • 内核迁入:从 fe-tripo-trace 仓库迁入(监控 / 埋点 / 归因 / 性能统一内核,基于 @tripo3d/fingerprint),提供 ESM 主入口与 /shared、/server 子路径。
    • 多框架入口:新增 @tripo3d/lens/react、@tripo3d/lens/vue 子路径,原 @tripo3d/lens-react-plugin / @tripo3d/lens-vue-plugin 薄适配层折入本包;消费方 pnpm add @tripo3d/lens 后按框架子路径 import。
    • Nuxt 适配器:以 @tripo3d/lens/nuxt 子路径随本包发布(原独立包 @tripo3d/lens-nuxt-plugin 已移除),零接线装配客户端实例与 SSR 采集;app / endpoint / configUrl 均为构建期必填校验。
    • 相对 beta 的修复与加固:
      • 传输层 flush / restore / 离线重放 / 卸载兜底统一 UTF-8 字节度量(原 UTF-16 字符数对中文低估约 3 倍,整批超 fetch keepalive 64KB 配额被浏览器拒收);卸载兜底只发首批(配额为页面级共享总额),剩余回灌内存 + 快照续传,消除超额批被拒后快照已清的静默丢数据;离线单条准入与拆批共用 KEEPALIVE_SAFE_BYTES,不再接纳永远发不出去的超大记录。
      • PriorityQueueOptions.maxChunkChars 更名 maxChunkBytes(度量口径改为 UTF-8 字节),旧字段保留 deprecated 别名。
      • Web Vitals 的 CLS 保留 4 位小数(原 round 取整后恒为 0);序列化失败(payload 含 BigInt / 循环引用)按管线契约转为丢弃并经 onError 可观测,不再使 process() reject。
      • 插件生命周期竞态修复:setupAll 幂等跳过活跃插件(不再对活跃插件二次 setup),生命周期变更内部串行互斥、destroy 重置串行链(防挂死 setup 拖住重建)、setup 期间被 destroy 的插件就地补拆;revokeConsent 同步拆除受控插件后再清队列,撤销即刻停止采集、不被在途 setup 拖延。
      • IndexedDB 连接异常关闭(跨 tab deleteDatabase / 浏览器回收)自动清缓存、下次操作重开自愈;React useTraceProps 错误上报移出渲染期(useMemo → useEffect)。

Minor Changes ​

  • 23d845e: Nuxt 适配器折入核心包:新增 @tripo3d/lens/nuxt 子路径入口(tsdown 构建,module + runtime/{plugin.client,nitro} 三 entry),独立包 @tripo3d/lens-nuxt-plugin 从 monorepo 移除、停止发布。

    BREAKING(针对 @tripo3d/lens-nuxt-plugin 消费方):该包不再维护,请迁移到核心包子路径——

    • 依赖:pnpm remove @tripo3d/lens-nuxt-plugin && pnpm add @tripo3d/lens(Nuxt 场景需自带 nuxt / @nuxt/kit 等 peer,均为 optional,不影响非 Nuxt 消费方)。
    • nuxt.config:modules: ['@tripo3d/lens-nuxt-plugin'] → modules: ['@tripo3d/lens/nuxt']。
    • tripoLens 配置键与全部选项保持不变,运行时行为无变化。
  • 23d845e: performance 上报改为绝对时刻锚点范式,完整还原加载瀑布。

    • 统一口径:Navigation / Hydration / SlowResource 不再上报我方计算的差值段长,改为透传相对 timeOrigin 的绝对时刻锚点(DOMHighResTimeStamp,round 取整),差值全部交后端派生。消除 tcp/tls 口径重叠、两种 ttfb 歧义、responseEnd → domInteractive 还原黑洞。
    • Navigation 补齐锚点:新增 redirectStart/End、fetchStart、workerStart、domComplete、loadEventStart、domContentLoadedEventStart 等全时间轴锚点,及文档体积(transferSize/encodedBodySize/decodedBodySize)、元信息(nextHopProtocol/type/redirectCount)、epoch 基准 timeOrigin。后端可据此无缝重建加载 waterfall。
    • Hydration 双锚点:hydrationDuration 差值改为 hydrationStart(= navigation domInteractive)/ hydrationComplete 双锚点,与 navigation 落在同一 timeOrigin 坐标系。
    • SlowResource 补齐:新增 responseEnd 锚点与 encodedBodySize/decodedBodySize 体积字段。
    • 关联键:Navigation / Hydration / Web Vitals 在有 SSR 时统一带 renderId,供后端 join 同一次加载的全部性能事件。
    • SSR 跨端时钟边界保持现状(SSR 相对服务端 startedAt,靠 renderId 关联,不强行抹平 clock skew);LongTask/LoAF 聚合不变。

基于 MIT 协议发布(内部使用)