- 本文地址: https://www.laruence.com/2020/03/15/5563.html
- 转载请注明出处
Yaf(Yet Another Framework)是我的第一个发布的PECL扩展,也是我走上PHP内核维护的开始,我一直对它比较有感情,Yaf在过去的8年多时间里,也得到了不少朋友的喜爱,当然Yaf还是有很多不足,但毕竟Yaf主要还是针对性能场景,不能满足所有的需求。
即然Yaf == 性能,借着疫情的在家时间,又花了一些时间对Yaf做了一轮优化,希望能对性能有进一步的提升。
主要涉及到的有:
1. 重构了Yaf_Loader::autoload 2. 重写了Yaf_Route_Static/Rewrite的核心逻辑 3. is_localnamespace采用Hash匹配来取代之前的字符串匹配 4. 重写了大部分的逻辑以避免内存分配
因为改动比较大,所以也跳跃了版本,从3.0.9到3.1.0. 下载地址: Yaf At PECL
那么,还是老规矩,我们来测试下性能变化,首先采用yaf代码中的tools/cg/yaf_cg来生成一个测试:
tools/cg/yaf_cg benchmark /var/www/html/yaf
测试服务器配置:
32GB RAM Intel(R) Xeon(R) CPU E5-2620 v2 @ 2.10GHz * 24 Nginx 12 processes PHP-FPM 24 processes
我们首先用yaf-3.0.9版本来测试(200并发):
ab -n 100000 -c 200 http://10.33.1.23:8000/yaf/ Server Software: nginx/1.9.7 Server Hostname: 10.33.1.23 Server Port: 8000 Document Path: /yaf/ Document Length: 26 bytes Concurrency Level: 200 Time taken for tests: 17.950 seconds Complete requests: 100000 Failed requests: 0 Write errors: 0 Total transferred: 19100000 bytes HTML transferred: 2600000 bytes Requests per second: 5571.17 [#/sec] (mean) Time per request: 35.899 [ms] (mean) Time per request: 0.179 [ms] (mean, across all concurrent requests) Transfer rate: 1039.15 [Kbytes/sec] received
然后我们用yaf-3.1.0来测试(200并发):
ab -n 100000 -c 200 http://10.33.1.23:8000/yaf/ Server Software: nginx/1.9.7 Server Hostname: 10.33.1.23 Server Port: 8000 Document Path: /yaf/ Document Length: 26 bytes Concurrency Level: 200 Time taken for tests: 16.046 seconds Complete requests: 100000 Failed requests: 0 Write errors: 0 Total transferred: 19100000 bytes HTML transferred: 2600000 bytes Requests per second: 6232.05 [#/sec] (mean) Time per request: 32.092 [ms] (mean) Time per request: 0.160 [ms] (mean, across all concurrent requests) Transfer rate: 1162.42 [Kbytes/sec] received
可以看到,QPS从5571飙升到了6232, 11%的QPS提升。
当然了,这点提升对于一个实际项目来说,可能并不明显,我只是在这里说明下版本升级对比:)
另外毕竟这次改动变动的代码比较大, 虽然说已经尽力测试, 但可能还是会有问题, 如果大家在实际使用的时候遇到任何问题, 可以在Github上提Issue,或者直接发邮件给我laruence at php dot net, 注意邮件不要带附件,php的mail系统过滤有附件的邮件:< Enjoy!
Good
这个版本application.dispatcher.defaultModule的配置是不是失效了?我写的博客,默认模块配置了竟然没作用了。
That’s good news, I’ve been searching for it for days
Thanks for the blog loaded with so much information. Stopping by your blog helped me to get what I was looking for.
感谢鸟哥的付出。有点小障碍,就是文档跟不上。版本改动很大,没足够的文档支持。导致升级或者迁移到新的环境下,安装了最新的yaf,程序全部崩掉了。因为一些的旧的方法突然不支持了,向下兼容不好。
具体的问题,可以在github上提issue哈
一直在用 YAF 和 YaConf,用一句英文就是 Start Small, Finish Big(中文不知道怎么说)。我并没有使用自带的 Yaf_autoload,而是 unregister 掉了,而改为了 Composer。YAF 是非常好的,不会让你觉得碍手碍脚,在基本的 Request to Response 这个流程上,你可以随意扩展。一直期望的两个改动,在这个版本没有出现,有点儿小失落。
一个是 YAF 的,希望可以支持 PSR-4 的命名空间,尤其是 Module, Controller, Action 的加载,而不是加载到全局下。
一个是 YaConf 的,希望可以支持至少一层子目录,为不同的 app 做空间区分。当然,用 Docker 的话,这不是问题,所以不要紧。
谢谢 鸟哥对 YAF 的开源与维护。
关于PSR-4, 你看看这个是否满足需求: https://github.com/laruence/yaf/pull/471
感谢鸟哥最近的不断优化。
看到了最新的 Release,持续关注。
据说加入swoole的第三方生态应用列表要给swoole捐款
说真的写的文章越来越没技术含量, yaf框架也没几个人用, 用着感觉还特别不爽。这个框架除了路由还有啥特别的功能?命名规范啥的还特别的别扭, 一看就是没做过业务开发的人写的框架,为了写框架而实现的框架。还不帮帮rango一起完善完善swoole, 把php生态搞起来。现在用的php的公司不是转go就是转java。
本来不想回复你,不过说句你可能不能理解的话,我写代码是为了我自己好玩,至于你用不用,我根本不Care,懂么?
只回你最好一句。
xxoole 本来是有生态的虽然很小并不完善,未来很期。现在是1 V1服务,产业链垄断这一套搞得不错。垄断是开源的反方向。做好自己憋掺和。知道垄断之后是干啥麻?(绿的心发慌
你去完善swoole不就行了
你还真是个joke
点赞啦
我来占个沙发,鸟哥真棒
感谢鸟哥