yaf
yaf为何快
- 用C语言开发的PHP框架, 相比原生的PHP, 几乎不会带来额外的性能开销.
- 所有的框架类, 不需要编译, 在PHP启动的时候加载, 并常驻内存.
- 更短的内存周转周期, 提高内存利用率, 降低内存占用率.
- 灵巧的自动加载. 支持全局和局部两种加载规则, 方便类库共享.
- 高性能的视图引擎.
- 高度灵活可扩展的框架, 支持自定义视图引擎, 支持插件, 支持自定义路由等等.
- 内建多种路由, 可以兼容目前常见的各种路由协议.
- 强大而又高度灵活的配置文件支持. 并支持缓存配置文件, 避免复杂的配置结构带来的性能损失.
- 在框架本身,对危险的操作习惯做了禁止.
- 更快的执行速度, 更少的内存占用.
phalcon
- Zephir/C 扩展的加载与 PHP web 服务器守护进程启动进程一次
- 所有的框架类, 不需要编译, 在PHP启动的时候加载, 并常驻内存.
- 内建多种路由, 可以兼容目前常见的各种路由协议.
Phalcon基于C语言写的ORM,配合PHP-FPM提供的多进程的PHP数据库连接池,将提供性能极为强悍并且健壮的多进程数据库连接池。苦逼的是我大Phalcon文档太烂,根本就没提到这方面的先天优势。根本不需要swoole,nginx与php-fpm的黄金搭档以及phalcon提供的高性能ORM,就能提供目前最好的PHP数据库连接池解决方案。
就是PHP-FPM的配置文件。关于配置文件,PHPer都看得懂,我就不多说了。主要说说PHP-FPM带来的PHP数据库连接池的特色:
PHP-FPM一个进程对应一个持久化的数据库连接;
所有PHP-FPM进程所创造的持久化数据库连接,不能超过mysql的最大数据库连接数的,默认max_connections为150个连接。所以,不管是动态还是静态管理PHP-FPM进程,都需要注意PHP-FPM的进程数和mysql的最大连接数。
如果一个PHP请求,请求了多个不同数据库的数据,创建了多个持久化的数据库连接。那么对应的PHP-FPM就会在一个进程内创建多个持久化的数据库连接。这里是一个比较坑的地方,所有PHPer都应该注意。
假设服务器有100个PHP-FPM的进程,单个请求向5个不同的数据库请求持久化连接的数据,那么服务器将会创建500个持久化的数据库连接。
虽然Phalcon官方文档并没有提及PDO的数据库连接池,但是翻看Phalcon的PDO类的源代码,就会发现Phalcon实际上是支持PDO的数据库连接池
不仅仅支持PHP的数据库连接池,而且他用C语言写的ORM,性能要比所有的PHP语言写的ORM要强很多。也就是说Phalcon的ORM及与PHP-FPM实现的数据库连接池,就是目前PHP所有框架中数据库连接池性能最强的。
yaf框架虽然路由性能比phalcon略好,但是由于没有ORM,在拉取PHP所写的ORM后,其ORM性能要比Phalcon内置的C语言所写的PHQL要差