
<?xml encoding="utf-8" ?><html><body><p><img src="https://img.php.cn/upload/article/000/000/024/639049d00b6e2986.jpg"></p><p>埋点一直是 H5 项目中的重要一环,埋点数据更是后期改善业务和技术优化的重要基础。【推荐学习:web前端、编程教学】</p><p>在日常的工作中,经常会有产品或者业务的同学来问,“这个项目现在有哪些埋点?”,“这个埋点用在哪些地方?”像这样的问题基本上都是问一次查一次代码,效率很低。</p><p><img src="https://img.php.cn/upload/article/000/000/024/b1ae3e12d6825e38133f043c90773a44-0.png" alt="" loading="lazy"></p><p>这也许跟埋点本身的性质有关系。埋点属于相对独立的功能,随着迭代的进行,开发者很难记住埋点的用途。开发者出于自测验证的需要,也得对项目中的埋点数据加以整理。因此结合当前的场景,可以实现一个工具:通过对代码进行扫描,分析埋点相关的代码,并对之加以处理,转化成特定的数据,供后续在其他的管理平台中使用。</p><p>这个工具大致可以分成三个部分,JSDoc 提取埋点、路由依赖分析和 ESLint 插件。</p><ul><li>JSDoc 是根据 JavaScript 中的注释信息,生成 API 文档的一个工具。结合 JSDoc 的这一个特性,这个埋点工具把 JSDoc 作为核心部分,用于输出代码中的埋点数据。</li><li>Webpack 插件作为辅助,为 JSDoc 提供路由信息。</li><li>ESLint 插件则作为最后的检验,确保文件中的埋点代码都有对应的 JSDoc 注释。</li></ul><p><img src="https://img.php.cn/upload/article/000/000/024/b1ae3e12d6825e38133f043c90773a44-1.png" alt="" loading="lazy"></p><p>我们知道,JSDoc 可以根据代码中的注释输出一份文档。首先我们自定义一个 JSDoc 的 tag 来标注这是一个埋点的注释,这样后续处理时可以过滤掉其他注释的干扰。结合具体项目中使用的代码可以画出这样一个流程图:</p><p><img src="https://img.php.cn/upload/article/000/000/024/127a4401567827c172df4a65d8c780f6-2.png" alt="" loading="lazy"></p><p>下面是具体的代码实现的过程。</p><p>编写 JSDoc 插件,自定义一个 tag:</p><p>解析 .ts 和 .vue 文件。</p><p>自定义 JSDoc 模版。</p><p>到这里,已经可以完整地输出代码中的所有埋点了。此时再来看下目前这个工具的能力:</p><ul><li>自动提取埋点信息,生成埋点文档:✅</li><li>自动给埋点注释添加自定义 tag(@log):❌</li><li>自动给埋点注释添加上报的埋点信息:❌</li><li>自动给埋点注释添加路由信息:❌</li><li>自动给埋点注释添加埋点描述信息:❌</li><li>自动提示没有注释的埋点代码:❌</li></ul><p>通过上面的梳理我们可以看出:</p><ul><li>需要手动给每个埋点加上注释</li><li>需要手动去查每个埋点所对应的路由</li><li>如果忘了给埋点加注释怎么办?</li></ul><p>做这个工具的初衷,就是为省去一些重复繁琐的工作,如果为了能自动从代码中输入一份文档而增加了其他一些工作量,这未免有点得不偿失。通过对这些问题的分析,可以得出以下的解决方案:</p><ul><li>需要手动给每个埋点加上注释 -> 自动填充代码 -> ESLint fix 功能 / VSCode 插件</li><li>需要手动去查每个埋点所对应的路由 -> 自动找到组件所对应的路由 -> Webpack 依赖分析</li><li>如果忘了给埋点加注释怎么办?-> 忘写注释有提示 -> ESLint 插件</li></ul><p>到这一步解决问题的方法就已经变得明朗了。接下来让看一下 webpack 插件与 ESLint 插件的实现过程。</p><p>webpack 本身自带依赖分析,轻松就能拿到组件间的父子关系。</p><p>把组件之间的依赖关系拼成我们想要的数据格式</p><p>组件之间的依赖关系有了,接下来就是找到组件和路由的对应关系,这里我们用 AST 来解析路由文件,获取路由和组件的对应关系。</p><p>同样地,把组件与路由的映射关系拼成合适的数据格式。</p><p>再将路由的映射关系和组件间的依赖关系整合到一起,得出每个组件与路由的对应关系。</p><p>因为使用 AST 遍历的方式来解析路由文件,目前支持的解析的路由文件写法有以下四种,基本上满足了当前的场景:</p><p>再得到了上面的对应关系之后,可以把埋点数据放到传到埋点管理平台上,从而实现一键查询:</p><p><img src="https://img.php.cn/upload/article/000/000/024/4ff9ea1194153bba696c37a5d1ff9ebc-3.png" alt="" loading="lazy"></p><p>先来看看代码中埋点上报的三种方式:</p><p>观察上面三种方式,可以知道埋点上报是通过 track 函数和 SensorTrack 函数,所以我们的 ESLint 插件对这两个函数进行校验。</p><p>看下完成后的效果:</p><p><img src="https://img.php.cn/upload/article/000/000/024/27237dae1a957b82797cc8a3daf64a35-4.gif" alt="" loading="lazy"></p><p>我们再来对比下优化前后的区别:</p><div><thead></thead><tbody><tr><td>自动提取埋点信息,生成埋点文档</td><td>✅</td><td>✅</td></tr><tr><td>自动给埋点注释添加自定义 tag(@log)</td><td>❌</td><td>✅</td></tr><tr><td>自动给埋点注释添加上报的埋点信息</td><td>❌</td><td>✅</td></tr><tr><td>自动给埋点注释添加路由信息</td><td>❌</td><td>✅</td></tr><tr><td>自动给埋点注释添加埋点描述信息</td><td>❌</td><td>❌</td></tr><tr><td>自动提示没有注释的埋点代码</td><td>❌</td><td>✅</td></tr></tbody></div><p>优化之后除了整个流程基本都由工具自动完成,剩下一个埋点描述信息。因为埋点的描述信息只是为了让我们更好地理解这个埋点,本身并不在上报的代码中,所以工具没有办法自动生成,但是我们可以直接在产品提供的埋点文档中拷贝过来完成这一步。</p><p>在项目中接入这个工具之后,可以快速地知道项目的埋点有哪些以及各个埋点所在的页面,也方便我们对埋点的梳理,同时利用导出的埋点数据开发后台应用,有效地提升了开发者效率。</p><p>这个工具的实现是在 JSDoc、webpack 和 ESLint 插件的加持下水到渠成的,说是水到渠成是因为一开始的想法只是做到第一步,先有个一键查询功能和能够输出一份文档用着先。但是第一版出来后发现要手动去处理这些埋点注释还是比较繁琐,恰巧平常开发中常见的 webpack 插件和 ESLint 插件可以很好地解决这些问题,于是便有路由依赖分析和 ESLint 插件。像是《牧羊少年奇幻之旅》中所说的,“如果你下定决心要做一件事情,整个宇宙都会合力帮助你。”</p><p>【推荐学习:web前端开发、编程基础视频教程】</p></body></html>
讯享网
前端入门到VUE实战笔记:立即学习
讯享网<br>>在学习笔记中,你将探索 前端 的入门与实战技巧!</p></blockquote>

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/205293.html