0%

Angular、React 和 Vue 的大流行导致现在越来越多的 Web 项目以单页面应用(SPA)的形式进行发布。

在前端文件的缓存方面,由于我早先是使用 PHP + Riot.js 的组合,虽然也是单页面应用,但主入口由 PHP 提供,默认就不缓存,所以只需在 nginx 中将所有静态文件强制缓存到客户端就行。

而换到 Node.js + Vue 之后,主入口换成了 index.html,并且和其他静态文件一起都是通过 express.static 提供给客户端的,所以要针对性处理才能同时满足性能和功能方面的要求。

记得之前有一次搞过头,把 index.html 也缓存了,从而影响到前端的正常更新,最终只能改回默认的缓存规则。为了尽可能加快用户访问速度,又不把事情搞砸,今天终于静下心来对其进行了合理的优化。

阅读全文 »

两年前(2018年),在使用 PostGrahphile 一段时间后,打算总结自己在实践中的经验,于是陆续用数周闲暇时间,写了 《PostGrahphile入门》 一文。止于2019年4月18日,完成了预计的7个章节中的前5部分,今年想要继续时,发现其中多处已跟不上最新的发展,而自己的认识也已更进一步。遂计划重来一版,先将原有部分翻新,再补上缺失的后两章。用每周更新的博客形式呈现,初步估计需要3个月左右。如果顺利,再花2-3周做成完整的电子书,最后定期迭代,使其紧跟技术更迭和个人认识的发展。

阅读全文 »

一套环境通常不会只部署一遍,你会遇到各种需要重复部署环境的情况:也许是一个项目需要多台服务器来运行;也许是同时需要管理多个项目;也许是需要生产环境和开发、测试环境的一致性。总之,掌握高效的方法和工具是非常必要的。

这周我来讲讲自己在服务器环境部署上经历的四个阶段,以及选择背后的原因。

上周讲了服务器系统的选择,这周回来继续讲软件版本的选择,更具体一点来说是服务端运行环境中软件版本的选择。

每个人遇到的情况不同,做出的选择也不同,所以这个问题并没有标准答案,而会是一些方向性的思考。

我的出发点是让尽量少的人来维护尽量多的项目,所以得出的结论可能会和网上常见的文章不同。

就让我学学《程序员修炼之道》先给出一个一般性原则:

Tip
出于减少开发和维护成本的目的,必须减少组件数量,如果组件数量无法减少,就减少它们组合的数量。

这里的组件是一个非常宽泛的概念,既可以指操作系统,也可以指编程语言里面用到的包或库,还可以指数据库、缓存这样独立运行的应用。

这是一个寻找最大公约数的过程。

阅读全文 »

CentOS 8 生命周期的突然缩短,让我再次面对服务器操作系统的选择。

如果你使用一个公司的产品,但不向他付钱,那么你就只是用户,而非客户。网游行业的从业经验又告诉我,不付钱的用户是产品的一部分。

Red Hat 决定将 CentOS 8 的支持周期将从原来预计的 2029 年缩短到 2021 年年底,并劝大家都去用 CentOS Stream,或者买他们家的商业服务,就是一个很好的例证。原来的 CentOS 用户,现在要么选择成为 Red Hat 的编外测试人员,为他们的商业客户提供价值,要么选择成为“氪金玩家”。

商业行为毕竟不是慈善事业,我们没啥好说的,只是又到了做选择的时间。

阅读全文 »

久仰其大名,今年第二版面试,终于买来一本,五百页,断断续续三个月读完。

本书推崇的核心理念被简称“ETC” —— Easier to change ——即软件从设计到编码,首先要考虑“容易变更”,作者云全书其他方法皆是此原则的特例。在我看来其观点与《简约之美》异曲同工,后者写成一本书,只为教给读者一个“常识”,就是软件项目想持续成功,唯一重要的就是“降低维护成本”,至于如何实现,草草带过了,毕竟全书正文不足百页。现在看来,答案自然就是“容易变更”。

这一对比,更凸显《程序员修炼之道》的特点——“务实”。全书给出整整 100 个“提示”,供读者参考。若与读者日常工作方法直接对比,确实能揭示不足,指明提高的方向。其中部分是我日常已有感受,却无法言明的,一旦点破有豁然开朗之感;另有部分是针对一个问题,已经想过几条路可试,却没来得及逐一实践去验证各自优劣的,作者直接给你摊开了一一剖析,读后亦有收获。

当即发愿要按图索骥,查漏补缺。但果真做成待办事项,样样力求完美,估计三年也未必能把勾打满。这时只能说句“进一寸有一寸的欢喜”。

与很多“N 条”、“N 个”开头的文章类似,此书也稍稍有凑数之嫌,最后两章比如测试部分给出的“提示”明显密集了,虽不至于不负责任,但着眼点显然更小了,和前面的不在同一个重量级。

总体而言,此书读一遍,可在心中种下一些理念的种子,遇到合适的场景能时时想起就会有所受益。但要实现其完整价值,必须多看几遍,至少拆开来再细细看一遍,看一部分,就花点时间去项目里实践几个“提示”,吃透了,再往下看一点,循环往复,才算物尽其用。

年前搬了家,过完年就想把资料整一下。结果手痒把路由器玩坏了,只好重头刷了一遍。四五年没玩这些,好多东西都忘个精光,做完才想起以前就是这么搞定的,这次得记上一笔,免得下次尴尬。

阅读全文 »

上周又做了一次在浏览器中播放视频流的项目,不过以前做的是手机,这次做的是桌面。停车场出入口的摄像头作为源头提供RTSP协议的视频流,而浏览器不能直接播放,只有通过插件或者转码来实现这个需求。

要实现这个目的,可以采用的方案非常得多,有商业的也有开源的,这里主要列举一些开源的方案。

阅读全文 »

这几天做了一个停车场的项目,出入口的相机会拍照并保存在前端的机器里,也就是收费岗亭里的那台电脑。当一个收费站有两个出入口时,照片分布在AB两台机器中。当你需要调取照片时,有可能在A机器中,也可能在B机器中。

为了能够统一的调取照片,利用 nginx 的反向代理把两台电脑的目录整合成了一个整体,对外使用一个入口。如果把电脑看成硬盘,那就是实现类似 RAID 0 的读取效果。

阅读全文 »