关于我的博客

March 11, 2017

建立这个博客的初衷是用来分享和记录我的想法,同时希望这些内容能帮助到需要的人,另一方面,这里也是我的技术实验室,很多技术相关的 idea 会在这里进行实践应用。

主要用到的技术栈:

  • Node.js
  • PostgreSQL
  • GraphQL
  • React
  • TypeScript
  • JSON Web Token

技术栈转变历程 🤖

stage 1 (2016-2017)

这是最初版本,传统的 MVC 模式,统计了一下大概 2000 行代码实现了前端到后端的 CRUD

  • Handlebars.js
  • MongoDB
  • gulp

这个阶段的代码是非常简单清晰的,对于一个简单的应用来说也可以了,虽然它并不容易做组件化和工程化。

stage 2 (2018)

17年开始,我刚好在当时的公司推动前后端分离,当时花很多精力做了一套 React 服务端渲染框架来支持前后端分离,成功把手头的两个项目从 MVC(Laravel + jQuery + React) 迁移到了 React SSR。

有了这次在生产环境的成功案例,加上工作上写了快两年 React,这个时候再来看 Handlebars.js 这种模板语法就很难接受了(由俭入奢易,由奢入俭难)

并且在这个时候我切身体验到了 MongoDB 的一些体验性问题,比如说,相比 PostgreSQL 和 MySQL 它并没有一个我个人觉得很好用的 GUI,整体周边生态感觉要比关系型数据库落后不少。

基于上述背景,我决定将博客系统的技术架构调整为这样:

  • 传统 MVC 改为前后端分离,API 和页面渲染拆分为两个独立的服务
  • 支持 React 服务端渲染,在浏览器端过渡为 SPA (兼具 SEO 和用户体验)
  • MongoDB 替换为 PostgreSQL

整个改造过程大慨用了一个周末加几个晚上,这次重写博客系统的时候顺便单独写了一套 React SSR 工具链 发布在 NPM 上,方便我其他的 Side Project 复用这套工具链。

改造好之后,给我最大的感受就是从农业时代的刀耕火种进化到了工业时代,同样的功能用不同的技术方案去做,开发效率和体验是有非常大差距的。

stage 3 (2018)

想切换到 GraphQL 的主要导火索是因为发现了 REST API 在字段调整上的不便之处,抱着爱折腾的态度,入坑了 GraphQL,此时主要新增了以下技术栈:

  • graphql-yoga
  • React-Apollo

graphql-yoga 使用下来也发现了个别蛋疼的问题(比如默认 host 是 0.0.0.0 用户不能更改,为了安全在生产环境还得自己用 iptables 关掉对应端口的公网访问权限),并且相关的 PR 在 github 上一直没有被通过,后续准备替换掉它。
React-Apollo 使用久了也发现不少问题(它会增加不必要的复杂性,对 React 新版本适配也不够快),最终在 2020 年的时候删掉了它,替换为了自己的方案。

Features 🚀

  • Mobile First (核心功能支持移动设备)
  • 实时 CRUD
  • 代码自动格式化和高亮(现在会使用 Prettier 保持统一的风格)
  • 一系列高性能优化
  • 文章权限区分公开和私有
  • 全文 RSS(Atom 协议)
  • SEO 优化

本文原载于:baiyun.me

原文链接:https://baiyun.me/my-first-blog

若有收获,就点个赞吧