关于OctoberCMS和ProcessWire的一些使用心得

由于我对UI设计有着强烈的追求,在探索流行的开源项目会第一考虑感官感受,这就像相亲时对面要是一无法直视的人你肯定无法继续下去。

ProcessWire

先说说10年前碰到的ProcessWire(PW)吧,截至发文日,PW应该是我使用最久的一款CMS,从过去看文档在社区寻求帮助到自食其力,从下载使用官方的Module到后来自己开发Module,日复一日年复一年,家有菜鸟成长记。

记得当年打开PW官网就对它的界面非常有好感,在安装上打开后台就被惊艳到了,后台非常简约有化繁至简的设计哲学,后来又去研究了一下创始人Ryan,原来他是个老程序员兼设计师,当设计和开发结合在一起就诞生出了这种优质的项目。

ProcessWire的后台非常简洁
ProcessWire的后台非常简洁

ProcessWire起初官方给它的定义是CMF(内容管理框架),后来可能由于Framework听上去给人的感受是门槛高,于是后来官方又改成了CMS(内容管理系统),期间我用它做了大量的项目,不限于各类应用系统、数据中心(Api接口)、网站(站群)甚至是前端静态文件的管理系统,可谓是能想到的应用ProcessWire都能做到,在官方的Case Studies中惊艳的项目案例也是相当多,如线上购物数据APISPA服务端 etc.

ProcessWire的优点

上手简单,实在太简单了,PW提供了一套非常好用的API,上文提过的化繁至简的设计在PW上发挥的淋漓尽致,就从业务处理部分说,一切都围绕$Page$Pages这两个对象来展开活动,本身以命名规则来看它就非常易读,$page就是单页面,$pages就是多页面,它的数据处理也特别易理解:

  • 读取$page数据 $page->get("field|field1"),也可以直接$page->field
  • 写入$page数据
    $p = new Page();
    $p->parent = "/parentPath/";
    $p->template = "templateName"
    $p ->title = "Title";
    $p->name = "PageName"
    $p ->body = "Content";
    $p ->of(false);
    $p ->save();
    $p ->of(true);
  • 使用$pages调用数据列表
    $results = $pages->find("parent=/parentPath/, sort=-id, limit=10");
    foreach($results as $p){
        echo "<li><a href='{$p->url}'>{$p->title}</li>";
    }

是不是可读性非常强?非常易于理解

ProcessWire的缺点

起初ProcessWire的数据表是我眼前一亮的设计,在后台每一个field实际上在数据库里就是一张数据表,所有的field表都用pages_id做关联,这种设计的灵活性和PW搭配大放异彩,但同时这种底层数据库设计也使用了大量的Group联表分组查询,系统在创建数据默认的使用存储引擎也是MyISAM,这和系统这种设计也是密不可分的,由于我使用了阿里云的RDS,而阿里的RDS只支持InnoDB引擎,当我的PW系统有几万条Page的时候在做数据列表查询的时候会很慢很慢,慢到我无法接受。这也是至今我使用PW遇到的唯一瓶颈。这个锅也不应该全部由PW来背,我喜欢压榨硬件,那款RDS配置本身就很低,还挂了20多个数据库。

解决方法这类数据查询慢的问题办法也很简单

  1. 对于数据实时性要求的场景最简单粗暴的办法就是提高数据库配置,相对于PW的便捷的快速开发节省下来的时间来说硬件上的额外投入不算什么。
  2. 使用Cache缓存数据,PW系统自带了Markup Cache模块来优化性能,我是用的是phpFastCache来完成的,它既可以缓存页面也可以缓存SQL查询。

很喜欢Facebook的那句“doing is better than perfect”(完成大于完美),对于项目我们首先考虑的应该是完成,而不是完美,在业务发展成型之际再考虑优化项目不迟。你能在世上找到的任何项目都有它的缺点,不管在搜索引擎中输入一个项目名 + VS,下拉框都会有它的竞争对手出现,这不,再有不到一个月都2022年了,依然还有人在吐槽Github Stars排名第一的php框架Laravel的性能差。

黑马 OctoberCMS

大概前几年接触了OctoberCMS,但是由于历史原因一直没有在生产环境中正式使用,它基于Laravel开发,本身更像是把框架开发的那一套流程用UI来实现了,在OctoerCMS的后台你就可以自由地进行数据表设计,创建ModelViewController,当然了除了使用系统后台自动化的开发设计外你也完全可以在开发工具中像Laravel框架开发那样来完成,由于它的可控面太多,这也意味着学习门槛要陡了不少,我个人还是不建议新手使用的,记得网上有句话说“OctoberCMS程序员的玩具”,这话一点没错非常认同,以我来看使用OctoberCMS至少熟悉一款PHP框架,了解MVC开发理念以及前端CSS框架、jQuery等技术的掌握。

OctoberCMS后台可以管理数据表/Model/Controller

和ProcessWire一样它的OctoberCMS的UI设计也很惊艳,但是OctoberCMS基于Laravel开发框架,它更像是高阶版的开发框架,其底层设计却和PW大不相同,特别是数据表的设计更符合我们传统的数据表设计理念,SQL查询无需频繁连表查询,性能也不在话下。

OctoberCMS大多开发设计工作都可在后台完成极大程度方便了开发者,而且只要你有一个可以访问Internet的浏览器,你便可以在线上随时随地进行开发工作,而不像传统的开发框架依赖开发环境和IDE,系统内置了录入数据需要的各种字段类型的表单如text, richeditor, markdown editor, code editor, select, option, textarea等等,而数据展现使用的是twig模板语法,也非常强大。

未来新项目会优先使用OctoberCMS,哦对,准确的讲是开源版的OctoberCMS - WinterCMS

ProcessWire和WinterCMS(OctoberCMS)的区别

  1. PW支持MySQL/MariaDB,而WinterCMS除了MySQL系之外还支持SQLitePostgreSQL
  2. PW的数据表设计在InnoDB引擎下性能会有所影响
  3. 两者都有对应的扩展机制(应用商店),PW叫Module,而WinterCMS叫Plugin
  4. PW比较容易上手,而WinterCMS上手难度大
  5. WinterCMS基于Laravel框架,目录结构更清晰适合构建大型项目

Post Comment