关于Yaf的一些说明[转Yaf作者]

说明下,这篇文章转至于yaf作者鸟哥的博文,因为最近在系统的学习Yaf框架,发现了这篇文章,感觉对于了解Yaf框架还是很有用处,所以转过来和大家分享一下

Yaf是我在俩年前写的一个PHP扩展的MVC框架. 开发Yaf的目的是为了解决使用框架带来的性能下降的经典矛盾.

最初要感谢百度的同仁们的信任, 以及当时各位老大的支持, 容许也敢于让我”试错”, 才让Yaf顺利的度过了”没人敢用”的阶段, 大量的百度的新的产品基于Yaf开发, 让Yaf的稳定性得到了充分的验证, 也普遍的提高了PHP应用的执行效率.

而现在, Yaf的高性能又一次在微博的应用中得到了证明, 通过迁移框架到Yaf, 和一些其他优化手段, 我们成功的让新版微博的TPS提高了76%之多, 响应时间下降了近一半.

然而, 我也看到, 还有不少同学对Yaf有疑虑, 甚至有质疑, 有人认为”使用C写框架? 那不是回退到写CGI的时代了?”, 于是我想我有必要写一篇文章, 详细介绍下我对Yaf的一些理解.

首先, Yaf是一个框架, 那么大家对框架有什么感觉? 比如大家在平时使用Yii, Zend Framework的时候, 会去修改它么? 当你的一个业务基于某个框架开发完成以后, 你觉得你以后还会去修改框架代码么?

这就是Yaf之所以可以做成框架的一个前提条件, 那就是框架是不易变的, 一般是不需要维护的, 比如在百度使用的Yaf, 相当于Yaf 2.1.0, 虽然从2.1.0 到现在的2.1.18, 新增了一些特性, 修复了一些bug, 但是只要你的应用基于此框架开发完成了, 稳定运行了, 那你并不是一定要把框架升级到最新版.

第二, 大家在使用其他框架的时候, 如果要调试, 会需要去读框架代码, 并且通过在框架代码中打信息来调试么? 我想说, 这样的情况, 很少很少, 是的, 当一个开发者对某个框架特别熟悉的时候, 他清楚的知道这些框架的流程, 所以可能通过这样的方式来调试, 然而这不是必须的.

Yaf因为是扩展, 所以特别注意开发/调试的便利性, 它提供了插件机制, 提供了丰富的debug信息, 并且专门为命令行下的调试做了特别优化, 尽可能的在出现错误的时候, 给予更多的错误原因. 所以, 你几乎完全不需要了解框架的具体实现, 就能方便的调试.

还有一些同学对Yaf的实现表示担忧, 害怕引入一个扩展, 会造成一些其他问题.

Yaf的实现, 都是基于PHP的内核API, 你可以理解为Yaf的执行层面, 和你的PHP代码执行层面没有不同, 并且充分的注意了避免对PHP带来侵入性, 他遵守所有的安全限制, 所以在PHP内载入Yaf, 并不会带来什么问题(当然, 除非你的应用中, 有和Yaf提供的类同名的类).

还有一些同学, 担心, 万一Yaf出了bug怎么办? 毕竟扩展的框架, 要维护比较困难.

首先, Yaf有bug么? 肯定有, 就好比PHP, 它也存在很多Bug, 但是只要你触及不到, 那么你就不会触及到, 不存在开发的时候没问题, 跑的时候有问题.

另外, 对于Yaf的问题, 我基本上能做到快速响应, 这点现在的大量的Yaf用户应该能证明吧? 如果真正的是Yaf的bug, 我一定会立即修复. 提供Patch. 并且, 除我之外, 也有更多的人对Yaf的实现开始了解, 我相信以后Yaf会有更多的维护者.

另外, 还有不少同学问, 为什么Yaf没有ORM, 这里有俩方面的考虑:

首先, Yaf并不是万能的, 它只是解决了应用中, 最基本的一个问题, 就是框架带来的额外的性能开销, 然而这本部分的开销和你的应用实际的开销相比, 往往是很小的.

但是, Yaf却代表着一种精神, 就是追求简单, 追求高效, 追求:”简单可依赖”, 所以Yaf专注于实现最核心的功能, 提供最稳定的实现.

相比ORM, 如果要实现的很方便, 那必然会很复杂, 在当时的情况下, 实现ORM有可能会引入不稳定性

第二, 也是最重要的一点是PHP已经提供了对DB的一个轻度封装的PDO, 我认为直接使用PDO, 会更加简单, 更加高效, 我不希望提供一个复杂的ORM包装, 鼓励大家去抛弃简单的PDO而使用ORM. 所以, 最初的时候, Yaf并不包含ORM.

诚然, ORM可以提高开发效率, 尤其对于一些简单应用, 所以我想在后续的Yaf的版本中, 会考虑加入ORM, 但是那也绝对会是一个简单的ORM, 类似于Yaf的内建视图引擎: Yaf_View_Simple, 简单可依赖.

当然, 因为Yaf是扩展, 而大部分的虚拟主机提供商是不容许我们自己安装扩展的, 这也就限制了Yaf的应用面, 在这点上, 我想我要特别感谢SAE/BAE的同学们, 在不久的将来, SAE/BAE都会支持Yaf, 让更多的个人开发者, 也能使用Yaf.

Yaf相比其他的框架, 目前还是一个很年轻的东西, 虽然有一大堆热心的同学(大门, 黑馒头, 烧鸡, 等等)在和我一起努力去丰富文档, 提供实例, 但Yaf的相关辅助还却是不如其他框架丰富.

所以, Yaf对于完全没有用过框架的同学来说, 入门门槛会比较高一些, 但如果你已经使用过其他框架, 那么接受Yaf, 将会比你想象的简单的多.

最后, 我并不是说, 大家都需要使用更高性能的框架, 我只是希望Yaf能给大家提供了一条路, 给大家提供多一种选择而已.

“Yaf只是最快的框架, 却不是最完美的框架.”

我会让持续的让他越来越完美. 我也欢迎你, 和我一起, 让他变的更完美.

原文: http://www.laruence.com/2012/08/31/2742.html

参考来源: 
关于Yaf的一些说明[转Yaf作者]
http://www.lai18.com/content/407120.html

关于Yaf的一些说明[转Yaf作者]的更多相关文章

  1. Yaf学习(一)----Linux安装Yaf

    1.简介 Yaf,全称 Yet Another Framework,是一个高性能的PHP开发框架,采用PHP扩展实现(c语言).Blablablabla....... 2.环境 2.1 虚拟机 虚拟机 ...

  2. Yaf零基础学习总结4-Yaf的配置文件

    在上一节的hello yaf当中我们已经接触过了yaf的配置文件了, Yaf和用户共用一个配置空间, 也就是在Yaf_Application初始化时刻给出的配置文件中的配置. 作为区别, Yaf的配置 ...

  3. Yaf零基础学习总结3-Hello Yaf

    Yaf零基础学习总结3-Hello Yaf 上一次我们已经学习了如何安装yaf了,准备工作做好了之后我们来开始实际的编码了,码农都知道一个经典的语句就是“Hello World”了,今天我们开始入手Y ...

  4. yaf设置命名空间

    修改yaf配置文件 文件是:yaf.ini extension=yaf.so yaf.use_namespace=1 index文件. 目录是application/controllers/Index ...

  5. Yaf框架下类的自动加载

    前面两篇博客分别讲述了PHP自带的类加载和composer中类的自动加载,其实Yaf框架也实现了基于PSR0和PSR4的类的自动加载.根据我对Yaf下类的自动加载方式的理解写下这篇博客.由于接触Yaf ...

  6. yaf框架使用(centos6.5)

    安装好php环境之后 安装扩展包 $yum install php-devel /usr/bin/ 就会出现phpize工具包 下载yaf-2.2.8.gz源文件,解压后,进入源文件 phpize [ ...

  7. yaf性能测试(wamp环境)

    1实现mvc 出现helloword,成功 2.controller重定向 $get = $this->getRequest()->getQuery("get", &q ...

  8. windows下安装yaf和git

    不得不说win7下安装yaf比mac下安装yaf简单多了 1. phpinof()看一下你的php版本.我的是php 5.4所以我选择是php_yaf-2.1.9-x86-5.4-zts-nodebu ...

  9. Yaf框架的配置

    http://www.laruence.com/manual/yaf.ini.html //先看一下惠新宸鸟哥yaf官网的配置说明 我们可以在php.ini中定义开发环节配置项,把本地开发设置成dev ...

随机推荐

  1. myeclipse自动排版

    myeclipse代码排版方式有两种: 1. ctr+f 实现自动排版: 2. myeclipse->Preference->Java->Editor->Sava Action ...

  2. ASP.NET Web API之消息[拦截]处理

    标题相当难取,内容也许和您想的不一样,而且网上已经有很多这方面的资料了,我不过是在实践过程中作下记录.废话少说,直接开始. Exception 当服务端抛出未处理异常时,most exceptions ...

  3. C# .net ACCESS 网页增删改查 --留言板

    话不多说,上代码 http://yunpan.cn/QaQs5Dzz8ZIxK  访问密码 041b

  4. 红星美凯龙CEO车建新的圆融和霸气

    待人接物中车建新有许多习惯,与别人一起行走时,走在靠马路的一边:吃饭时最好的菜留给客人.他说,做人往往就在细节中,别小看一个举动,无意中就会感染别人.和别人在一起,你要时时刻刻先考虑对方. 细节上体察 ...

  5. js实现倒计时及时间对象

    JS实现倒计时效果代码如下: <!doctype html> <html> <head> <meta charset="utf-8"> ...

  6. 写shell脚本速查笔记

    linux shell脚本的语法蛋疼,而且对于java开发人员来说又不常用,常常是学了一次等到下次用的时候又忘记了.因此制作这个速查笔记,用于要写shell脚本时快速回忆&速查. 获取当前脚本 ...

  7. 基于阿里云服务器的git服务器搭建

    使用阿里云Ubuntu 12.0.4 64位操作系统做git服务器. 首先git服务器有两种访问方式可以选择:http方式和ssh的方式,http方式更容易使用. 1.http方式的git服务器搭建以 ...

  8. javascript 网页运行代码效果

    <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8&qu ...

  9. asp.net用url重写URLReWriter实现任意二级域名

    本文转自 http://www.cnblogs.com/notus/archive/2007/03/13/673222.html

  10. Nginx-->进阶-->原理-->Nginx+php+fastcgi的原理与关系

    一.用户对动态PHP网页访问过程 用户浏览器发起对网页的访问:http://192.168.1.103/index.php 用户和nginx服务器进行三次握手进行TCP连接(忽略包括nginx访问控制 ...