Core
ACTIVE

INITIALIZING..._

STATUS: ONLINE
Mem Usage: 20%
SECTION: LOG
LATEST_LOGS

9.9/月!独立v4香港2c2g轻量,7inet新年活动

超值的配置?2c2g硬盘40,10mbps水管还不限制流量!并非oneman idc。。

GTX460 WHDI显卡:昙花一现的无线未来

为什么我要重写本站

大概是两三天前吧,duckxu发给了我一个挺有意思的网站。

从Include地狱到可维护:我是如何构建起这个博客

一开始动手写博客的时候,我其实根本没考虑过设计好架构。 直到我看到了一大堆的Include和Require,堪比数学难题还棘手的时候。 ## 阶段一:IF?ELSE. 我其实动手用php写博客是很早之前的事情了,大概是一两年前,那时候是受了xiobb自写博客的启发。 说真的,我真不太愿意提起那段时间写的代码,具体表现如下: - 无尽的If elseif else地狱 - 难以理喻的目录结构 - 到底在引用什么css…… 我只有一个目标:让用户在访问url的时候,能把内容输出出来就行。 具体的代码都存在我那台老台式的机械硬盘上,现在再大费周章翻出来给大家看恐怕是不太可能了。 我那时甚至连router是什么都不知道。我只会if else。 ~~~php $dir = $_GET['page']; if($dir == 'xxx'){ require_once('...'); }elseif{ ... }else{ ...404 } ~~~ 复现大概如此。 页面之间互相require,文件头部的include满天飞,用的还都是相对路径。我真不知道我是这么在文件地狱里面一个个为引用指路的。 您猜怎么着?文章存储在txt文档,甚至得用html写好,而不是优雅地处理markdown文件。 最后,我看到那入口文件一坨屎的时候,我已经不敢动项目了。 ## 阶段2:Typescript?YES! 嗯,虽然和标题关系可能有点远,但是,这是我唯一一次的成功。 受群友yzcf的启发,我去学了Typescript,发现和PHP有点像,索性用ts尝试开发博客。 [https://github.com/mvocp/PersonalSite](https://github.com/mvocp/PersonalSite) 这个阶段距离首次尝试开发也有很长一段时间的距离。 文章显示逻辑处理方面,由于没有使用mysql这么方便的东西,我只好用github静态存储文章,通过markdown解析器解析出html输出。 那么问题来了,我们要考虑长远,因此需要考虑文章太多对性能的影响。显然有个索引是最好的解决方法,可我懒得去一个个添加索引呢,于是我就使用了Github Action在每次对文章仓库Git Push的时候生成索引。反正Action的服务器配置很劲爆。 具体存储在这里:[https://github.com/mvocp/blog-posts](https://github.com/mvocp/blog-posts) next.js确实是一个优秀的框架,但是,对于一个小博客来说,体积貌似还是有点**太大了**。 ## 阶段3:Using MVC. MVC模式。 ![img](https://media.rinthx.dev/img/20260120_335904.png) > MVC模式(Model–view–controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。 > MVC模式最早由Trygve Reenskaug在1978年提出[1],是施乐帕罗奥多研究中心(Xerox PARC)在20世纪80年代为程序语言Smalltalk发明的一种软件架构。MVC模式的目的是实现> 一种动态的程序设计,使后续对程序的修改和扩展简化,并且使程序某一部分的重复利用成为可能。除此之外,此模式透过对复杂度的简化,使程序结构更加直观。软件系统过 > 对自身基本部分分离的同时也赋予了各个基本部分应有的功能。专业人员可以依据自身的专长分组: > 模型(Model) - 程序员编写程序应有的功能(实现算法等等)、数据库专家进行数据管理和数据库设计(可以实现具体的功能)。 > 视图(View) - 界面设计人员进行图形界面设计。 > 控制器(Controller)- 负责转发请求,对请求进行处理 > ——维基百科 这太伟大了。 MVC可以将各个功能分离,让项目变得更加容易维护,这也正是我需要的。 第一次认识MVC模式是在读一本ThinkPHP的入门书籍的时候,我深深地被其魅力吸引,于是想尝试使用其开发。 很快,我意识到了,ThinkPHP是适合中大型项目使用的框架,对于一个博客来说太大材小用。 于是我将目光转向CodeIgniter。 ![img](https://media.rinthx.dev/img/20260120_399315.png) 这也是我选择使用CI的原因。 很快,第一个作品就被生产出来: ![img](https://media.rinthx.dev/img/20260120_889418.png) 由于我把页面输出逻辑写的太死,导致我想优化的时候发现无从下手。 - 新增一个页面,我需要添加多个文件 - SEO优化如同地狱一般难搞 - 404逻辑都处理不对 还是如同地狱一般,况且不只是我写得烂,是用这种方式迟早会烂。 ## 阶段4:Why not? 我需要一个真正的路由。 我需要让它能尽可能优雅地处理请求。 我需要它尽可能方便维护。 我需要让它最小化。 我必须否定“我要上大框架”用的错觉。 ## 阶段5:Did it. 我的设计原则: - 所有入口只有一个(index.php) - URL 只解析一次 - 页面文件不再互相 require - 路由表是“可读的结构”,不是 if/else 简单用伪代码叙述就是: - 解析 path - match 规则 - dispatch 到 handler 也许,我需要自建一个虽然不是那么聪明,但是极易维护和重构的框架。 我不需要中间件、依赖注入、各种奇怪的小魔法。博客不是商业项目。 ![img](https://media.rinthx.dev/img/20260120_524601.png) 我做到了。 我简单的设计了一个view.php用来render,一个不到100行的router来解决基本请求问题,同时在输出文章的时候通过控制器来自动优化SEO。 代码文件总体积也是从惊人的48M降低到了就比typecho大一点的0.9M。 - ## 尾声 手写一次,比看10篇教程有用。 架构不是一开始设计出来的,而是问题逼出来的。