前端监控:别等用户告诉你应用崩了

前端监控:别等用户告诉你应用崩了

毒舌时刻

这代码写得跟网红滤镜似的——仅供参考。

各位前端同行,咱们今天聊聊前端监控。别告诉我你还在等用户截图告诉你应用崩了,那感觉就像等邻居来告诉你你家着火了——能知道,但已经晚了。

为什么你需要前端监控

最近看到一个项目,生产环境崩溃了 3 小时,开发团队却一无所知。我就想问:你是在做应用还是在做猜谜游戏?

反面教材

// 反面教材:没有监控 // components/Checkout.jsx export default function Checkout() { const [loading, setLoading] = useState(false); const handleSubmit = async () => { setLoading(true); try { await api.checkout(); // 成功处理 } catch (error) { // 只在控制台打印错误 console.error('Checkout failed:', error); // 显示错误信息 setError('支付失败'); } finally { setLoading(false); } }; return ( <button onClick={handleSubmit} disabled={loading}> {loading ? '支付中...' : '支付'} </button> ); } // 错误只在控制台,开发团队看不到 // 用户遇到问题只能截图反馈 

毒舌点评:这代码,错误只在控制台,你是在写应用还是在玩捉迷藏?

前端监控的正确姿势

1. 错误监控

// 正确姿势:Sentry 错误监控 // src/utils/errorMonitoring.js import * as Sentry from '@sentry/react'; export function initSentry() { Sentry.init({ dsn: 'YOUR_SENTRY_DSN', integrations: [ new Sentry.BrowserTracing(), new Sentry.Replay() ], tracesSampleRate: 1.0, replaysSessionSampleRate: 0.1 }); } export function captureError(error) { Sentry.captureException(error); } export function captureMessage(message) { Sentry.captureMessage(message); } // 使用 // components/Checkout.jsx import { captureError } from '../utils/errorMonitoring'; const handleSubmit = async () => { try { await api.checkout(); } catch (error) { captureError(error); setError('支付失败'); } }; 

2. 性能监控

// 正确姿势:性能监控 // src/utils/performanceMonitoring.js import { getCLS, getFID, getFCP, getLCP, getTTFB } from 'web-vitals'; export function initPerformanceMonitoring() { getCLS(console.log); getFID(console.log); getFCP(console.log); getLCP(console.log); getTTFB(console.log); } // 集成到 Sentry import * as Sentry from '@sentry/react'; export function sendToSentry({ name, delta, id }) { Sentry.metrics.distribution(name, delta, { tags: { id } }); } getCLS(sendToSentry); getFID(sendToSentry); getLCP(sendToSentry); 

3. 用户行为监控

// 正确姿势:用户行为监控 // src/utils/userMonitoring.js import * as Sentry from '@sentry/react'; export function trackEvent(eventName, data) { Sentry.captureEvent({ message: eventName, extra: data }); } export function trackClick(element, eventName) { element.addEventListener('click', () => { trackEvent(eventName, { timestamp: new Date().toISOString() }); }); } // 使用 // components/Button.jsx import { trackClick } from '../utils/userMonitoring'; export default function Button({ onClick, children }) { const buttonRef = useRef(null); useEffect(() => { if (buttonRef.current) { trackClick(buttonRef.current, 'button_clicked'); } }, []); return ( <button ref={buttonRef} onClick={onClick}> {children} </button> ); } 

毒舌点评:这才叫现代前端,实时监控,问题早发现早解决。

Read more

AI开发之Cursor的下载安装以及Unity-MCP下载安装到你的个人Unity项目中(一)

AI开发之Cursor的下载安装以及Unity-MCP下载安装到你的个人Unity项目中(一)

序言:你想不想做出属于自己的游戏,但是自己的技术能力不行,或者是你想节省时间,想让游戏快速上线,又或者是你不想自己写代码以及操作游戏引擎中的各种游戏资源,接下来的教程就可以满足你的这些需求,让AI自动化开发,你只需要提出需求,让AI自动生成代码以及自动操控Unity游戏引擎中的各种游戏资源,让你在AI时代快速地做出来属于自己的游戏。 一、Cursor的下载安装。 1、进入这个Cursor官网进行下载。 2、安装,按照弹出来的界面不断的点击下一步就行。 3、安装好之后,电脑桌面出现了这个图标就说明你安装成功了。 4、双击这个Cursor图标,打开Cursor编辑器主界面。 二、下载Cursor AI平台提示词并且快速设置 打开这个链接Cursor规则中心下载对应的文件到你的Unity项目中,下载保存到跟Assets目录平级就行,下载保存成功之后,你就能在你的Unity项目资源管理器中看到.cursor这个文件夹,这个文件夹可以加入我们对AI生成代码的一种规则说明,作用是限制AI最后生成的代码,也可以说是一种生成代码规范限制吧。 三、Unity MCP的下载以及安装。

前端缓存策略:让你的网站飞起来

前端缓存策略:让你的网站飞起来 毒舌时刻 前端缓存?这不是浏览器的事吗? "我不需要管缓存,浏览器会自动处理"——结果网站加载慢,用户体验差, "缓存就是localStorage嘛,多简单"——结果缓存管理混乱,内存占用高, "我直接禁用缓存,省得麻烦"——结果每次都重新加载,浪费带宽。 醒醒吧,前端缓存不是简单的localStorage,而是一套完整的策略! 为什么你需要这个? * 性能提升:减少重复请求,加快页面加载速度 * 用户体验:离线访问,减少等待时间 * 带宽节省:减少服务器流量,降低成本 * 可靠性:网络不稳定时仍能正常访问 反面教材 // 反面教材:滥用localStorage function fetchData() { // 每次都从API获取数据 return fetch('https://api.example.

Flutter for OpenHarmony: Flutter 三方库 flutter_cors 应对鸿蒙 Web 与混合开发中的跨域挑战(网络兼容方案)

Flutter for OpenHarmony: Flutter 三方库 flutter_cors 应对鸿蒙 Web 与混合开发中的跨域挑战(网络兼容方案)

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net 前言 在进行 OpenHarmony 的跨平台开发时,我们不仅开发原生 HAP,有时也会涉及 Flutter Web 或是在鸿蒙端侧运行 Webview 混合应用。这时,一个经典的“拦路虎”就会出现:CORS (跨源资源共享) 限制。当你的 Web 端尝试访问一个未配置跨域头部的后端 API 时,请求会被浏览器拦截,报错信息极其晦涩。 虽然 CORS 主要是后端的工作,但 flutter_cors 提供了一种客户端视角的辅助工具。它通过工具化手段帮助开发者分析、绕过或生成跨域适配规则,是保证鸿蒙跨平台 Web 项目顺利运行的调试利器。 一、跨域访问逻辑模型 CORS 是一种浏览器的安全保护机制,它在请求发出前先进行“预检(Preflight)

Docker镜像源中科大配置教程助力GLM-4.6V-Flash-WEB国内部署

Docker镜像源中科大配置助力GLM-4.6V-Flash-WEB国内部署 在当前多模态AI技术快速落地的背景下,越来越多开发者希望将前沿视觉语言模型部署到本地或私有云环境中。然而,一个看似简单却常被忽视的问题——Docker镜像拉取慢,往往成为项目启动的第一道“拦路虎”。尤其是当目标模型来自海外镜像仓库时,动辄数GB的镜像文件可能需要数小时才能下载完成,甚至中途失败。 以智谱AI推出的 GLM-4.6V-Flash-WEB 为例,这款专为Web端高并发、低延迟设计的中文多模态模型,凭借其出色的推理速度和轻量化特性,正迅速成为国内开发者构建图文理解系统的首选。但它的Docker镜像体积较大(通常包含CUDA、PyTorch及完整权重),若不借助加速手段,在国内直接拉取几乎不可行。 幸运的是,我们并非无计可施。中国科学技术大学开源镜像站提供的 Docker Registry代理服务,正是破解这一难题的利器。通过合理配置,原本需要几个小时的镜像拉取过程,可以缩短至几分钟内完成,真正实现“分钟级”环境搭建。 为什么是GLM-4.6V-Flash-WEB? 不同于传统视觉语言模型(