多人开发的大型项目是什么样子的

本文出自一朋友之手,算是他的工作总结。文尾会附上原文地址,以便某些图片链接失效时查看所用。

自学前端的小白从来都是个人开发,最多上传一下git仓库。有一天如果我需要一个帮手,[好吧]组件化,让他不要动我的,开发完了再合。。。

前不久进入了某厂项目组,亲身体验了几次繁复的开发流程。感觉自己像一个茹毛饮血的原始人学习文明社会的规则。

开发前的准备

涉及真正的多人开发,多数人都是平等的开发者,“我为什么要帮你合代码,帮你调试”组长 更懒得管这些。所以用GIT来规范化流程,大家来维护一套代码,每个人为他的提交负责。那针对开源项目和企业项目两个场景,用git做库管理有什么区别呢?

开源项目

img

开源项目开发流程.png

开源项目个人开发者没有操作项目代码库master的权限,如此操作在项目代码库每个人的每一次优化只有一次记录,记录树比较清晰。

企业项目

img

企业项目开发流程.png

企业项目个人开发者有权限操作master分支,特点就是每一次优化的和并提交将其中的无用commit都携带(比如test1、test2)。master的权限带来巨大改变,因此需要一些约束。在master分支的时候一定要慎重,因为master的代码随时可能被张三李四等人获取,如果蕴藏一个影响业务逻辑的bug。。。。对于无用的commit要在merge前rebase清理干净。

测开利器CI

CI全称Continuous Integration,中文名持续集成,还是不知道是啥。它主要分为自动化构建和单元测试,两部分,我主要体验了自动化构建。我们拿到了一个项目代码要下载依赖、dev开发、build打包。。。这是在我们的开发电脑上,如果是一台素昧平生的测试服务器呢?OK,远程连接然后做这些,那前后端联调要部署很多次的,如果是项目上线面对服务器群呢?CI可以帮我做这些,我需要的就是修改配置文件,来告诉CI我这次想在远程对项目做什么(比如更新哪个目录的内容、静态资源打包吗?映射到本地吗?),然后git push 一下,CI就开始工作了,中间如果出现错误CI主动发邮件提示我。

发布上线

这几天遇到的名词,总结一下。
全量发布:就是我有20台服务器,20台服务器都发布。
灰度发布:就是我有20台服务器,发两台体验一下,比例由大家讨论指定。
无损发布:这是比较难解释。我用银行柜台举个例子。银行正常运转,每一个柜台都有人排队,此时经理要找每个柜员谈重要的事(比如季度考核)。所有柜员一起溜了,银行就关门了。需要一个平滑的策略让柜员逐个撤出前台,无损发布就在做这个。A柜员前面不要增加排队的人了,处理完目前几个人的业务就可以撤了。
还有关于发布顺序的不同场景的处理不同:
要增加一个按钮,后台也增加一个服务:要确保用户看见按钮的时候是可以点的,所有后台服务先上线,前端服务后上线。
要删除一个按钮,后台也下线一个服务:要确保用户看见按钮的时候是可以点的,所有前端服务先上线,后台服务后上线。

静态资源更新

下面的部分和工作流程没有关系,只是介绍静态资源更新变成现在这个样子的原因。

index.60a31.js中间的一串字符是什么?干什么用?

  1. 茹毛饮血


上面的语句再常见不过了,我将有这句的html文件放在云服务器上,做好静态资源分发,index.js就到手了。
然而对于公司(要恰饭的),每一次用户请求都发送一次,不能这么挥霍宝贵的带宽,因为运营商是按峰值收费的。

img

按峰值收费.png

解决这样的问题运用http缓存就好了。把一次完整的请求变成协商缓存304或者直接变成本地缓存的200,过期时间足够长。 那么怎么更新资源呢?

  1. 刀耕火种

img

image.png

每一次在我们的资源后面加上版本号就好了,那么问题是如果三个文件我只改了一个,要全部更新吗?要解决这种问题,必须让url的修改与文件内容关联,也就是说,只有文件内容变化,才会导致相应url的变更,从而实现文件级别的精确缓存控制。因此利用 数据摘要要算法 对文件求摘要信息,摘要信息与文件内容一一对应,就有了一种可以精确到单个文件粒度的缓存控制依据了。好了,我们把url改成带摘要信息的:

img

image.png

  1. 农业文明
    大型的互联网公司是有CDN保管静态资源的,而且是CDN网络(想象通信分级网络、计算机网络,长得差不多)。而有的CDN是不识?后面的内容的。而且后面会提到CDN静态资源更新,有的运营商手里把持CDN,他的CDN还总不更新。

img

image.png

所以终于变成了index.60a31.js这还带来了另外一个好处,index.js有能力变成多个版本,老用户也能找到合适他的资源。

问:那CDN上的东西不是越积越多,清一下换成新的呗?
答:会越积越多,但是存储较带宽还是很廉价的。我们一般不尝试删CDN的东西,因为有人需要它,一个js css 才多大。

CDN更新策略

前面说CDN有一组网络,最上面的是源CDN,下分各级
回源策略:用户访问时逐级上查,向源的方向探查,获取更新。
推送策略:源CDN发通知,使各级CDN来获取更新(大版本会如此)。

转载至Atlas_lili的同名博客。