前端上线部署最佳实践

这是一个很有趣的,感觉和前端这个领域不太搭嘎的话题,今天这个话题主要是聊聊利用我们前端相关的解决方案来解决前端开发和相关上线发布优化的复杂问题。其实开启工程化始祖应该是facebook。

ok,那么接下来我们从最基本的技术原理开始讲起吧。

 

让我们从最先最原始的前端开发入手。如上所示是一个index.html页面与一个样式文件a.css,我们可以用我们最熟悉的文本编辑器进行编码,然后本地测试,再将代码直接上传至服务器,这样就算上线发布完成了。是不是觉得很easy呢?

接着,我们用浏览器看看线上的页面,一切正常,好的,完美上线!

但是,但是,在一些大公司的话,因为考虑到各种页面访问相关的指标,你觉会知道,前端也不是这么随意的。

很容易可以看出,a.css这个文件每次访问都需要重新reload一下,这种情况在访问量大的网站是不可想想的,因为很烧带宽,我们最好是像下面这种情况:

这里使用了浏览器的304本地缓存,然而304还是需要和服务器链接一次,我们现在想做到一次都不访问,像下面这样个样子:

这里强制让浏览器使用本地的缓存,不和服务器连接。这样的页面优化几乎是达到了极限了。但是如果想让缓存更新怎么办呢?

估计很多人都会知道这样的一个做法:改变一下资源的路径,浏览器就会加载新的资源了。像下面这样:

 

每次上线的时候,将文件文件的地址更新一下就行了。当然,这样又会遇到新的问题:

 

比如页面里有3个外部css文件,在某次迭代中只修改了a.css文件,但是将所有链接地址都改了,那么就会让另外的两个文件缓存也失效,是不是有点浪费贷款了呢。

那么并着精益求精的精神,我们可以让文件的url和文件变更建立某种联系,就是说,如果某个文件内容变更了,就会相应的改变其url地址,这样就让变更加的精准了。

那么,要采取什么方式与文件变更相关联呢,我们可以很容易想到的是文件数据摘要算法 对文件算摘要信息,那么文件的内容就和得到的摘要信息唯一对应了,那么就有了精确到一个文件粒度的控制根据了。现在我们将url地址变成其内容的摘要信息:

 

这样如果文件有变更,那么就变更文件对应的URL地址了,是不是感觉这样非常的ferfect呢。

但是事情还没完呢,大家都知道现在的互联网公司为了提升自己网站的加载速度,通常会将相关的静态资源放到CDN服务上,网页中的静态资源也会变成CDN的部署地址:

 

当然,在我们想要变更静态文件的时候,也一定会将相关的资源url变更,就像下面这样:

 

现在是这样的,我们同时改变了html和页面的静态资源的url地址,现在要上线了,那么我们是先发布html页面呢,还是先发布我们变更后的静态资源呢?

:这样的话,在二者部署的时间期间内,假如有新的访问,那么html页面将加载的是就的静态资源,浏览器将会把这个旧的资源当成新的资源缓存起来。那么就导致:用户看到的是一个乱的网页,除了强制刷新,否则在资源失效之前一直都是这样的样式错乱的页面。

:这样呢就会导致在这二者部署的期间内,具有旧静态文件本地缓存的用户,因为浏览器会取本地的缓存,那么这样页面就是正常的。到那时如果哪些本地没有缓存的用户访问时,结果就是页面访问的是新版本的静态资源,那么页面就会错乱了。

那么,既然先部署那一个都会出问题,那怎么办呢?现在很多访问量不大的网站,就是在半夜或者凌晨偷偷的线上静态资源,然后上页面,问题比较少。

但是呢,有些访问量巨大的项目,就没有所谓的访问低谷期了,所以怎么办呢?

这个难解的问题就是 覆盖式发布 造成的,我们用待发布的资源去替换 已经发布的资源,那么就会出现这种情况。那么怎么解决呢?其实我们可以用 非覆盖式的发布方式:

 

如图所示,我们用文件的摘要信息对静态文件来命名,然后将摘要信息放到资源文件要发布的路径之中,如此,变更之后的文件旧成了一个要发布上线的文件了,并不会覆盖已经上线的静态资源文件。上线发布的时候,先进行完全部署静态资源文件,然后在进行页面的灰度部署,这样的方案就比较的perfect了。

因此,有些公司静态资源优化的习惯,基本上需要满足下面几个原则:

设置比较长的本地缓存 —— 提高性能,节省带宽

利用摘要信息进行文件变更依据 —— 缓存的精确控制

将静态资源部署到CDN节点上 ——节省网络请求

利用非覆盖式发布来更新静态资源 —— 渐进替换

那么,这一整个流程下来,就是一个相对比较perfect 的解决办法了。

 

最后,现在我们知道饿怎么优化前端工程里的静态资源部署的难题,那么新的issue又来了,那就是前端工程师怎么去coding呢?

那么要想理解优化和工程相融合的思维方式,那么就会衍生出一系列有关模块化开发、资源的加载、资源合并、前端架构等等的工程相关的问题。上面只是抛砖引玉,解决方案才是关键,但是这又要一大堆篇幅才能说明白了。

总结:前端性能优化就是一个工程化的问题。

上面的不是个人臆想的,我们可以看看百度或者facebook的页面和静态资源的一些原始代码,看看人家的资源引用的处理方式,还有网络资源缓存控制的方案。就知道人家是工程化是怎么样的一个水准了。

这里比较推荐大家多关注一下前端工程相关的一些东西,或者有些人觉得我的产品规模很小啊,不用这么认真吧,然而你也不大后那天你确实需要这样做了呢。而且如果我们能将工作做的更好那么,为什么不去做的更完美一些呢?

另外要注意的是,不要觉得这些应该丢给后端或者运维去做。你要想想,如果什么难题都让别人解决了,那么我们前度工程师的角色价值会大打折扣。

 

原文链接:https://kuaibao.qq.com/s/20180925G11DO800?refer=cp_1026

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
前端项目部署上线的具体步骤可能会因为项目的不同而有所差异,但是下面是一个通用的流程: 1. 选择合适的服务器:选择一个适合你项目需求的服务器,可以是云服务器、虚拟主机或者其他托管服务提供商。 2. 准备服务器环境:在服务器上安装所需的环境,包括操作系统、Web服务器(如Nginx或Apache)、Node.js(如果项目需要)等。 3. 构建项目:在本地开发环境中使用构建工具(如Webpack、Parcel、Gulp等)构建你的前端项目。这将生成一个可部署的生产版本。 4. 上传项目文件:将构建好的项目文件上传到服务器上。可以使用FTP、SCP或者其他文件传输工具进行上传。 5. 配置服务器:根据你的项目需求,对服务器进行配置。这可能包括设置域名、配置SSL证书、配置反向代理等。 6. 运行项目:在服务器上启动你的应用程序。如果是基于Node.js的项目,可以使用PM2或者其他进程管理工具来守护进程并保持项目的持续运行。 7. 测试和验证:访问你的应用程序,在浏览器中进行测试和验证。确保一切正常运行,并解决可能出现的问题。 8. 监控和维护:设置适当的监控和日志记录机制,以便及时发现并解决潜在的问题。定期进行维护,更新项目依赖和修复漏洞。 9. 域名解析:如果你使用的是自定义域名,需要在域名注册商处进行域名解析,将域名指向你的服务器IP地址。 10. 高可用和负载均衡(可选):如果需要更高的可用性和负载均衡,可以考虑使用负载均衡器或者容器编排工具。 请注意,这只是一个基本的部署流程概述,实际操作可能会有更多细节和特殊情况需要考虑。在部署过程中,确保项目的安全性、性能和可用性是非常重要的。所以建议在部署之前充分了解你的项目需求,并参考相关文档和最佳实践来进行操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值