请教各位大佬的个人博客(或别的网站),使用『内容缓存』的好方法

335 天前
 MFWT

背景

手头有一个写到一半的纯静态博客,由于手动生成 HTML 文件太麻烦,也不好维护,打算改成 PHP 动态生成

当初为什么选择纯静态,原因在于,我考虑着,静态页面对 VPS 的负荷要求应该会低一些(我曾经用过超低配服务器建站,打开 WordPress 都要八九秒那种),但是纯静态页面的一些缺点(比如在线编辑较麻烦,文件内容大量重复等)让我最终选择回了动态页面

诚然,动态页面需要吃服务器资源,但是考虑到我能有的服务器都是『有计算资源,但不强』的状态,因此还是多少想利用下的

设想

博客使用 MarkDown 编写,服务器在保存 MD 原文的同时解析好 HTML 内容(用 ParseDown 库),同样存储起来

访问时,取出正文部分的 HTML ,和其他 HTML 块(比如 head/footer 部分)组合起来后再返回给用户

我设想中的和 hexo 之类的静态博客的区别是,hexo 会预先解析好整个 HTML 页面,但是我的仅仅解析正文部分

一些疑惑之处

  1. 像这样预先解析好一部分内容,对比完全用的时候再解析 MD ,性能节省程度明显吗?
  2. 解析前和解析后的内容都需要存储,那么是写入文件好(可能会有权限问题?)还是在 MySQL 中以 LongText 字段存储好?

望不吝赐教

4534 次点击
所在节点    程序员
63 条回复
MFWT
335 天前
@Rache1

当时是用上海阿里云的学生机,5Mbps 带宽,不过为了免备案,用 SakuraFRP 的线路绕道了日本,再加上全站几乎都是单服务器,包括背景大图也是从这个服务器加载,可能这也是因素之一
MFWT
335 天前
@lete

我现在是考虑『在线编辑』和『写好 MD 再上传』,尽量两种方式都支持,方便选择
Rache1
335 天前
@MFWT 学生机我记得起配好像就是 1C2G5M ,主要在于带宽太小, 跑个 5.5 、5.6 版本的 MySQL 应该没啥问题,就是带宽确实小。
zpf124
335 天前
相对简单的方式,其实是用 github pages ,使用 github action 或者其他 CI/CD 工具。

你直接提交 md 到 git 仓库,对应的 ci 工具检测到代码更改后自动触发生成 html 的流程。
这样你新建以及修改都会立即生成,不需要手动操作,Hexo 也可以用这种方式。
x86
335 天前
装个 WPJAM 该关的关,然后做做 memcached 或 redis 之类就差不多了
wuzhanggui
335 天前
@zhhanging 之前也有人说,我苹果手机看着没啥问题,是电脑吧,没设备复现呐
gps949
335 天前
我还是觉得我这种实践方式挺优的:
https://reurl.cc/qLKZZp

还可以配合 Obsidian 服用
mytsing520
335 天前
国内 ZF 以及大型门户网站的内容,是前后台分离,后台编辑好内容生成静态页直接单向推送到前台
后台有草稿箱机制,如果发布后有问题,那就重新编辑内容后再次发起推送流程,把前台服务器上的静态页面覆盖掉

有 CDN 的话,这些步骤完成之后再到 CDN 上推送缓存刷新,再进一步的话,会调用 CDN 的接口直接让 CDN 刷新缓存
tomiaa
335 天前
@LavaC 肯定啊,我博客开源的,弄了自动化,git 提交上去后自动部署到我的服务器
janus77
335 天前
没这个必要的,生成 html 只是一次性任务,平时访问网站的时候又没有多少负载。你所说的只解析正文部分完全没有必要。
况且按照 hexo 这类框架的主流性能来看,生成整个网站也就一分钟,大一点的就几分钟,这没什么好说的
所以直接生成整站就行了
mudssky
335 天前
有服务器和域名肯定用动态,服务器资源放着浪费。
我目前还是用 github pages ,github actions 自动部署已经很方便了,也不求别人看。单纯满足自己的。
Lax
335 天前
为了“性能”去搞静态化,基本是方向跑偏了。服务器端生成页面的开销,在总延时中的贡献几乎是九牛一毛。
建议先测一测整个链路的延时(因为你访问上海的云服务器但是绕了日本,这个延迟估计 140ms 起步),然后看一下整个页面加载了多少的资源文件( js/css 等)。浏览器中开发工具开瀑布图就知道时间花费在哪里了。
WordPress 性能差众所周知的原因是主程序和插件的资源引用多,可以通过合并请求减少网络交互的深度,从而优化总体的加载时间。

自己写一套真的是劳民伤财,不如直接用现有的基于 markdown 的方案。
不要忘了,写个人博客,核心价值是内容,不是那个页面。
deepzz
335 天前
可以参考: https://github.com/eiblog/eiblog#%E5%8A%9F%E8%83%BD%E7%89%B9%E6%80%A7 ,为了加快加载速度做的优化。
zephyru
335 天前
只考虑两个问题
1 、明显,如果服务器端解析,如果服务器性能不行会有延迟(并发情况下会明显不过一般遇不到),客户端解析,则是看客户端性能。
2 、如果你打算写一套内容系统,可能存数据库会好点(推荐 sqlite 主要好迁移),如果只是单纯的博客,写文件会好点,以后想从动态改静态也可以直接用。

核心,还是你想用 php 实现什么功能,说到底无论是静态生成博客还是动态的 php 博客都有很多成熟的解决方案。
真的想折腾,静态资源上 CDN ,打开速度会快不少。

附上,我的博客 https://saltfish.vip/ 。
最开始使用的 Hexo 部署在 github Page 上。
后面自己用 Nodejs 进行了一些改造 ,买的服务器配置也和你的差不多,5mb 的带宽,不过我备案了。
其中也做了你现在想做的部分,编辑器,pjax ,文件预览,在线热更,预渲染,动态渲染(存数据库和文件也试过),live2d 之类的小插件。
然后服务器到期了,换了现在用的 Typecho ,部署在自己家里的迷你主机里,通过通道服务解析域名。
结论就是,如果只是想写博客,现成的方案会好一些。如果想顺便学点东西,什么想法都试下,会比较直观。
lambdaq
335 天前
静态文件不是吃不吃服务器资源的问题,而是很容易放到 CDN 上去。
MFWT
335 天前
@Lax

嗯,主要是想要减少页面加载的内容,目前的话在保证效果的情况下一个页面几十 KB 就搞定(头像占了一半空间)
mephisto
335 天前
@tomiaa 网站 favicon 有特点
NoString
335 天前
啊?我 1h2c 3mbp 没啥访问了 WordPress 加完 cdn 感觉也还行啊

https://kelovp.tech
zzzmh
335 天前
如果你会 go 的话,推荐用 go 写后端,效率比 php 所谓的 8~9 秒快很多很多
另外 md 转 h5 有个快速的方案,我目前在用,zzzmh.cn ,就是后端给前端 md ,前端用 js 做 md2h5 ,配合好的话还是飞快的,而且压力全部给到客户端 chrome ,服务器飞快。
duke807
335 天前
https://blog.d-l.io/about-zh

我的 blog ,不用数据库,免注冊可评论、删评论,md 写内容,浏览器端渲染,cf cdn ,定期生成快照 照顾部分爬虫

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/954453

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX