简介: 岳赢平台的JS-SDK是如何满足业务监控的需求的呢?如何才能更合理的设计JS-SDK呢,一起来了解下把,我来为大家讲解一下关于如何入手js框架?跟着小编一起来看一看吧!

如何入手js框架(如何打造一款标准的JS-SDK)

如何入手js框架

简介: 岳赢平台的JS-SDK是如何满足业务监控的需求的呢?如何才能更合理的设计JS-SDK呢,一起来了解下把

0 前言

本文主要介绍如何基于JavaScript来开发SDK,任何基于JS的场景都可以用类似的思路来解决,无论是移动端H5还是服务端纯NodeJS。文中会提及一些设计原则以及实现技巧,并结合 岳鹰全景监控平台SDK 这个实际案例来展示如何应用它们。

1 SDK是什么

SDK全称是“Software Development Kit”,直译就是软件开发工具集。说的再通俗点就是一个面向开发者,针对特定领域的软件包。比如 Java SDK(JDK),就是一个Java领域的软件包。基于它,开发人员就可以快速构建自己的Java应用。比较规范的SDK一般都会包含若干的API、开发工具集和说明文档。

JS-SDK也无外于此,不过鉴于JS语言本身的特性,基于Ta封装的SDK更多常见于UI组件库、统计分析、web服务接口封装、前端稳定性和性能监控等场景。上一小节提到的 岳鹰全景监控平台SDK 即属于前端稳定性和性能监控这一领域范畴的SDK。

2 设计原则

如何设计SDK,其实更多取决于你的场景,或者SDK最终的用途。比如实现一个给网页调用的SDK与用于服务端的SDK就有明显的差异,但这之间确实存在着一些共通的原则,或者方法论:

进一步阐述,即我们打造的SDK要符合以下的要求

2.1 满足功能需求

SDK一般都是偏于面向某个领域,所以,同时在设计和实现的时候明确职责和边界很重要,同时还应该足够精简,专注领域内的业务。

2.2 足够稳定2.3 少依赖,易扩展3 如何实现

下面我们将通过剖析 岳鹰前端监控SDK 的设计过程,来看看上述的设计原则是如何应用到实际的开发过程中的。

3.1 明职责,定边界

前面章节提到, 岳鹰前端监控SDK 是前端稳定性和性能监控的SDK,主要面向前端H5领域。因此,稍加分析即可得出以下结论

上述监控内容实际上都相对独立,因此我们可以把Ta们横向划分为如下几大部分:

明确了SDK的边界以及各部分的职责,结合前端监控的特性,我们可以开始设计SDK的整体框架了。

3.2 筑框架,夯基础

俗话说千里之行始于足下,因此筑牢基础十分重要。总得来说,我们需要做好下面几点

import wpkReporter from 'wpkReporter' // CommonJS const wpkReporter = require('wpkReporter') // AMD,requireJS引用 require.config({ paths: { "wpk": "https://g.alicdn.com/woodpeckerx/jssdk/wpkReporter.js", } }) require(['wpk', 'test'], function (wpk) { // do your business })

乍看有点眼花,但事实上今时今日的前端工程领域,已有很多利器可以帮助我们达到目的。比如 webpack,通过简单的配置就可以构建出一个UMD的bundle。

module.exports = { output: { filename: '[name].js', path: `${__dirname}/dist`, globalObject: 'this', library: '[name]', libraryTarget: 'umd' } }

综上,我们可以通过 webpack将 SDK构建为一个UMD bundle,这样可以自动适配所有形式的模块。同时我们也将同时提供 CDN和 NPM两种引用方式,给用户更多选择。

一般重大的变更才会触发主版本号的更替,而且很可能新旧版本不兼容。次版本主要对应新特性或者较大的调整,因此也有可能出现breakchange。其他小的优化或bugfix就基本都是在补丁版本号体现。看到此处,是否有点似曾相识的感觉?没错,所有NPM模块都遵循语义化版本规范,因此结合第一点,我们可以将SDK初始化为一个NPM模块,结合webpack的能力就可以实现基础的版本管理及模块构建。

wpk.report(logData) wpk.reportJSError(error) wpk.reportAPIError(apiData) // 配置变更 wpk.setConfig(data) // SDK诊断 wpk.diagnose() // 添加插件 wpk.addPlugin(plugin)

总结接口的设计原则,如下

参数尽可能适用 Object封装

3.3 领域分析,模块划分

定边界的时候,我们已经清楚划分了SDK的几个关键的部分:全局异常、API异常、页面性能和白屏,实际上监控SDK通常也会内置对页面流量的监控,以方便用户对异常的影响面做出评估。这几个核心的关键组成部分,每一块都对应一个专业的领域,因此对应到SDK也是每一个独立的模块。除了这些核心的偏领域的模块,SDK还需要有更基础的与领域无关的模块,包括SDK内核(构造方法、插件机制、与下游服务的交互、上报队列机制、不同环境的管理等等)和工具类库。我们可以先看一下岳鹰前端监控SDK最后的整体模块划分:

3.4 测试覆盖,线上无忧

SDK是一个基础服务,相对于前台业务而言可能更底层些。其影响面跟应用的范围是正比的关系,更多的用户意味着更大的责任。所以SDK的质量保障也是很重要的一个环节。岳鹰前端监控SDK的质量保障策略很简单,只有两条

事实上,除了核心接口,工具类库的所有功能我们都实现了 100%的单元测试覆盖,我们采用的前端测试工具是轻量好用的 Jest 。

test('isError: real error', function () { var err = new Error('this is an error') expect(util.isError(err)).toBeTruthy() })

3.5 细节打磨,极致体验

<script> !(function(c,i,e,b){var h=i.createElement("script");var f=i.getElementsByTagName("script")[0];h.type="text/javascript";h.crossorigin=true;h.onload=function(){c[b]||(c[b]=new c.wpkReporter({bid:"dta_1_203933078"}));c[b].installAll()};f.parentNode.insertBefore(h,f);h.src=e})(window,document,"https://g.alicdn.com/woodpeckerx/jssdk/wpkReporter.js","__wpk"); </script>

4 结语

实际在SDK的设计和开发过程中,要处理的问题还远不止本文所述的内容,比如 NPM模块开发时本地如何引用,构建的bundle大小如何调优等等。不过还是希望阅完此文,对你有所启发。同时文中若有不对之处,还望不吝赐教。

,