随着互联网开发和迭代速度越来越快,网站也变得越来越庞大,存在大量静态资源,我们原有管理静态资源的方式变得越来越不适用,就如同封面图一样,静态资源之间的关系错综复杂,给工程师带来了很多麻烦:
1、人工管理依赖的噩梦,工程师需要频繁管理和维护每个页面需要的 JS & CSS 文件,包括静态资源之间的依赖关系以及加载顺序等。
2、性能优化成本高且不可持续性,为了提高网站性能,工程师总是在忙于优化页面静态资源的加载,包括动态加载静态资源、按需加载静态资源和修改静态资源合并策略等,但是过了一段时间性能又降下来了,又需要周而复始的重复。
3、静态资源差异化的挑战,PC和无线的适配,不同的网络和终端需要适配相应的静态资源;当网站需要支持国际化的时候,需要对不同的国家进行差异化处理,返回不同的静态资源,这些需求对原有的静态资源管理方式提出巨大挑战。
4、缺少快速迭代和试验新功能的有效支持,从开发到上线流程繁琐,导致项目迭代周期长。
每天工程师都会提交大量的 new feature/bug fixes,每次项目发布和迭代都面临着以上的问题,是否可以有一套系统帮助我们管理/调度静态资源来减少人工管理静态资源成本和风险,来达到更快、更可 靠、低成本的自动化项目交付。在实际项目开发中,我们进行了大量探索和试验,实现了一套 “静态资源管理系统”,对静态资源进行全流程的管理和调度:
1、帮助工程师管理静态资源间的依赖以及资源的加载。
2、管理静态资源版本更新与缓存,自动处理CDN。
3、自动生成最优的静态资源合并策略,实现网站自适应优化。
4、实现静态资源的分级发布,快速迭代,轻松回滚。
5、根据国际化和终端的差异,送达不同的资源给不同的用户。
静态资源管理系统的核心是对静态资源进行调度,可以很灵活的适应各种性能优化和差异化处理的场景,来达到更快、更可靠、低成本的自动化项目交付。但是同时这个系统十分复杂,承载着各种职责,这个系统本身会成为整个网站的关键节点和瓶颈。