前端页面:用户交互持续时间跟踪(duration)user-interaction-tracker
引言
在用户至上的时代,精准把握用户行为已成为产品优化的关键。本文将详细介绍 user-interaction-tracker 库,它提供了一种高效的解决方案,用于跟踪用户交互的持续时间,并提升项目埋点的效率。通过本文,你将了解到如何在 Vue、React 以及其他框架中使用这个工具,助你更好地理解用户行为,优化产品性能。
本文亮点
- 掌握
user-interaction-tracker库的核心功能 - 学习在 Vue、React 中高效集成用户交互跟踪
- 提升项目埋点效率,优化用户体验
- 与同行交流,分享你的见解或提问
user-interaction-tracker:你的用户行为分析利器
库的介绍
user-interaction-tracker 是一个用于记录用户交互和时间的 JavaScript 库。它支持 Vue 2、Vue 3、React 以及其他 JavaScript 框架,提供了简单易用的 API 和插件机制。无论你是在开发 Vue 还是 React 应用,或者其他前端项目,这个库都可以轻松集成,帮助你更好地理解用户行为。
目标:实现用户交互持续时间跟踪(duration),并且提升项目埋点效率。

主要特性
- 跟踪用户操作时间:记录用户开始和结束操作的时间点。
- 计算操作持续时间:提供操作的持续时间,方便进行进一步分析。
- 支持自定义日志上传:可以定义自己的日志上传函数,将数据上传到服务器或进行其他处理。
- 多框架支持:兼容 Vue 2、Vue 3 和 React,同时也提供了 jQuery 和原生 JavaScript 的示例。
- 操作简单:提供
startAction和endAction方法,支持多个跟踪实例。
设计理念:灵活、高效、易用
全面适配多样化场景
在设计 user-interaction-tracker 之初,致力于打造一个能够适应不同需求、场景和项目的工具。以下是设计考量:
- 能不能支持多个跟踪实例?同时达到内存优化的目的?
- 如何灵活配置,操作简单使用,提升项目埋点效率?
- 出现异常是否应该暴露异常?
- 是否可以清除异常数据?
这些问题都需要在封装核心功能时一一解决。
技术亮点
-
多版本支持:为了确保兼容性,本库兼容 Vue2 和 Vue3,通过
Vue.use()方便地集成到 Vue 应用中。同时,对 React 和其他 JavaScript 框架的支持使得它能够广泛应用于各种项目。 -
属性名冲突:为了避免在不同 Vue 项目中出现名称冲突,提供了
globalName属性配置,允许用户自定义实例名称。 -
性能优化:在不需要埋点报告的环境(如测试环境)中,可以通过
enabled选项轻松禁用跟踪,减少不必要的性能开销。此外,使用 Map 替代 Object 来存储数据,优化了频繁操作下的大数据量处理。 -
异常处理:封装过程中考虑了操作失败、异常暴露及清除异常数据的情况,以确保在出现问题时能够有效处理。
无论是新手还是资深开发者都能轻松上手,大幅提升项目的埋点效率。
实战教程:快速集成 user-interaction-tracker
安装
使用 npm 或 yarn 安装 user-interaction-tracker:
npm install user-interaction-tracker
或
yarn add user-interaction-tracker
在 Vue 和 React 项目中的使用
Vue 3 项目集成
在 main.ts 中注册插件,并配置日志上传函数:
// main.ts
import { createApp } from 'vue';
import App from './App.vue';
import userInteractionTracker, { UploadLogFunction } from 'user-interaction-tracker';const app = createApp(App);const uploadLog: UploadLogFunction = (action, type, data) => {console.log(`Action: ${action}, Type: ${type}`, data);
};app.use(userInteractionTracker, {uploadLog,globalName: '$userTracker', // 可选,自定义全局变量名enabled: true // 可选,是否启用
});app.mount('#app');
在组件中使用
<template><div><button @click="handleStartAction">开始记录</button><button @click="handleEndAction">结束记录</button></div>
</template><script lang="ts" setup>
import { getCurrentInstance } from 'vue';const tracker = getCurrentInstance()?.appContext.config.globalProperties.$userTracker;// 开始操作
const handleStartAction = () => {tracker.startAction('action_name');
};// 结束操作
const handleEndAction = () => {tracker.endAction('action_name');
};
</script>
在 React 项目中使用
配置 user-interaction-tracker
// userTracker.ts
import UserInteractionTracker, { UploadLogFunction } from 'user-interaction-tracker';const uploadLog: UploadLogFunction = (action, type, data) => {console.log(`Action: ${action}, Type: ${type}`, data);
};const userTracker = new UserInteractionTracker({uploadLog,enabled: true // 可选,默认为false
});export { userTracker };
在组件中使用
// App.tsx
import React from 'react';
import { userTracker } from './userTracker';const App: React.FC = () => {const handleStartAction = () => {userTracker.startAction('someAction');};const handleEndAction = () => {userTracker.endAction('someAction');};return (<div><button onClick={handleStartAction}>Start Action</button><button onClick={handleEndAction}>End Action</button></div>);
}export default App;
更多框架示例
1、Vue2 代码详细示例
2、Vue3 代码详细示例
3、React 代码详细示例
4、其他框架示例(如jQuery或原生JavaScript)代码详细示例
配置选项与 API
配置参数
| 参数 | 类型 | 描述 | 默认值 |
|---|---|---|---|
uploadLog | 函数 | 上传日志的函数,接收 action(操作名称),type(操作类型),data(操作数据) | 必填 |
enabled | 布尔值 | 是否启用追踪器 | false |
globalName | 字符串 | 在 Vue 实例中的全局变量名 | $userTracker(仅支持vue2&vue3) |
API 方法
| 方法 | 描述 | 参数 | 返回值 |
|---|---|---|---|
startAction(action: string, options?: any) | 开始记录一个操作 | action (字符串): 操作名称options (可选, any): 开始操作的额外信息 | 无 |
endAction(action: string, options?: any) | 结束记录一个操作 | action (字符串): 操作名称options (可选, any): 结束操作的额外信息 | 无 |
getPendingActions(action?: string) | 获取未完成的操作 | action (可选, 字符串): 操作名称 | Object or Array |
clearActions(actions?: string[]): void | 清除指定的操作记录 | actions (可选, 数组): 要清除的操作名称数组 | 无 |
track(action: string, options?: any) | 交互埋点 | action (字符串): 操作名称options (可选, any): 额外信息 | 无 |
总结与回顾
通过本文,我们了解了 user-interaction-tracker 库,一款强大的用户交互跟踪工具。通过简单的配置和易用的 API,它不仅能够帮助我们精确记录用户行为,还能显著提升项目埋点效率。如果你正在寻找一种高效的用户行为跟踪方案,不妨试试这个库。
相关文章:
前端页面:用户交互持续时间跟踪(duration)user-interaction-tracker
引言 在用户至上的时代,精准把握用户行为已成为产品优化的关键。本文将详细介绍 user-interaction-tracker 库,它提供了一种高效的解决方案,用于跟踪用户交互的持续时间,并提升项目埋点的效率。通过本文,你将了解到如…...
中文分词库 jieba 详细使用方法与案例演示
1 前言 jieba 是一个非常流行的中文分词库,具有高效、准确分词的效果。 它支持3种分词模式: 精确模式全模式搜索引擎模式 jieba0.42.1测试环境:python3.10.9 2 三种模式 2.1 精确模式 适应场景:文本分析。 功能࿱…...
EXO-helper解释
目录 helper解释 helper解释 在Python中,字符串 "\033[93m" 是一个ANSI转义序列,用于在支持ANSI转义码的终端或控制台中改变文本的颜色。具体来说,\033[93m 用于将文本颜色设置为亮黄色(或浅黄色,具体取决于终端的显示设置)。 这里的 \033 实际上是八进制的 …...
Qt开发网络嗅探器01
引言 随着互联网的快速发展和普及,人们对网络性能、安全和管理的需求日益增长。在复杂的网络环境中,了解和监控网络中的数据流量、安全事件和性能问题变得至关重要。为了满足这些需求,网络嗅探器作为一种重要的工具被 广泛应用。网络嗅探器是…...
mysql面试(三)
MVCC机制 MVCC(Multi-Version Concurrency Control) 即多版本并发控制,了解mvcc机制,需要了解如下这些概念 事务id 事务每次开启时,都会从数据库获得一个自增长的事务ID,可以从事务ID判断事务的执行先后…...
阿里云公共DNS免费版自9月30日开始限速 企业或商业场景需使用付费版
本周阿里云发布公告对公共 DNS 免费版使用政策进行调整,免费版将从 2024 年 9 月 30 日开始按照请求源 IP 进行并发数限制,单个 IP 的请求数超过 20QPS、UDP/TCP 流量超过 2000bps 将触发限速策略。 阿里云称免费版的并发数限制并非采用固定的阈值&…...
捷配生产笔记-一文搞懂阻焊层基本知识
什么是阻焊层? 阻焊层(也称为阻焊剂)是应用于PCB表面的一层薄薄的聚合物材料。其目的是保护铜电路,防止焊料在焊接过程中流入不需要焊接的区域。除焊盘外,整个电路板都涂有阻焊层。 阻焊层应用于 PCB 的顶部和底部。树…...
html 常用css样式及排布问题
1.常用样式 <style>.cy{width: 20%;height: 50px;font-size: 30px;border: #20c997 solid 3px;float: left;color: #00cc00;font-family: 黑体;font-weight: bold;padding: 10px;margin: 10px;}</style> ①宽度(长) ②高度(宽&a…...
【SpingCloud】客户端与服务端负载均衡机制,微服务负载均衡NacosLoadBalancer, 拓展:OSI七层网络模型
客户端与服务端负载均衡机制 可能有第一次听说集群和负载均衡,所以呢,我们先来做一个介绍,然后再聊服务端与客户端的负载均衡区别。 集群与负载均衡 负载均衡是基于集群的,如果没有集群,则没有负载均衡这一个说法。 …...
【Elasticsearch】Elasticsearch 中的节点角色
Elasticsearch 中的节点角色 1.主节点(master)1.1 专用候选主节点(dedicated master-eligible node)1.2 仅投票主节点(voting-only master-eligible node) 2.数据节点(data)2.1 内容…...
pip install与apt install区别
pipapt/apt-get安装源PyPI 的 python所有依赖的包软件、更新源、ubuntu的依赖包 1 查看pip install 安装的数据包 命令 pip list 2 查看安装包位置 pip show package_name参考 https://blog.csdn.net/nebula1008/article/details/120042766...
分表分库是一种数据库架构的优化策略,用于处理大规模数据和高并发请求,提高数据库的性能和可扩展性。
分表分库是一种数据库架构的优化策略,用于处理大规模数据和高并发请求,提高数据库的性能和可扩展性。以下是一些常见的分表分库技术方案: 1. **水平分表(Horizontal Sharding)**: - 将单表数据根据某个…...
【ffmpeg命令入门】获取音视频信息
文章目录 前言使用ffmpeg获取简单的音视频信息输入文件信息文件元数据视频流信息音频流信息 使用ffprobe获取更详细的音视频信息输入文件信息文件元数据视频流信息音频流信息 总结 前言 在处理多媒体文件时,了解文件的详细信息对于调试和优化处理过程至关重要。FFm…...
【IoTDB 线上小课 05】时序数据文件 TsFile 三问“解密”!
【IoTDB 视频小课】持续更新!第五期来啦~ 关于 IoTDB,关于物联网,关于时序数据库,关于开源... 一个问题重点,3-5 分钟详细展开,为大家清晰解惑: IoTDB 的 TsFile 科普! 了解了时序数…...
python-爬虫实例(4):获取b站的章若楠的视频
目录 前言 道路千万条,安全第一条 爬虫不谨慎,亲人两行泪 获取b站的章若楠的视频 一、话不多说,先上代码 二、爬虫四步走 1.UA伪装 2.获取url 3.发送请求 4.获取响应数据进行解析并保存 总结 前言 道路千万条,安全第一条 爬…...
C# yaml 配置文件的用法(一)
目录 一、简介 二、yaml 的符号 1.冒号 2.短横杆 3.文档分隔符 4.保留换行符 5.注释 6.锚点 7.NULL值 8.合并 一、简介 YAML(YAML Aint Markup Language)是一种数据序列化标准,广泛用于配置文件、数据交换和存储。YAML的设计目标是…...
人工智能与机器学习原理精解【4】
文章目录 马尔科夫过程论要点理论基础σ代数定义性质应用例子总结 马尔可夫过程概述一、马尔可夫过程的原理二、马尔可夫过程的算法过程三、具体例子 马尔可夫链的状态转移概率矩阵一、确定马尔可夫链的状态空间二、收集状态转移数据三、计算转移频率四、构建状态转移概率矩阵示…...
Go channel实现原理详解(源码解读)
文章目录 Go channel详解Channel 的发展Channel 的应用场景Channel 基本用法Channel 的实现原理chan 数据结构初始化sendrecvclose使用 Channel 容易犯的错误总结Go channel详解 Channel 是 Go 语言内建的 first-class 类型,也是 Go 语言与众不同的特性之一。Channel 让并发消…...
数据结构-C语言-排序(4)
代码位置: test-c-2024: 对C语言习题代码的练习 (gitee.com) 一、前言: 1.1-排序定义: 排序就是将一组杂乱无章的数据按照一定的规律(升序或降序)组织起来。(注:我们这里的排序采用的都为升序) 1.2-排…...
灰色关联分析【系统分析+综合评价】
系统分析: 判断哪个因素影响最大 基本思想:根据序列曲线几何形状的相似程度来判断其练习是否紧密 绘制统计图并进行分析 确定子序列和母序列 对变量进行预处理(去量纲、缩小变量范围) 熟练使用excel与其公式和固定(…...
深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...
【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...
Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
DBAPI如何优雅的获取单条数据
API如何优雅的获取单条数据 案例一 对于查询类API,查询的是单条数据,比如根据主键ID查询用户信息,sql如下: select id, name, age from user where id #{id}API默认返回的数据格式是多条的,如下: {&qu…...
企业如何增强终端安全?
在数字化转型加速的今天,企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机,到工厂里的物联网设备、智能传感器,这些终端构成了企业与外部世界连接的 “神经末梢”。然而,随着远程办公的常态化和设备接入的爆炸式…...
docker 部署发现spring.profiles.active 问题
报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...
Java + Spring Boot + Mybatis 实现批量插入
在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法:使用 MyBatis 的 <foreach> 标签和批处理模式(ExecutorType.BATCH)。 方法一:使用 XML 的 <foreach> 标签ÿ…...
WebRTC从入门到实践 - 零基础教程
WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC? WebRTC(Web Real-Time Communication)是一个支持网页浏览器进行实时语音…...
