不带Doctrine的Symfony2是什么样?

这是一个奇怪话题,因为Doctrine是Symfony2的几个核心之一(另外几个是DI, Twig, 集成的单元测试).

怎么会突然想到不带Doctrine的Symfony2呢?因为最近用Slim用得很爽,直接是Twig+Slim+PDO,虽然有点阳春白雪,但是用起来果断很爽,比原生写PHP要方便很多,比Symfony2要轻便很多.

仔细对比了一会,最大的区别应该还是Form的处理,换句话说,核心依然是Doctrine,在为没有Doctrine就没有方便的操作Form的接品,这种事情让我突然有一种奇怪的感觉:也许Symfony2走到最后,不只是需要一些代码生成器,更需要一个IDE.

如果使用Symfony2但却不使用Doctrine,会怎么样呢?

相对来说,当再做Symfony2项目时,假如没有Doctrine,那么应该更适合从页面入手,先做一个页面出来,然后考虑需要展示的数据有哪些,再然后呢?做一个简单的数据表,然后在Service中处理一下db操作,写一个单元测试.

这个数据链接要么是写一个pdo的单例,要么是直接从entity manager中获取,用完应该记得关闭.

似乎这样用Symfony2比直接用Doctrine要复杂?

那么是不是说明DI应该配合ORM来用,而不应该直接用?

这个问题在Java时代就开始思考,这么做也许可以,也许不可以,不过Symfony2很适合多人协作,Slim更适合一个人开发.Slim要想多人开发自然也可以,只是分隔性不如Symfony2.

我思考问题太简单了,哪能只考虑这些,可能是因为今天写了一天代码,头有点晕吧.不管了,睡觉,明天再继续.

转载自:http://saharabear.com/weblog/?p=1840

Symfony2之不能承受之重

本来想写成PHP之不能承受之轻,但PHP本身问题并不大,易学易用,大多数需要的东西都有,友好的C扩展接品,虽然有一些不好的语法等问题存在,但不能说PHP之不能承受之轻.

那还是说说Symfony2这个自带DI的Web开发框架吧,最起码说一说Symfony2之不能承受之重.

首先,组件.Symfony2在PHP的世界里带来了组件的概念,这个概念非常好,特别是以完全面向对象的风格,引入各种bundle作为组件.虽然21世纪的技术早就普及的组件的概念,但是Symfony2实现得非常好,比如安全组件,再比如权限等等.但没有完美的东西,Form组件与验证组件用起来就太重了,不方便单元测试,使用复杂,到今天我还是记不住所有语法,问过其他人,也大多记不下语法.

然后, 自然要提到I18N组件,简直就是能让人疯狂的组件,没有文档说明如何配置是正确的,有人用yml,有人用xml还有人用更奇怪的办法.所以,每当碰上这种I18N的情况,我宁可多加一个部分,在Web层配置两套twig.

再然后,单元测试.不少人说Symfony2的单元测试挺好啊,又用不着自己处理垃圾数据,直接放在内存里面跑,但又有几个人真正了解如何以bootstrap的模式启动Symfony2的内核?真正的单元测试又怎么能够不以这种方式做单元测试和数据层?别提Mock,我知道什么是Mock,但你只测试QueryBuilder生成的query语句还不够,一定要跑起来再看实体定义,Symfony2应该增加这部分的默认配置.

再再然后,就是Bundle的继承关系,没有一个真正优秀的设计,这部分继承关系,如同鸡肋,食之无味,弃之可惜(比如用FOS的组件就需要用到这个特性)

最后,再折腾一句:cache设计得不合理,很多人都需要花很久才能真正用好,应该再自动化一点,智能一点,多封装几种算法.

又写废话了,Symfony2还是最好的PHP框架之一,只是有一些地方,总是有着开发人员无法承受之重.

转载自:http://saharabear.com/weblog/?p=1799

Slim框架,只支持PHP 5

Slim是一个微型的PHP 5框架,他可以帮助你快速编写简单功能强大的RESTful风格的web应用程序 和APIs。Slim的简单可以让新手和专业人士使用。

特性:

  • 干净而简单的使用DSL编写强大的web应用程序
  • HTTP URL路由
    • 支持所有标准的和自定义的HTTP请求方法
    • 路由支持参数和条件
    • 支持跳转
    • 支持略过
    • Route halting
    • 支持中间层
    • 给路由命名和 urlFor() 帮手
  • 简单的配置
  • 简单的模板和自定义视图(例如:Twig,Mustanche,Smarty)
  • Flash消息
  • 支持使用AES-256加密的cookies
  • HTTP缓存(Etag和Last-Modified)
  • 日志
  • 错误处理
    • 自定义404处理方法
    • 自定义错误处理方法
    • 调试
  • 内置Rack协议(?)
  • 可扩展的中间层和hook架构
  • 支持PHP >= 5.2.0

“Hello Word”应用程序(PHP >= 5.3)

Slim支持PHP 5.3的匿名函数。这是最好的方法来定义Slim路由程序,下面这个例子 假设你已经配置了web服务器的url重写

<?php
require 'Slim/Slim.php';
$app = new Slim();
$app->get('/hello/:name', function ($name) {
    echo "Hello, $name!";
});
$app->run();

Yii Framework的性能

Yii是一个高性能的框架,下面图表显示Yii Framework和其它流行PHP框架的性能比较。在图表中,RPS表示“每秒请求数”,他描述使用不同的PHP框架写的一个应用程序的每秒处理请求数。数字越高表示框架越高效,性能越好。正如我们看到的,Yii Framework比其它框架比较性能要好。Yii性能要好于其它框架的一个重要因素是APC扩展。

性能本身并不全部(否则我们可以使用HTMLH或者PHP)。在优秀性能基础上,Yii同时提供了很多的功能、特性来提高我们的开发效率。

Yii为什么如此快

Yii如此快的一个重要原因是他使用了延时加载技术性。例如:他不包涵一个类文件,直接该类文件被首次使用时候才被包涵;他不创建一个对象直到这个对象首次必访问时候他才会必创建。其它框架慢的一个原因就是被包涵的功能过多(比如数据库连接,用户session),而每次请求中都用不到这些功能。

基准测试设置

下面我们解释我们是如何设计基准应用程序并获得RPS的数据

基准测试应用程序

由于我们的目标是测试每个框架最小的开销(minimal overhead),我们使用每个框架最简单的基准测试程序,我们使用每一个框架编写一个只输出“Hello Word”字符串的代码。禁止其它任何的功能(比如session)来确保我们的比较公平。该基准测试程序地址:phpmark project

为什么是“Hello Word”

我们选择使用“Hello Word”程序来达到我们的测试目标,即实现每个框架的最小开销(mininal overhead)。许多人抱怨“Hello Word”程序是没有意义的,因为现实世界的应用程序,往往需要更复杂的任务。这看起来不是那么真实,在现实中,尤其是一些Web 2.0应用程序,我们经常遇到和“Hello Word”非常接近的情况。例如:一个应用程序需要从AJAX请求中获取当前服务器的时间;一个页面的大部份内容必缓存,程序只需要从缓存中获取内容并显示即可。

另一个使用“Hello Word”的原因是,涉及更多的特性(比如数据库查询)是,他成为一个非常艰巨的任务。比如某个框架在执行数据库查询时非常有效,但他没有缓存功能,而另一个框架数据库查询有些慢,当他有先进的缓存功能。有太多的因素会影响性能测试的结果。

基准测试工作和环境

我们使用ApacheBench工具的”ab -t 30 -c 10 URL”命令来获得RPS数字。在获得每个框架的RPS数据之前,我们需要停止再开启Apache Web服务以避免干扰。我们也会先执行测试程序几次完成热身(warm up)。在phpmark project中,我们有一个benchmark.sh的shell脚本来完成自动化测试。

测试环境:

  • 操作系统:Red Hat Enterprise Linux Server release 5.2
  • Web服务器:Apache httpd 2.0.40
  • PHP:5.2.6, any non-essential extensions are disabled
  • CPU:Dual Intel Xeon 3.2GHz
  • 内存:2GB
  • 硬盘:73GB 15K RPM SCSI/SAS HDD

APC配置:

apc.enabled=1
apc.shm_segments=1
apc.optimization=0
apc.shm_size=32
apc.ttl=7200
apc.user_ttl=7200
apc.num_files_hint=1024
apc.mmap_file_mask=/tmp/apc.XXXXXX
apc.enable_cli=1
apc.cache_by_default=1
apc.stat=0

Yii Framework框架

快速、安全、专业的PHP框架

Yii是一个高性能的PHP框架,非常适合开发Web 2.0应用程序。

Yii自带丰富的功能,包括:MVC(三层架构模式), DAO/ActiveRecord(面向对象的数据访问对象接口), I18N/L10N(国际化与本地化), caching(缓存), authentication(身份验证)和role-base access control(基于角色的访问控制), scaffolding(脚手架), testing(测试)等等,他可以加快您的开发速度。

Yii Framework官方网站:http://www.yiiframework.com/

Yii Framework权威指南:http://www.yiiframework.com/doc/guide/

Yii Framework中文权威指南:http://www.yiiframework.com/doc/guide/1.1/zh_cn/index