设计背景
源于当时负责的一个官网主页的全新项目,由于官网类型的项目业务逻辑简单,主要是静态内容的展示,同时需要考虑到 SEO,所以很适合将这类应用的服务端设计成一套通用的解决方案,加快同类型应用开发的效率。
设计原则
- 简单:在满足业务需求的前提下尽量简单,不引入功能重复的模块
- 通用:与业务解耦,使得同类型的项目能够通用。
技术选型
服务层:NodeJS(基于koa),轻量的前端服务,实用,够用。主要用于处理网络请求,管理路由。
静态文件管理:使用 koa-static,简单易用,不需要自己去处理不同类型的静态文件,提高前端生产力。
服务端渲染:使用 ejs 模板引擎,实现多页面相同组件的复用,同时满足 SEO 需求。
环境区分:根据
NODE_ENV
环境变量动态更改资源路径,区分开发、测试和线上环境,方便开发。进程管理:使用 PM2 管理 Node 项目,便于线上发布,以及应对故障自动重启。
相关优化:图片使用 TinyPNG 进行压缩(gulp 插件:gulp-tinypng)、静态文件存放 CDN 加速、使用 Webpack 打包压缩代码。
进阶:使用 docker 容器服务,简化配置,高效部署。
目录结构
1 | . |
技术架构图
相关
The Benefits of Server Side Rendering Over Client Side Rendering