Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >不花一分钱!前端监控安排上,还带回放功能!

不花一分钱!前端监控安排上,还带回放功能!

原创
作者头像
老码小张
发布于 2024-07-11 06:54:33
发布于 2024-07-11 06:54:33
7481
举报
文章被收录于专栏:玩转全栈玩转全栈

今天,我想给我的小 SAAS 项目加上一些前端监控,这样我就可以更好的了解我的用户在使用我的产品时遇到了什么问题,从而更好的改进我的产品。我首先想到的就是 Sentry,因为这货在掘金上还是比较有名气的。

这货在 GitHub 上也是斩获了,37.6K 的 star,而且支持的特性也的确非常的优秀。比如性能监控、错误日志、录屏回放等等。我没打算自己部署一个,我期望使用他的 SAAS 服务,最好是有一定额度的穷鬼套餐。但是,当我注册了一个账号之后,准备使用的时候,就果断放弃了,因为他明明白白的写着只有 14 天的试用期,之后就需要付费 30 刀每个月,穷鬼退散

时至今日,我所用的 vercelsupabase,无一例外都是提供一定的免费额度的。所以,我也一定要找到一个有一定免费额度的,找着找着,我找到了 OpenReplay。

OpenReplay

正如图上所述,OpenReplay 是一个开源的前端监控工具,它支持的特性也是非常的丰富,比如性能监控、错误日志、录屏回放等等。而且,它还提供了一个免费额度,每个月可以录制 1000 个会话,这对于一个小项目来说,已经足够了。下面是他的接入文档,支持 React、Vue、Angular、Next.js 等等。

https://docs.openreplay.com/en/getting-started/

先说说效果

接入成功之后,如果数据上报上来,是可以看到一个 session 列表的,因此它是已一个 session 来管理记录的。

然后,对于每一个 session,可以点击查看回放,这样就可以看到用户在使用产品的时候的操作,这对于我们来说是非常有用的,可以帮助我们更好的了解用户的使用情况,从而更好的改进我们的产品。然后下面也可以看到 console 的输出,这样我们就可以看到用户在使用产品的时候遇到了什么问题,从而更好的解决问题,尤其是前端 js 错误,这对于我们来说是非常有用的。

隐私保护

这里的回放,默认对于敏感信息是打码的,这一点非常的好,这样就不用担心用户的隐私泄露了。

此外,他还支持配置一些数据看板,甚至,我们可以配置热力图,这样就可以分析用户体验。

这里的特性就不一一细讲了,总结起来就是:

  • 会话重放:让您重现用户体验,查看他们在哪里挣扎以及这对他们行为的影响。
  • DevTools:就像在您自己的浏览器中调试一样,OpenReplay 提供完整的上下文信息。
  • Assist:通过实时查看用户屏幕并立即通过WebRTC与他们通话来帮助您支持用户。
  • 特性标志:启用或禁用功能,进行渐进式发布和A/B测试,无需重新部署应用。
  • 全局搜索:几乎可以通过任何用户行为/标准、会话属性或技术事件进行搜索和过滤。
  • 细粒度隐私控制:选择捕获、模糊或忽略的内容,以便用户数据甚至不会到达您的服务器
  • 集成:将您的后端日志与会话重放同步,查看前端和后端发生的事情。

使用方法

可以通过下面这篇文档来了解如何在 next.js 中使用 OpenReplay

https://docs.openreplay.com/en/using-or/next/

接入起来可谓是无脑傻瓜式操作,只需要在项目根目录下创建一个.env.local文件,然后在里面添加NEXT_PUBLIC_OPENREPLAY_ID这个环境变量,值为你的OpenReplay项目ID即可。

代码语言:shell
AI代码解释
复制
NEXT_PUBLIC_OPENREPLAY_ID=your-project-id

使用 TrackContext 的方式来引入 OpenReplay 的脚本,返回一个 Provider 组件,然后在根组件中使用这个 Provider 组件即可。

代码语言:jsx
AI代码解释
复制
"use client";//注意这里,因为我们要在客户端代码中使用
import { createContext } from "react"
import Tracker from '@openreplay/tracker';
import {v4 as uuidV4} from 'uuid'
import { useReducer } from "react"

export const TrackerContext = createContext()

function defaultGetUserId() {
   return uuidV4()
}

function newTracker(config) {
    const getUserId = (config?.userIdEnabled && config?.getUserId) ? config.getUserId : defaultGetUserId
    let userId = null;

    const trackerConfig = {
        projectKey: config?.projectKey || process.env.NEXT_PUBLIC_OPENREPLAY_PROJECT_KEY
    }

    const tracker = new Tracker(trackerConfig);

    if(config?.userIdEnabled) {
        userId = getUserId()
        tracker.setUserID(userId)
    }
    return tracker

}

function reducer(state, action) {
        switch(action.type) {
            case 'init': {
                if(!state.tracker) {
                    console.log("Instantiaing the tracker for the first time...")
                    return {...state, tracker: newTracker(state.config)}
                }
                return state
            }
            case 'start': {
                console.log("Starting tracker...")
                state.tracker.start()
                return state
            }
        }
    }

export default function TrackerProvider({children, config = {}}) {
    let [state, dispatch] = useReducer(reducer, {tracker: null, config})
    let value = {
        startTracking: () => dispatch({type: 'start'}),
        initTracker: () => dispatch({type: 'init'})
    }

    return <TrackerContext.Provider value={value}>{children}</TrackerContext.Provider>
}

这里有一点需要注意,官网并没有给出TrackerProvider的用法。这里一定需要注意,需要使用 dynamic import 的方式引入 OpenReplay 的脚本,否则你将会看到 window is not defined 的错误。

代码语言:jsx
AI代码解释
复制
import dynamic from 'next/dynamic'
const TrackerProvider = dynamic(() => import('@/trackContext'), { ssr: false });

引入 Eruda

Eruda 是一个专为移动端网页设计的调试工具,它是一个开源项目,可以在 GitHub 上找到它的源码。Eruda 的功能非常强大,它可以让你在移动端网页上调试 JavaScript 代码、查看 DOM 结构、查看网络请求等等。很多时候,我们用它来查看一些 js 错误,或者查看一些网络请求的情况。在 Next.js中引用他的方式,官网上没有明确给出,但是参考 next.js 的官方只能,引入 js 的方式,我们不难得出结论,使用 next/script 来引入 Eruda 的脚本。在 OnLoad 事件中初始化 Eruda 即可。

代码语言:jsx
AI代码解释
复制
"use client";
import Script from 'next/script'

function Eruda() {
  return (
    <div classname="container">
      <Script src="//cdn.jsdelivr.net/npm/eruda"
      onLoad={() => {
        eruda.init()
      }}
      ></Script>
    </div>
  )
}

export default Eruda

技巧!如何区分环境开启和关闭监控

我们不希望在本地开发环境中开启监控,因为这样会影响我们的开发效率。所以我们应该怎么做呢?一个就是在 .env.local 文件中添加一个环境变量,然后在代码中判断这个环境变量的值,来决定是否开启监控。

代码语言:shell
AI代码解释
复制
NEXT_PUBLIC_IS_LOCAL=true

这里注意一下,这些带有 NEXTPUBLIC 前缀的环境变量,是可以在客户端代码中访问的,但是不要在这里放置一些敏感信息,因为这些信息会被打包到客户端代码中。

至此,我们就可以在代码中判断这个环境变量的值,来决定是否开启监控。

代码语言:jsx
AI代码解释
复制
if(!process.env.NEXT_PUBLIC_IS_LOCAL) {
    // 非本地环境,开启监控
}

总结

通过上面的配置,我们就可以在 Next.js 中引入 OpenReplay 和 Eruda,这样我们就可以在开发环墋中更好的了解用户的使用情况,从而更好的改进我们的产品体验。而且,这两个工具都是免费的,对于一个小项目来说,简直就是福音。

关注老码沉思录,获取我最新的知识分享

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
1 条评论
热度
最新
不错,学习了
不错,学习了
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
Next.js基础教程:入门与实战
Next.js是一个流行的React框架,用于构建服务器 - 渲染(SSR)和静态网站生成(SSG)的现代Web应用程序。它提供了一种简单而高效的方式来开发具有高性能和良好可扩展性的Web应用。其独特之处在于能够充分利用服务器端渲染的优势,提高首屏加载速度,改善搜索引擎优化(SEO),同时也方便与React的各种生态系统集成。
Front_Yue
2025/01/06
8640
Next.js基础教程:入门与实战
Next.js 实战 (九):使用 next-auth 完成第三方身份登录验证
next-auth 是一个专门为 Next.js 设计的、易于使用的、灵活的身份验证库。它简化了为你的应用程序添加身份验证(如登录、注册、登出等)的过程。next-auth 支持多种认证方式,包括通过电子邮件和密码、OAuth 2.0 提供商(如 Google、GitHub、Facebook 等)、以及自定义提供商。
白雾茫茫丶
2025/01/17
4550
Next.js 实战 (九):使用 next-auth 完成第三方身份登录验证
从0到1搭建前端监控平台,面试必备的亮点项目
常常会苦恼,平常做的项目很普通,没啥亮点;面试中也经常会被问到:做过哪些亮点项目吗?
前端老道
2023/02/27
3.7K0
从0到1搭建前端监控平台,面试必备的亮点项目
一文搞懂得物前端监控
得物的服务端监控是比较全面和有效的,除了上报原始日志数据,还通过数据分析制定线上告警机制,调用链路分析,而针对前端项目这一块,还是不够全面的。对前端线上问题感应不及时,靠人肉发现,没有告警机制等问题,所以就有个前端监控这个项目。前端监控也确实很有必要,我们需要对线上的页面有个全面的把控,而至于怎么做监控,做数据上报,以及数据分析,如何针对监控数据分析出有用的核心链路的告警等也能有个全面的认识。本文主要是介绍得物针对监控做了哪些事情以及对前端底层监控手段做个总结。
得物技术
2023/12/13
8070
一文搞懂得物前端监控
在 React 中进行事件驱动的状态管理
自 Hook 被引入 React 以来,Context API 与 Hook 库在应用状态管理中被一起使用。但是把 Context API 和 Hooks(许多基于 Hooks 的状态管理库建立在其基础上)组合的用法对于大规模应用来说可能效率不高。
疯狂的技术宅
2020/06/29
2.6K0
在 React 中进行事件驱动的状态管理
让我告诉你一些强无敌的 NPM 软件包
面对繁忙的日程安排与紧迫的工期限制,选择能够切实提升生产率的工具无疑至关重要。
coder_koala
2021/04/21
2K0
手把手带你用next搭建一个完善的react服务端渲染项目(集成antd、redux、样式解决方案)
本文参考了慕课网jokcy老师的React16.8+Next.js+Koa2开发Github全栈项目,也算是做个笔记吧。
ssh_晨曦时梦见兮
2020/04/10
6.1K0
React SSR 简介与 Next.js 使用入门
React SSR 是什么?React SSR 是 React 服务器端渲染 (SSR: server side render) 技术。传统的服务端渲染方式是使用 HTML 模板的方式渲染出来的。访问数据库,拿到数据然后将数据填充到 HTML 模板上,比如 Node.js 中的 pug 模板引擎、ejs 模板引擎等都是服务端渲染的模板。传统的服务端渲染通常用在文档型页面上,而现在网页被称为 web app,页面更像 app 应用,现在做服务器渲染主要是为了 SEO 和首屏。React 与模板渲染很相似,都是通过数据驱动,将页面渲染出来。
多云转晴
2020/03/12
10.1K0
从头开始,彻底理解服务端渲染原理
大家好,我是神三元,这一次,让我们来以React为例,把服务端渲染(Server Side Render,简称“SSR”)学个明明白白。
Nealyang
2019/09/29
2.4K1
从头开始,彻底理解服务端渲染原理
让我告诉你一些强无敌的 NPM 软件包(超实用,收藏!)
在这里,我整理出一份个人最喜欢的 NPM 软件包清单。为了便于浏览,我还对它们进行了分类,希望呈现出更加清晰的结构。
coder_koala
2021/07/08
3.1K0
让我告诉你一些强无敌的 NPM 软件包(超实用,收藏!)
Vue.js 服务端渲染业务入门实践
iKcamp
2018/01/04
1.9K0
推荐一波实用高效的 NPM 工具包,总有几款适合你
在这里,我整理出一份个人最喜欢的 NPM 软件包清单。为了便于浏览,我还对它们进行了分类,希望呈现出更加清晰的结构。
前端达人
2021/09/08
4.6K0
Typescript 全栈最值得学习的技术栈 TRPC
如果你想成为一个 Typescript 全栈工程师,那么你可能需要关注一下 tRPC 框架。
愧怍
2023/03/14
3.5K0
Typescript 全栈最值得学习的技术栈 TRPC
如何在 Next.js 全栈应用程序中无缝实现身份验证
本教程中,我们将一同了解如何使用 Clerk 向全栈应用程序添加身份验证机制。 我们跟 Clerk 没有任何合作关系,但对这款工具的表现非常认可。很多朋友正好咨询怎么在 Next.js 下实现身份验证,这篇文章专为解决问题而来。
深度学习与Python
2023/09/08
1.6K0
如何在 Next.js 全栈应用程序中无缝实现身份验证
搭建前端监控,如何采集异常数据?
前两篇,我们介绍了为什么前端应该有监控系统,以及搭建前端监控的总体步骤,前端监控的 Why 和 What 想必你已经明白了。接下来我们解决 How 如何实现的问题。
杨成功
2022/09/22
2.1K0
React服务端渲染与同构实践
前两年服务端渲染和同构的概念火遍了整个前端界,几乎所有关于前端的分享会议都有提到。在这年头,无论你选择什么技术栈,不会做个服务端渲染可能真的快混不下去了!最近刚好实现了个基于 React&Redux 的同构直出应用,赶紧写个文章总结总结压压惊。
IMWeb前端团队
2019/12/04
1.2K0
面试官:说说React-SSR的原理
所谓同构,简而言之就是,第一次访问后台服务时,后台直接把前端要显示的界面全部返回,而不是像 SPA 项目只渲染一个 <div id="root"></div> 剩下的都是靠 JavaScript 脚本去加载。这样一来可以大大减少首屏等待时间。
beifeng1996
2022/10/10
2.3K0
微前端说明以及使用
·  原理是通过在主应用引入每个子应用的入口文件(main.js),进行解析,并指定渲染的容器
Dawnzhang
2022/05/10
1.2K0
微前端说明以及使用
ColyseusJS 轻量级多人游戏服务器开发框架 - 中文手册(系统保障篇)
快速上手多人游戏服务器开发。后续会基于 Google Agones,更新相关 K8S 运维、大规模快速扩展专用游戏服务器的文章。拥抱☁️原生? Cloud-Native! 系列 ColyseusJS
为少
2021/05/27
8.3K0
ColyseusJS 轻量级多人游戏服务器开发框架 - 中文手册(系统保障篇)
Serverless|Framework——图文玩转 AWS Lambda
| 好看请赞,养成习惯 你有一个思想,我有一个思想,我们交换后,一个人就有两个思想 If you can NOT explain it simply, you do NOT understand i
用户4172423
2020/10/23
2.7K0
Serverless|Framework——图文玩转 AWS Lambda
推荐阅读
相关推荐
Next.js基础教程:入门与实战
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档