经过俩周多的重构,终于一咬牙今天发布了Yaf 3.2.0 beta, 要不然一直在想各种可能的优化点,不停的写,没完了, 🙂
这次的重构的最初出发点是把原来的Yaf对象从PHP的原生对象,改成了自定义的对象:
with 22 Comments左手代码右手诗
经过俩周多的重构,终于一咬牙今天发布了Yaf 3.2.0 beta, 要不然一直在想各种可能的优化点,不停的写,没完了, 🙂
这次的重构的最初出发点是把原来的Yaf对象从PHP的原生对象,改成了自定义的对象:
with 22 CommentsYaf(Yet Another Framework)是我的第一个发布的PECL扩展,也是我走上PHP内核维护的开始,我一直对它比较有感情,Yaf在过去的8年多时间里,也得到了不少朋友的喜爱,当然Yaf还是有很多不足,但毕竟Yaf主要还是针对性能场景,不能满足所有的需求。
即然Yaf == 性能,借着疫情的在家时间,又花了一些时间对Yaf做了一轮优化,希望能对性能有进一步的提升。
with 18 Comments这个算是一个比较有用的性能优化技巧吧,主要是刚刚在重构Yaf_Loader的时候又用到,想着这个操作比较常见,就专门拎出来做个小分享...
我们在写代码的时候,在字符串处理的时候,可能会遇到这样的需求,就是把一个目标字符串中所有出现的某个字符a替换为另外一个字c....
with 6 Comments自动加载器在一个大型PHP项目中,往往是最容易被忽视的性能点,因为它一般而言都很简单, 但是它的调用次数确实非常之大。Yaf也不例外,虽然Yaf是C语言写的扩展,但还是可能会占到一个复杂项目1%到3%的耗时,这俩天想了想,总不能天天开会写博客吧,还是写点代码吧?于是乎决定启动重构。:)
经过周末一番重构,我基本上重写了Yaf_Loader::autoload整条生命期, 目的就是降低内存分配,具体的变化可以看:Refactor Yaf_Loader, 效果咋样? 我们来做个简单的测试:
这个项目其实不是一个新的idea, 这个是我在来微博以后, 第一个优化项目中顺手做的一个小工具, 本身叫做Weibo_Conf. 但是因为Weibo_Conf是属于Weibo扩展的, 里面还有一些其他功能是专门为Weibo定制的. 所以不适合直接开源.
随着PHP7的发布, 新增了很多持久化类型的支持比如IS_IMMUTABLE_ARRAY, 于是我就在PHP7下重新开发了Yaconf, 开源出来, 方便大家使用.
这个PPT以前已经在微盘上分享过了, 今天突然想起来, 上传到了slideshare上, 顺便也在博客上留个纪念吧.
这个PPT介绍了过去一年我在微博的工作成果, 包括Yaf的改, 以及新东西Yar, Yac等
通过一系列的努力(整体方针是, 先提速, 降成本, 清晰架构, SOA), 我们让微博首页的响应时间下降了一倍多, 同时还降低了整体的成本.
After Yaf, there comes another PHP framework in extension(在Yaf发布以后, 又出现了一个PHP扩展的框架 Phalcon): Phalcon.
then there raise a problem, which people have asked multi-times to me, that is , which one is the *fastest*(于是就出现一个问题, 不停的有人问, 到底Yaf和Phalcon哪个快, 因为他们都在他们的主页上宣称是最快的框架)? Yaf, or Phalcon. as they both declared they are the fastest(Yaf, Phalcon)
Yaf是我在俩年前写的一个PHP扩展的MVC框架. 开发Yaf的目的是为了解决使用框架带来的性能下降的经典矛盾.
最初要感谢百度的同仁们的信任, 以及当时各位老大的支持, 容许也敢于让我"试错", 才让Yaf顺利的度过了"没人敢用"的阶段, 大量的百度的新的产品基于Yaf开发, 让Yaf的稳定性得到了充分的验证, 也普遍的提高了PHP应用的执行效率.
而现在, Yaf的高性能又一次在微博的应用中得到了证明, 通过迁移框架到Yaf, 和一些其他优化手段, 我们成功的让新版微博的TPS提高了76%之多, 响应时间下降了近一半.
然而, 我也看到, 还有不少同学对Yaf有疑虑, 甚至有质疑, 有人认为"使用C写框架? 那不是回退到写CGI的时代了?", 于是我想我有必要写一篇文章, 详细介绍下我对Yaf的一些理解.
不少对Yaf感兴趣的朋友, 或通过QQ, 或者通过Email来咨询我一些通用的问题.
回答的多了, 就把一些学习/使用Yaf常用的资源列在这里, 方便后来人查阅.
Thanks to Ruilog agian for his work of second benchmark of Yaf 2.1.
Yaf 2.1 (github, manual) did a lot of work to improve performance and reduce memory usage, so let's take a look at the result(Yaf 2.1重写了很多逻辑来提升性能, 并且降低内存使用率, 改进结果见测试对比)