常见操作系统-web服务器的架设-PHP框架的选择及几款主流框架的性能基本评测

毫无疑问,常见操作系统web服务器的架设技能在近几年已经得到了突飞猛进的开展和普及,在曩昔几年里,结构技能的普遍经历了比较大的完善过程,很大一部分可以归因于RubyonRails,以及在其他编程言语中流显露的MVC结构思想。

假如你是一个PHP忍者,而不是一个铁杆的Ruby追随者,你或许会惊讶市面上已经有这么多的结构,哪一个才是适合你的。当然回答和个问题取决于的许多要素,今日咱们将会回顾一下这个典型的问题,怎么为你的下一个应用体系挑选适合你的PHP结构。

同时咱们也来看一下比较盛行的PHP结构,比较一下他们的差异,这样可以帮你自己做出正确的挑选,找到最适合你项目的结构。

明确你的需求

在你决定为你的项目挑选一个结构之前,你领先了解需求,需求和了解一些开发团队暗地的工作,咱们总结出了如下几个问题,在开端下一步之前你可以试着问问自己。

你的应用程序首要集中于解决哪些问题?

你的应用可以是一个电子商务渠道,一个社交网站,音讯同享渠道或许活动目录,举例来说,假如你正在构建一个电子商务网站,你或许更期望选用一些具有用于处理信用卡和交易会话的成熟的扩展函数库的结构。另一方面,假如是一个轻量级的音讯渠道(比方说微博类体系),则你或许更应该重视快速的扩展和跨服务器跨数据的支撑拜访才能,为了完结负载均衡和快速衔接拜访。

你的主机运转环境将是什么?

有些特殊的结构会需求使用到一些非默许的其它PHP扩展或许软件安装在服务器上,比方,有些结构的数据笼统层必须要求经过PDO来完结拜访,而非直接调用更底层的MySQL或MySQLi,或许有些相似wiki类的程序的图画压缩和处理功用往往需求使用到ImageMagick或Graphiviz这些外部程序。而这些扩展或许并不会被所有的同享主机环境(虚拟主机)支持,此外即便是一个轻量级的小型结构,而且自我集成了所有所需的函数库而且也具有良好的可移植性和适应性,这样的结构应用在处理数据密集型的操作或许大型数据处理的体系时,功能又会成为它的首要瓶颈。

你的开发人员或团队的优势和劣势在于什么?

假如你是个项目经理,一个重要的工作是了解清楚你的详细开发人员他们的才能和弱势,因为他们是真的闷头干活儿人,所以或许你可以挑选一些愈加面向开发人员友爱的简略上手的结构。当然这个问题的或许并不是影响决定是否选用一个结构的决定性要素(不断地要求自己和团队学习新的技能总是好的),但着肯定是一个会影响到你的时刻表、预算和安全等多方面要素的重要考量条件。

如安在“高耦合性”还是“低耦合性”的结构中做出挑选?

假如从结构产品本身的耦合性来将目前干流的php结构产品分为高耦合性和低耦合性两类。低耦合性的结构看起来更像是一个丰厚的函数库和逻辑封装的笼统层,乃至有些好的结构本身就是PHP的一个高级扩展组件,比方PDO,它肯定算得上是一个数据拜访的结构也是笼统层。还有一些其他值得一提的低耦合性结构,比方ZendFramework,CakePHP,以及国内开发的ThinkPHP都属于这个领域。假如你将接手的项目历史问题比较多,而且对UI的自定义比较高,你恐怕需求一个低耦合性的结构来满足你灵活的需求。

另一方面是一些高耦合性结构的代表,比方一些由CRM衍生而来结构相似Drupal,Joomla,还有直接就是为了高耦合性而开发的OpenbizCubi结构,国内小范围盛行的结构还有普元等。这些结构的最优异的特点是可以让你彻底只集中于完结你的中心事务逻辑,你乃至不必去管怎么完结UI和用户会话办理这些基础特性,你只需求把你的代码和它们提供的接口标准进行“衔接”就可以了。假如你担任的项目是一个新的项目,你肯定不期望把大部分的时刻都花在完结基础事务逻辑上,比方可能是为客户公司开发一套“停车场办理体系”,还是挑选相似OpenbizCubi这样的结构,在其之上直接去完结你的事务逻辑是最对得起你的时刻预算和投资回报率的。

简略的功能评测事例 本次测验输出简略的hello word,简略MVC逻辑,(Router -> Controller -> Viewer),没有数据库衔接,没有任何逻辑.

硬件渠道 CPU: Intel Core i5 750 (2.67GHz x4)

RAM: 4GB

软件环境 Debian 6.0.4 x86_64 (2.6.32-41)

apache 2.2.16 (mpm-prefork,mod-php5)

php 5.3.10

php-apc 3.1.9 (Optimization for include/require)

Copy all projects to /dev/shm/* (Optimization for files read/write)

PHP结构列表 * zf: Zend Framework

Site: http://framework.zend.com

Ver: 1.11.11

* zf2: Zend Framework

Site: http://framework.zend.com

Site: https://github.com/zendframework/ZendSkeletonApplication

Ver: 2.0.0-beta1

* symfony: symfony

Site: http://www.symfony-project.org

Ver: 2.0.0

* cakephp: CakePHP

Site: http://cakephp.org

Ver: 2.0.4

* ci: CodeIgniter

Site: http://codeigniter.com

Ver: 2.1.0

* yii: Yii Framework

Site: http://www.yiiframework.com

Ver: 1.1.8

* micromvc4: MicroMVC

Site: http://www.micromvc.com

Ver: 4.0.0

* laravel: Laravel, A PHP Framework For Web Artisans

Site: http://laravel.com

Ver: 2.0.2

* slim: Slim Framework

Site: http://www.slimframework.com

Ver: 1.5.0

* yaf: Yet Another Framework in PHP Extension

Site: http://code.google.com/p/yafphp

Ver: 2.1.3-beta (yaf.cache_config=1)

* FuelPHP: Simple, Flexible, Community driven Web Framework

Site: http://fuelphp.com/

Ver: 1.1

* ColaPHP:

Site: http://code.google.com/p/colaphp/

Ver: 1.2-ga

# XHProf: A Hierarchical Profiler for PHP

Site: http://pecl.php.net/xhprof

Ver: 0.9.2

# The source code of this testing:

Source: https://github.com/eryx/php-framework-benchmark

1. Apache Benchmark Requests pre second (-c 100 -n 30000), the bigger is better

恳求/秒(-c 200 -n 50000), 数值越大越好

2. 体系负载 压力测验一分钟内完结的负载图

越小越好(-c 100 -n 30000)

3. 内存使用率 测验hello word占用的内存,越小越好.

4. 呼应时刻 页面的呼应时刻.单位奇妙

5. 调用方法的数量(Facebook XHProf) 单个hello word页面调用了多少方法,zend5620个方法,是不是太臃肿了。

6. 文件数量 打开hellow word用到included or required in 文件的数量.越小越好,zend很多,yii19个,yaf才4个,不快才怪。