sdk 设计中那些比较优雅的思路
首先介绍下一个现代化的 SDK
应该具备什么能力:
- 同步加载/异步加载
- 补偿机制
- API 降级
- ...
当然可能有很多,咱们只列举几个核心的内容。
这里咱们拿字节跳动旗下的 火山 Finder
为案例:
<script>
// 此段代码的作用是将SDK主文件未加载完成时,业务代码中调用的API依次进行放到数组q中缓存,等待SDK主文件加载完成后,再取出,并执行。
(function(win, export_obj) {
win['LogAnalyticsObject'] = export_obj;
if (!win[export_obj]) {
var _collect = function() {
_collect.q.push(arguments);
}
_collect.q = _collect.q || [];
win[export_obj] = _collect;
}
win[export_obj].l = new Date();
})(window, 'collectEvent');
</script>
<script async src="https://lf3-data.volccdn.com/obj/data-static/log-sdk/collect/5.0/collect-rangers-v5.1.12.js"></script>
模拟执行下浏览器的运行:
在内部的 SDK
还没有加载完成时,咱们做了参数以及内部方法的收集。
等待 SDK
加载完成后再做内部事件的时序执行,以及 事件拆分
。
- 这里的事件拆分大概指的是,不在内置范围的事件名都算是上报事件。
以上便是 SDK
设计中相对比较巧妙的一种设计思路了,希望对你有帮助~