# @doist/interaction-trace 中文文档

规范地址：https://npmcn.com/package/%40doist/interaction-trace/

版本：1\.1\.0
npm 元数据更新时间：2026-08-21T21:58:03.576Z
中文译文更新时间：2026-11-12T14:56:38.968Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40doist/interaction-trace
原文对照：https://npmcn.com/package/%40doist/interaction-trace/?lang=original
项目主页：https://github.com/Doist/interaction-trace#readme
源码仓库：https://github.com/Doist/interaction-trace

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：53.4 kB，42 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- 运行依赖：0 个
- peer 依赖：react ^18\.0\.0 \|\| ^19\.0\.0
- 首次发布：2026-02-06T07:17:31.075Z
- 最新版本发布：2026-02-06T18:46:09.649Z
- 近 30 天下载量：8839（2026-10-13 至 2026-11-11，npm 官方下载统计）
- 已发布版本数：2（近 12 个月 2 个）

## 中文简介

一个用于跟踪从用户交互到下一张颜料(INP)和上一张长动画框(LoAF)的时间的性能监测库,其中包含声明的痕量签名和第三方报告.

## 安装

```sh
npm install @doist/interaction-trace
```

也可以使用：`pnpm add @doist/interaction-trace`、`yarn add @doist/interaction-trace`、`bun add @doist/interaction-trace`

## README

# @ doist/ 交互跟踪

[![npm version](https://img.shields.io/npm/v/@doist/interaction-trace)](https://www.npmjs.com/package/@doist/interaction-trace) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) [![Node.js](https://img.shields.io/node/v/@doist/interaction-trace)](https://nodejs.org/)

用于跟踪用户互动的性能监测库 [互动到下一张图 (INP)](https://web.dev/articles/inp) 财务报告和审定财务报表 [长动画框架( LOAF)](https://web.dev/articles/long-animation-frames). 特征声明痕量签名和可插件报告.

## 安装

```bash
npm install @doist/interaction-trace
```

## 使用量

### 初始化监视器

```typescript
import { initInteractionTraceMonitor } from '@doist/interaction-trace'

const cleanup = initInteractionTraceMonitor({
    reporter: (report) => {
        // Send to your analytics service
        console.log('Trace report:', report)
    },
    enrollment: {
        sampleRate: 10, // 10% of sessions
        isEnabled: () => {
            if (user.isInternal) return true    // force enable for internal users
            return undefined                     // everyone else: use sampleRate
        },
    },
    abortSignal: controller.signal, // Optional: auto-cleanup when aborted
})

// Or call cleanup() manually when done
```

### 签名追踪

微量测量从用户点击到浏览器完成所有视觉更新的时间. 追踪自动创建于 `pointerup` 事件-使用 `signInteractionTrace()` 以说明和提供有待追踪的细节.

```typescript
import { signInteractionTrace } from '@doist/interaction-trace'

button.addEventListener('click', () => {
    signInteractionTrace('open modal', { modalId: 'settings' })
    openModal()
})
```

#### 类型脚本

创建用于编译时间验证微量名称和细节的预型函数 :

```typescript
import { signInteractionTrace } from '@doist/interaction-trace'

type MyTraces = {
    'open modal': { modalId: string }
    'submit form': { formId: string }
}

const signAppTrace = signInteractionTrace.withTypes<MyTraces>()

signAppTrace('open modal', { modalId: 'settings' })   // ✅ Works
signAppTrace('opne modal', { modalId: 'settings' })   // ❌ Error: typo caught
signAppTrace('open modal', { formId: 'x' })           // ❌ Error: wrong details
```

### 反应集成

```tsx
import { useInteractionTrace } from '@doist/interaction-trace/react'

function SettingsModal() {
    useInteractionTrace('open modal', { modalId: 'settings' })
    return <div>...</div>
}
```

#### 类型脚本

```tsx
import { useInteractionTrace } from '@doist/interaction-trace/react'

type MyTraces = {
    'open modal': { modalId: string }
    'submit form': { formId: string }
}

const useAppTrace = useInteractionTrace.withTypes<MyTraces>()

function SettingsModal() {
    useAppTrace('open modal', { modalId: 'settings' })
    return <div>...</div>
}
```

## 配置

### 注册选项

| 选项 | 类型 | 说明 |
| --- | --- | --- |
| `sampleRate` | `number` | 参加届会的百分比l(0-100) |
| `persistKey` | `string` | 入学状态的会话Storage密钥。 默认 : `'interaction-trace-enrolled'` |
| `isEnabled` | `() => boolean | undefined` | 覆盖函数 . `true`编号 :`false` 超过采样, `undefined` 推迟至 `sampleRate` |

### 记者界面

记者收到 `TraceReport` 对象 :

```typescript
type TraceReport = {
    id: string                        // Unique trace ID (crypto.randomUUID())
    duration: number                  // Total LoAF duration (ms)
    inp: number | undefined           // INP value if captured (ms)
    details: {
        name: string                  // Trace name from signInteractionTrace()
        [key: string]: unknown        // Additional details
    }
    device: {
        memoryGB: string              // Bucketed: "0.25-2", "3-7", "8-plus", or "unknown"
        cpuCores: string              // Bucketed: "1-8", "9-16", "17-plus"
    }
}
```

## 浏览器支持

长动画框架和事件时间API需要Chrome 123+. 在不支持的浏览器中,显示器默默无声——你的应用程序继续正常工作,只是没有微量收集.

## 已知的限制

### 键盘交互

此库只跟踪基于指针的交互( Q)`pointerup` 活动)。 键盘启动的交互(例如,按 Enter 键以提交窗体,Space to checkbox)不被捕获. INP 度量衡只会反映鼠标/触碰相互作用.

如果您的应用程序有显著的键盘用法,请在解释所收集的度量时考虑这一点.

## 发展

发展需要节点.js 22.18.0(见 `.node-version`) (中文(简体) ).

```bash
npm install
npm run build
npm test
```

## 释放

这个项目使用 [请放行](https://github.com/googleapis/release-please) 自动释放。 提交合并为 `main` 与 `fix:` 触发补丁释放, `feat:` 引发轻微释放 `feat!:` 或者说 `fix!:` 触发主要释放.

当在 `main`,释放 - 请创建释放 PR。 将它合并到 npm 和 GitHub 套件 .

## 许可证

释放 [MIT 许可证](https://opensource.org/licenses/MIT)。 。 。 .

## 常见问题

### @doist/interaction-trace 是什么？

一个用于跟踪从用户交互到下一张颜料\(INP\)和上一张长动画框\(LoAF\)的时间的性能监测库,其中包含声明的痕量签名和第三方报告\.

### 如何安装 @doist/interaction-trace？

在项目目录运行 npm install @doist/interaction-trace，或使用 pnpm add / yarn add / bun add。

### @doist/interaction-trace 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @doist/interaction-trace 支持 ESM 还是 CommonJS？

以 ES Module 形式发布，推荐使用 import 引入。在 CommonJS 项目中，Node\.js 20\.19\+ / 22\.12\+ 可以直接 require\(\) 不含顶层 await 的 ES Module，更早的版本需要改用动态 import\(\)。

### @doist/interaction-trace 可以商用吗？

@doist/interaction-trace 使用 MIT 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### @doist/interaction-trace 的下载量有多少？

根据 npm 官方下载统计，@doist/interaction-trace 在 2026/10/13 – 2026/11/11 这 30 天内被下载 8,839 次，日均约 295 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @doist/interaction-trace 还在维护吗？

最新版本 1\.1\.0 发布于 2026/02/07（9 个月前）；至今共发布 2 个版本，其中过去 12 个月发布了 2 个；首次发布于 2026/02/06。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

