iKnowledge 2.0已发布!欢迎访问新版博客:http://zzp.me/
http://redraiment.com 上的博文会逐步迁移到 http://zzp.me/
自从Paul Graham 开发了全世界第一个Web 应用程序Viaweb 之后,应用程序Web化变得一发不可收拾,甚至出现了Web OS 要完全取代桌面应用。主流博客系统中,既有前台展示还有后台管理,能在线发文章、编辑、删除等,什么都做结果什么都没做好。比如上面提的展示形式一成不变、在线编辑器功能单一、误删误改恢复困难等。正因如此,iKnowledge只做一件事——展示。文章编辑、版本控制等工作则交给专业的编辑器和版本控制工具来完成!
现有的博客系统几乎清一色使用数据库保存文章内容,通常还只使用一个字段。且不说性能如何,就使用上也是非常的不方便。诸如批量统计文章行数的功能,不得不写一个程序来解析字段里的字符串;而处理纯文本文件却有一堆现成的命令行工具。再说博客系统的数据通常是一次写入、偶尔编辑、多次读取,即频繁地查询。为了提高性能,又往往对动态页面做缓存处理生成静态页面。既然到头来都是生成静态页面,前面那些琐碎的事情简直是脱裤子放屁多此一举。
根据上面的需求描述,说白了iKnowledge就是左侧树状菜单、右侧选项卡页面的静态页面。为了快速实现这套系统,我选择站在巨人的肩膀上,很多功能使用现成的工具或库。
的确,它很臃肿。所以,非常感谢你耐心地浏览这个被全国99%电脑击败的龟速博客。
JavaScript被称为Web时代的汇编语言,虽然它相较其他高级语言已经灵活很多!Web程序员在经历这么多年的积累和沉淀后渐渐挖掘出一些Web编程的模式,于是有了jQuery等JS库来简化开发,这一飞跃犹如把汇编码中成堆的JNZ、JMP等语句组织成了if、for等C语言控制语句。但这还不够,开发者还得自己定义HTML、设计CSS样式等。于是ExtJS来了,犹如当年Delphi带来RAD的春风一般。它带来的不仅仅是漂亮的界面,还有开发过程的改进:程序员不再需要关心如何定义HTML、怎么写跨浏览器的CSS,只需确定数据展示的形式再调用相应的组件即可。
我有幸从JavaScript一直实践到ExtJS,所以我能体会每一次改进带来的喜悦!回到iKnowledge,正如上面说的,它只是一颗树加一个选项卡。如果从零开始实现,工作量无法想象;即使使用插件丰富的jQuery工作量也不小,何况jQuery的插件往往各自为政,相互协作总会出这样或那样的问题;而使用ExtJS,一切都这么简单!
前端相关的代码都在app这个目录中,整个工程只有32k。
提到树状结构,最常见的莫过于系统的文件目录结构,为什么我们不好好利用呢?iKnowledge就是利用文件目录结构生成左侧分类标签层次结构,转换工作由Rhino(纯Java实现的JavaScript引擎)自动完成。由此可见,iKnowledge是重度依赖JavaScript,无论前端还是后端,无不享受着它的强大与便利。
为了方便在命令行下切换目录,目录名统一用英文,但前端展示我又希望用中文,因此在生成的过程中做了额外的翻译工作。
作为程序员的博客,少不了在博文中分享代码,语法高亮的代码有助于读者理解代码逻辑。iKnowledge选用了一个原生的JavaScript插件——Rainbow,所谓原生的指不依赖注入jQuery等JavaScript库。
这个库很轻量(1.4kb),而且扩展也很方便,但在使用中发现它在处理较长的代码段时偶尔会堆栈溢出,作者表示无法重现问题。
在这个Web 2.x时代,一个只能看的网站简直一无是处!毕竟提供评论等互动的渠道可以和读者交流,相互学习等。但愿望总是好的,以我CSDN上的博客为例,近70万的访问量咋看很厉害的样子,但总共只有680条评论,除去大部分单纯叫好、求帮的,真正有价值的评论没几条!
此外,要处理评论对服务器也有更多的要求;而放弃评论就只需一台能处理静态页面的Web服务器。这样我就能把iKnowledge托管在Github Pages上。