首页 > 其他分享 >可观测性之浅析系统中sdk的不同引入方式的利与弊

可观测性之浅析系统中sdk的不同引入方式的利与弊

时间:2024-01-27 16:04:32浏览次数:23  
标签:初始化 方式 cdn js 利与弊 引入 浅析 sdk

眼看要下班了,但是今天一篇文章也没有写,草稿箱还有之前就想写的sdk的引入方式的详细文章,但完全写完还要好久,我可以先写一份浅析出来。于是就有了本文,本文写作耗时15分钟,阅读完需要10分钟。

本文首发于掘金,文章前提是不考虑sw的方式引入,同时不考虑在nginx等自动注入js脚本的方式,那么基本就是两种大的形式:cdn引入和本地引入

  1. 其中cdn引入有两种:
  • cdn同步
  • cdn异步
  1. 本地引入有两种:
  • npm
  • 本地js文件

参考知识

提前先补充一张图片

可观测性之浅析系统中sdk的不同引入方式的利与弊_数据

正文

npm引入

npm引入方式,其实是将sdk作为依赖包,编译到组件或者js中。

那么根据引入的时机的不同,所以编译到哪个js文件(因为组件也可能是打包成js文件),我们是不知道的,尤其是组件化诸如vue、react均带有自己的生命周期。

可观测性之浅析系统中sdk的不同引入方式的利与弊_前端_02

所以选择了这种引入方式的弊端,可能就是vue、react的代码引入之前,因为sdk收集数据的原理的不同,是可能无法收集错误、资源信息、用户行为,而且引入sdk后,还要有sdk的解析和初始化,这些都排在了html解析--》生命周期---》dom构建,尤其对于在csr(客户端渲染)的架构方式,大多以前端发起api请求数据后才会在页面渲染数据,更容易出现白屏或者性能问题,其中csr的渲染示意图如下图所示:

可观测性之浅析系统中sdk的不同引入方式的利与弊_数据_03

所以以vue为例,更推荐在dom构建之前,(如vue在beforeCreated这个生命周期),也就是更早的引入sdk并初始化,因为sdk能监听dom的变化,所以在dom形成前对dom进行监听,能收获更多、更准确的性能数据。

不过这种引入方式,有一个很大的好处,就是在引入包后,可以直接调用初始化方法,对页面性能的影响相对更小或者可以忽略,不过也要考虑业务场景,也不完全保证不影响页面性能。

cdn的引入方式

此处不做cdn的详细解释。

可观测性之浅析系统中sdk的不同引入方式的利与弊_初始化_04

cdn异步

cdn引入方式,尤其是异步对页面影响最小,这种情况会出现如果调用初始化函数,则因为变量不存在会出现报错的场景,所以必须将初始化函数包裹在onReady函数中。

同时,在初始化前,虽然pv、uv等数据不受影响,但是因为sdk数据收集原理的缘故,尤其对于ssr(服务器渲染)的架构,这期间的错误、资源加载数据和用户行为肯定是无法收集的。ssr的示意如下图所示:

可观测性之浅析系统中sdk的不同引入方式的利与弊_生命周期_05

cdn同步

这种cdn引入方式,对于想要收集所有用户数据是最合适的,sdk会在同步下载后执行,保证收集所有的错误、资源、和用户行为。

不过这可能影响页面性能,这要根据业务场景来确定,更稳妥的是在入口页的head头部进行引用,不过好消息是,cdn都有一定的本地缓存,所以对页面性能的影响可以是微乎其微的。

其他

当然,也有一种方案,就是将sdk放到服务器或者本地文件中,这是最不推荐的业务场景,除了本身无法保证sdk的npm引入方式中增加包体积外等的弊端之外,还可能影响加载速度,而且错过了cdn的好处,不过对于私有化部署这种场景,不推荐以npm包的方式引入,可以选择将sdk在公共头部以js脚本的方式引入,同时根据需求采用同步或者异步方式。

总结

本文讲解了在可观测系统中引入rum sdk的不同方式以及利弊,可以按需权衡。

标签:初始化,方式,cdn,js,利与弊,引入,浅析,sdk
From: https://blog.51cto.com/u_12003135/9443869

相关文章

  • 得物开放平台接入得物SDK
    得物开放平台接入得物SDK......
  • TimeZoneDetectorService浅析--上
    一:问题描述:客户有一个关闭通话功能的需求,根据MTK的配置方法关闭了大概8个宏开关后,实现通话功能,但是导致插好sim卡开机后,时间和时区不能更新的问题。二:问题分析:(1).MTK的日志分析,可以确认为时间已经更新,但是时区确实是没有更新//收到NITZAT:[0]AT<+CTZEU:"+32",0,"2024/01......
  • 虹软sdk实现人脸识别小demo
    虹软官网:https://ai.arcsoft.com.cn注册后,下载适配的sdk注意提取下载的sdk中的jar包,代码中需要用到<dependency><groupId>com.arcsoft.face</groupId><artifactId>arcsoft-sdk-face</artifactId><version>3.0.0.0</version><scope&......
  • uniapp微信小程序接入高德地图SDK
    小程序地图SDK原理(注意:这一段要仔细看哦,很多人问我为什么你写的是高德地图SDK,却用的是腾讯地图,答案就在这里)微信小程序开发,可以使用地图组件map,来进行地图显示、定位、显示大头针等基本功能,具体可以看官方文档:微信小程序map组件。map组件只提供一些基本的“硬件”,还需要“大脑......
  • 浅析vue cli的webpack配置属性 devServer 详解 和 devServer.proxy 工作原理解析
    浅析vuecli的webpack配置属性devServer详解和devServer.proxy工作原理解析:https://blog.csdn.net/qq_47443027/article/details/125985081?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-0-125985081-blog-127746519.235^v......
  • [转帖]MySQL多版本并发控制机制(MVCC)-源码浅析
    https://zhuanlan.zhihu.com/p/144682180 MySQL多版本并发控制机制(MVCC)-源码浅析前言作为一个数据库爱好者,自己动手写过简单的SQL解析器以及存储引擎,但感觉还是不够过瘾。<<事务处理-概念与技术>>诚然讲的非常透彻,但只能提纲挈领,不能让你玩转某个真正的数据库。感谢c......
  • 【OpenCV】:浅析 OpenCV 中的图像数据结构 Mat
    以下内容主要来自OpenCV中的mat.hpp这个头文件关于MatMat是OpenCV中用来存储图像数据的基础数据结构,原话是Itcanbeusedtostorerealorcomplex-valuedvectorsandmatrices,grayscaleorcolorimages,voxelvolumes,vectorfields,pointclouds,tensors,......
  • 解决方案 | AutoCAD 版本+版本号+受支持的 .NET SDK版本+.NET Framework版本
    关于Managed.NET兼容性Managed.NET应用程序通常与扩展基于AutoCAD的产品的行为和功能的公司和第三方应用程序关联。在移植到最新版本后,并非所有.NET应用程序都可以正常工作。.NET应用程序的兼容性在各版本之间可能随时更改,以利用最新的.NETFramework和Auto......
  • Rocketmq学习3——消息发送原理源码浅析
    一丶概述RocketMQ消息发送的原理流程可以分为以下几个步骤:1.创建生产者在发送消息前,客户端首先需要创建一个消息生产者(Producer)实例,并设置必要的配置参数,如NameServer地址、生产组名称、消息发送失败的重试次数等。2.启动生产者创建生产者后,需要调用启动方法来初始化生产......
  • 基于开源IM即时通讯框架MobileIMSDK:RainbowChat v11.0版已发布
    关于MobileIMSDKMobileIMSDK是一套专门为移动端开发的开源IM即时通讯框架,超轻量级、高度提炼,一套API优雅支持UDP 、TCP 、WebSocket 三种协议,支持iOS、Android、H5、小程序、Uniapp、标准Java平台,服务端基于Netty编写。工程开源地址是:1)Gitee码云地址:https://gitee.com/ja......