2006年,那个时候还流行《读者》这种杂志,某一期的主题是关于互联网上的个人博客,并且列举了一些知名的站点,这些让还在读小学的我感觉热血沸腾。
我去了网吧登录了当时还没有被封锁的谷歌博客,并且在blogger下注册了一个博客。它的后台允许自己写代码,当然这对当时的我来说更本都看不懂。
后来新浪博客,百度空间,QQ空间开始多了起来,blogger站点也被持续封锁。“个人博客”这个词逐渐变得落伍了,同龄人更喜欢在QQ空间里发表自己的日记或者心情。
但是有一个博客一直是我心里的一个小小的愿望,终于在2014年,我搭建了自己的第一个博客。当时的我还在一家民营出版社做实习生。每天忙于图书校对和各种线下活动中,面对的最多的是一摞又一摞的厚重的书和活动计划。偶然的机会让我了解到网络空间和域名注册,于是搭建了第一个站点,虽然它及其简陋,整个主页就只由一张图片组成,况且那时的我还不懂任何编程语言,所以这个站点仅仅持续了2天就迅速的被我遗忘了。
现在我终于懂了那句话,“你必须非常努力,才能看起来毫不费力”。所有你看起来很流畅的动画效果,你认为理所当然的信息传输系统,都建立在一整套复杂庞大的机制底下。少了某一个关键的螺丝,可能就会让整个结果都分崩离析。
两年的代码学习过程,让我了解到程序们的前世今生。不管是今天存在于我们的手机、平板、智能电视上的APP,还是微信小程序,或者是一个网站,一个系统。他们的运作方式都及其相似。
如果通过经典的MVC理论来看待这些程序,可以很容易看出它们相似的地方。
M(model):模型,或者是数据原形。现在很流行的“大数据”,就是大牛们通过分析这些数据原形,获取某个通用的信息。
V(views): 视图,或者是用户交互界面。俗语曰:“人靠衣装马靠鞍”,一个好的程序也应该有一套好的UI。
C(control):控制器,或者逻辑层。这一部分用来协调用户和程序之间的关系,如:对用户的行为做出反应,对不同的用户展示不同的数据,对数据进行处理,进行数据传输等等。这一部分通常是程序是否稳定可信的关键。
驱动猫
Evink.me最早使用经典的Spring+mybatis+struts2 作为它的驱动器,并且使用了ZK框架作为它的View层。这么做显然有很大的好处,例如开发方便,只需将精力集中于Java代码上,不需要写Html或者css或者js,它将View视图全部交给了java。利用强大的Spring和mybaties,非常容易就能写出一个站点。但缺点也非常明显,ZK框架方便开发之于带来了巨大的副作用,由于使用纯Java代码,每次发生用户事件,都必须像服务器做出一次请求。就连文字变色这种简单的操作也是,如果请求过于频繁,会让我的小服务不时地宕机。另一方面,tomcat消耗了巨大的资源来驱动站点,如果想在服务器端运行其他的程序,还得看这只猫的脸色行事。
几次宕机事件后,ZK框架被我放弃了。使用Html/CSS/Javascript来代替zul页面和它的java控制器,成了一个非常好的选择。比照经典的MVC理论,我将这三者联系为结构、渲染和逻辑的关系。并在此基础上,将tomcat仅作为单纯的驱动器,提供数据处理和资源处理服务。于是就变成了:
html : 结构提供者
css : 界面渲染者
javascript : 逻辑控制者
tomcat : 数据控制者
通过对站点的结构改良,响应速度提升了许多。然而对面服务器端仍然拥挤的空间,我仍想找到一个更轻量的驱动器用以替代这只臃肿的大猫。
为什么是node
Node是最近两年很火的服务器驱动器,提起它会想到许多的关键词,诸如:非阻塞式I/O模型、事件驱动、RESTful路由风格、json、函数式编程等等。它是由脚本语言javascript进化而来,继承了javascript的优点,并且为松散的javascript创造了统一的规则。但是当时php的各种已经优化过的博客框架如wordexpress,给了我很大的吸引力。甚至连后台都有,这才是真正的简单·快捷·方便嘛!而且php经过多年的历练,自身的框架并不比java要少,这也是我想要选择php的原因。但是node.js作为数据控制者,能完美无缝的贴合前端控制器,让我义无反顾的选择了它。
确定node作为站点驱动器后,自然而然就将对javascript更友好的mongodb取代mysql用以存储数据。于是,最终的效果就变成了:
html : 结构提供者
css : 界面渲染者
javascript : 逻辑控制者
node : 数据控制者
其他部分
站点中的大部分 图片/图标 都使用Photoshop /Illustration 制作,某些icon来自easyicon