2008年12月31日星期三
再见,2008;你好,2009。
{
year2008.End();
Year year2009 = new Year(2009);
year2009.Start();
}
PHP:
<?php
unset($year2008);
/*
* TODO: Give $year2009 a meaningful value.
*/
$year2009 = "";
?>
2008年12月30日星期二
Drupal项目实战:公司员工订餐系统(二)
- 查看节点的变量
- 清空缓存(模块的)
- 生成测试数据(节点等)
- 开发节点类型的模板:node-content_type.tpl.php
- 开发评论的模板:comment.tpl.php
- 开发普通页面的模板:page.tpl.php
- 开发首页模板:page-front.tpl.php
- 整理CSS类别和区块
- 制作全站的CSS,写入style.css,或创建单独的样式表文件,在style.css中import.
- 为生产站点作CSS优化:如使用Drupal的CSS Aggregation将CSS文件整合为一个文件或重新设置每页加载的CSS文件。
原始页面 | |
第一次布局修改:
| |
第二次布局修改 加入样式 采用table作布局 |
相关函数讲解
2008年12月18日星期四
Drupal地心游记:开始
Read the f**king code.
此句出自Linux之父Linus大神之口,虽然有点“dirty”,不过一针见血。想要了解一个系统、程序或框架的实质,唯一的、最终极的方法,就是阅读源代码。就好像要分析人类,首先要从解剖入手。但是,众所周之,一个完整的程序,源代码行数甚多,而且源文件也很多,初步看去,肯定无从下手。这也是大家通常会遇到的问题。本系列就是想和大家一起来解决这个“问题”。
Drupal是一个优秀的开源CMS,优秀的框架。它的流行是一种趋势,也是一种必然。简洁、开放、易于扩展、生机勃勃,这些都是新时代优秀框架的必备品质。Druapl发展至今已经是第6个版本,而且Drupal 7也呼之欲出,可见其发展迅猛程度。而且还被评为2008年最佳开源CMS。看来各位不了解Drupal都会显得“过时”了。
得易于Drupal是PHP开发的,我们可以轻松的查看其源代码,了解其组成原理。本人最近也要潜心研究一下Drupal的本质,因此就将研究过程记录与此,并与大家分享。旨在引发大家的共同讨探。
结合分析操作系统的方法,我认为分析Drupal可以从其核心模块入手,探究它是如何管理“内容”的,然后再扩展到其它模块。除了分析代码外,我还想从“哲学”上解析一下Drupal。大家不要紧张,这个“哲学”的词,在国外很普通,不单指“哲学”这们学科。其实世界万物都有一种其运行的原理或机理存在,软件产品是人类智慧的产物,因此融合了开发者的思维方法和一些很抽像的东西。希望我们在探索的过程中,也能发现这些较高层次的智慧“碎片”。
小的时候看过一本书,叫《地心游记》,是著名科幻小说家凡尔纳的作品(此人还有另一作品比较有名:海底两万里),讲的是一群人探索地心的故事。我们就怀着对Drupal“地心”(Drupal Core)的好奇心和冒险精神,开始Drupal的地心之旅吧。
2008年12月11日星期四
Drupal项目实战:公司员工订餐系统 (一)
我们要做的是一个公司内部的员工订餐网站,它的主要功能是:
- 员工可以浏览各种菜的信息:为了简单,我们先假设可以浏览的是“套餐”
- 员工在选择好菜后,就可以下订单:订单中可以选择订菜的数量
- 饭店可以查看员工所下订单 :并根据订单进行送餐,订单的有效期是当日上午10:00 (假设我们订的是午餐)
- 菜单的主要属性:标题、说明、照片、价格
- 公司员工
- 饭店
- 订餐管理员
- CCK、Views、Panels:这三个模块基本没什么悬念,任何一个网站几乎都会用到。Panels可能会损伤性能,不过它可以让我们避免陷入枯燥的CSS定位调试中。
- Image Field:用于添加Image的CCK Field
- Date:Date模块主要是一些日期相关的功能,也用于添加Date类型的CCK Field
- Vote API: 这个模块是用于评论时投票的,与FiveStar等模块连用,可以实现“小星星评分”,可爱又实用。
- Webform:在“下订单”时,我们有可能会用到,先列于此。
- 自定义模块:如果自己开发模块能够高效的解决问题,那么自定义模块也必不可少。
- [1] 敏捷开发:http://www.agilemanifesto.org/ :敏捷开发是RUP的一个扩展或精简,它有几个关键的实践用于指导软件开发过程。不过任何一种过程方法,都不可能适用于所有的项目,都需要经过我们自身的理解,并结合实际的项目情况而运用,要“以人为本”、“从群众中来、到群众中去”。
- [2] Best Practice:指最佳实践。
2008年12月7日星期日
Drupal 6, Drupal 7正在逐渐变慢?
根据kbahey的 最新测试表明(http://2bits.com/articles/performance-benchmarking-drupal-512- drupal-66-and-drupal-7x-we-are-getting-slower.html),Drpual 7比Drpual 6慢,Drupal 6比Drupal 慢。本文的测试数据和测试结果均取自Kbahey的试验。
试验方法
实验采用了10月24号新发布的Drupal 7,以及Drupal 6.6和Drupal 5.12。首先在D5的站点上,使用Devel模块创建下列数据:
Users | 5000 |
Nodes | 4950 |
Comments | 20000 |
Vocabularies | 20000 |
Terms | 1000 |
首页有30个节点的列表,没有自定义路径,一切使用原生的。下列模块被开启:system, block, color, comment, dblog, devel_generate, filter, help, menu, node, path, taxonomy, user, watchdog。
然后,将D5站点分别升级至D6和D7,再进行相同的测试,这样保证测试数据的一致性,使内容不会作为测试数据差异的原因。
Benchmarking 测试
我们使用2分钟内10用户的压力测试。所有的请求都成功完成(HTTP Code 200)。这个测试运行于三种条件下:
-
未开启缓存机制
-
开启普通的缓存机制
-
未开启APC[1]
-
开启APC
服务器环境是相同的:
-
Dual Core AMD 64 X2 2.2GHz
-
2GB RAM
-
160GB SATA disk
-
Ubuntu 8.04.1
-
Apache 2
-
MySQL 5.0
-
PHP 5.2.4.
Benchmarking 结果
版本 | 开启缓存 | 开启APC | Trans | Elap Time | Resp Time | Trans Rate | Concurrent |
---|---|---|---|---|---|---|---|
D5 | N | N | 1994 | 120.25 | 0.6 | 16.58 | 9.97 |
D6 | N | N | 1787 | 120.36 | 0.67 | 14.85 | 9.96 |
D7 | N | N | 1255 | 120.47 | 0.96 | 10.42 | 9.95 |
D5 | N | Y | 19481 | 119.78 | 0.06 | 162.64 | 9.98 |
D6 | N | Y | 15589 | 120.41 | 0.08 | 129.47 | 9.98 |
D7 | N | Y | 11418 | 120.26 | 0.11 | 94.94 | 9.98 |
D5 | Y | N | 6537 | 120.42 | 0.18 | 54.29 | 9.99 |
D6 | Y | N | 4706 | 120.56 | 0.27 | 39.03 | 9.97 |
D7 | Y | N | 2503 | 120.58 | 0.48 | 20.76 | 9.95 |
D5 | Y | Y | 50698 | 119.77 | 0.02 | 423.29 | 9.96 |
D6 | Y | Y | 46520 | 120.49 | 0.03 | 386.09 | 9.96 |
D7 | Y | Y | 34359 | 120.05 | 0.03 | 286.21 | 9.98 |
Trans: 完成的请求数量。
Elap Time: 完成这些数量的测试所花费的时间(秒)
Resp Time: 每个请求完成的时间(秒)
Trans Rate:每秒中完成的事务数,值越大越表现越佳。
Concurrent: 测试中同时在线人数,应该接近于10。
分析
根据上面的统计数据,可以得出一些结论:
-
如果未开启缓存和APC,那么D6比D5慢10.43%,D7比D6慢29.83%
-
D7比D5慢37.15%
-
-
如果开启了页面缓存,但未开启APC,D6比D5慢20.39%,D7比D6慢26.67%。
-
D7比D5慢41.63%
-
-
如果开启了APC但未开启页面缓存,D6比D5慢27.11%,D7比D6慢46.81%
-
D7比D5慢61.76%
-
-
如果同时开启APC以及页面缓存,D6比D5慢8.79%,D7比D6慢25.87%
-
D7比D5慢32.38%
-
这些数据验证了:Drupal 5是目前Drupal版本中,在未安装其它任何贡献模块的情况下,是最快速的。而且当开启了Page Cache(页面缓存)和APC时,速度最快。