前端资源加载是前端一个经常谈论的话题。过去我们主要依赖浏览器的默认行为,但这种默认行为往往对缓存的利用率不够。对于一个经常改动发版的页面,我们希望每次上线时,尽可能利用缓存,降低资源发布时给用户带来的加载延时。因此,我们开始研究如何更好地结合现代浏览器的缓存设施,对资源进行增量更新。
增量更新说白了其实就是给老文件打上一个增量补丁,使其变成新文件。补丁本身是一个微型的 DSL(Domain Specific Language),我们的资源加载器对其进行解释,即可完成打补丁的过程。补丁文件的体积通常不会很大,理想情况下补丁的大小接近我们实际更新的字节数,因而比传统的全量更新在下载上更有优势。
尽管打补丁过程的性能开销很低,但补丁的生成却要消耗大量的服务器资源。对于目前动辄数百 KB 的静态资源,补丁的生成成为了我们要考虑的一个大问题。在高峰时段,用户对补丁的需求量大增,很容易令我们服务过载瘫痪。过去我们主要通过缓存和服务限流来解决这一问题,虽然有一定成效,但我们希望做的更好。
在调研中,我们发现 Go 语言高并发、高性能、易于开发的特性,对于我们的场景非常合适,因此便产生了使用 Go 语言研发新一代增量更新服务的想法。在实践过程中,我们既享受着 Go 语言特性带来的便利,同时也经受着它的一些缺点,逐渐发展出了自己的一套 Go 语言最佳实践。
本场 Chat 从以下一个方面进行分析讲解:
作者简介:洋河,2013年加入携程 UED 实习,参与研发了人生中第一个星数超过100的 GitHub 开源项目。2014年加入小米云平台,同时负责网页前端开发、客户端开发及路由器固件开发,积累了丰富的端开发经验。2017年加入美团,现负责金服平台基础组件的开发工作。
绑定成功
预订达标,作者开始写作
审核未达标,本场 Chat 终止
审核达标,文章发布
审核未达标,本场 Chat 终止