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

2023-07-06 08:46:56 +08:00
 MFWT

背景

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

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

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

设想

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

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

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

一些疑惑之处

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

望不吝赐教

4842 次点击
所在节点    程序员
63 条回复
MFWT
2023-07-06 10:45:48 +08:00
@Rache1

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

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

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

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

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

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

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

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

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

https://kelovp.tech
zzzmh
2023-07-06 14:20:14 +08:00
如果你会 go 的话,推荐用 go 写后端,效率比 php 所谓的 8~9 秒快很多很多
另外 md 转 h5 有个快速的方案,我目前在用,zzzmh.cn ,就是后端给前端 md ,前端用 js 做 md2h5 ,配合好的话还是飞快的,而且压力全部给到客户端 chrome ,服务器飞快。
duke807
2023-07-06 14:34:00 +08:00
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