揭秘Boblog

   这我半年来一直都在关注PHP技术,本来自己不太喜欢PHP,但是却莫名其妙地对PHP产生了兴趣。今天晚上有空,就来研究了一下一直被我视为谜一样的程序的BoBlog,一方面是为了学习PHP,另一方面,也为将来可能在PHP平台进行开发打下基础。
    Boblog是一款单用户多人博客程序,基于PHP+MySQL,在国内使用较为广泛。在ASBLOG2.0发布以前,我也曾使用过Boblog,个人感觉,Boblog功能强大,易于扩展,用户体验和效率协调较好。在一定程度上,Boblog几乎做到了完美,完成如此强大的功能,仍然具有直追 ASBlog3内核预览版的效率,实在是令我深感佩服。因此,Boblog对于我来说,一直是一个谜。这么长时间以来,我一直没有时间研究Boblog的代码,今天终于有机会了。
    用户体验
    从安装Boblog到深入使用Boblog,一直都很顺利,没有遇到任何不爽。 Boblog给我的印象,很低调,很和谐。登录后台虽然没有ASBlog酷酷的LightBox效果,但整个过程给人很舒服的感觉。UI设计很好地考虑到了人机关系,即使是初次使用,也能很快上手。虽然功能繁多,但没有任何一个地方给人赘余或者凌乱复杂的感觉。同时UI做工相当精细,除极个别错误外,系统几乎难察任何不爽。如果给Boblog评第一印象分,我给9分。
    系统功能
    不能不说Boblog的强大功能,对照Web2.0关于Blog的功能要求,Boblog几乎是涉及最齐全的程序了,包括RSS订阅、XML-RPC接口、TAG、导入导出、保存日志、WAP、Trackback等等。可以这样说,目前没有任何运行在ASP平台上的Blog程序完全具有以上功能。当然,Boblog仍然存在不足,即不能生成静态。其实这对于BoBlog来说并不是一个弱点,因为它的负载能力足以应付单用户博客的需求,同时,还可以使用伪静态,因此生成静态对于Boblog其实是可有可无。
    可扩展性
    Boblog的可扩展性很好,至少在我使用它的3个月里,安装几乎所有的插件都没有修改过代码,其可扩展性可见一斑。这也是我最为疑惑的地方。
    揭秘疑惑:从代码开始
    Boblog的文件结构还算清晰,通过理顺分析后,找到如下几个重点文件:
    index.php  首页文件
    global.php  全局文件
    inc/db.php  数据库访问函数
    inc/boblog_class_run.php  系统运行类
    应该说,Boblog没有像样的系统架构模型,我们把它可以看作面向过程架构。index.php相当于控制器接口,用户的绝大多数请求是通过此文件调用相应文件或过程完成响应的。global.php包含了系统初始化过程、基本函数库,inc/db.php包含了数据库访问函数,inc /boblog_class_run.php包含了系统类、模板类、日志类。
    BoBlog的大体执行过程如下:
    首页包含global.php,从全局文件开始过程。全局文件首先检查安装文件是否被删除,确保系统安全。然后,开始向客户端发送特定的HTTP头信息。同时,开始初始化系统。包括加载设置文件、程序文件、语言资源文件等等。以上动作完毕,开始检查加载文件的完整性,包括设置项是否齐全、来路是否正确等等。随后,系统开始加载模板。在BoBlog中,模板是以变量的形式储存在PHP文件中的,由于PHP支持动态包含,所以Boblog可以轻松地读取用户 cookies设置,决定加载哪一个模板。这种动态包含,不仅读取效率高,而且代码简单。随后系统开始进行基本信息加载和用户访问的处理。根据用户的身份令牌加载用户权限组缓存文件,记录处理用户在线情况(使用文件记录),加载日志分类缓存文件。此时全局文件中的公共过程已经执行完毕,转为首页文件处理。首页文件首先对请求类型进行分析,确定一些系统杂项的数据,然后开始加载模板信息,开始模板分析。同时,根据动作参数,决定加载系统具体模块,包括系统内建模块和用户插件模块,这也是为什么Boblog能够不必修改任何代码而实现插件功能的愿意,基本原理很简单,还是PHP的动态包含。完成这些任务后,页面动态部分已经被加载完毕了,随后系统将处理侧栏模块,方式和也依然依靠了PHP动态包含功能。最后,完成head区添加、bottom区添加、运行时间和系统查询添加后,系统开始输出,其中还有根据设置进行GZIP压缩的部分。这样,Boblog就完成了一次处理应答。
    当我们了解这一过程后会发现,其实Boblog的工作并不复杂,甚至非常简单。它能够实现如此强大的功能,很大程度上是依赖PHP的强大支持,对比 ASP,PHP便具有了先天优势。另外,代码简单也非常好地提高了系统效率,因为毕竟单用户博客并不需要完成很多很复杂的功能,忽略复杂的系统架构反而更有利于系统效率的提高和系统的维护。当初未见Boblog代码时,一直以为Boblog一定具有如三层架构、MVC架构这样严谨的架构模型,而经过分析却发现,Boblog系统异常简单,简单到让人吃惊。这应该提醒我们,简单的代码才是最好的代码。这次Boblog探秘,再一次证明了我的追求:“以最少的代码最高的效率完成最多的工作”。
    这对于开发人员是一个启示,一方面要求我们调节好用户体验与功能的关系,另一方面要求我们思路要开阔,不要把简单的问题复杂化,就像大自然的规律一样,简单的才是最好的。