让PHP7达到最高性能的几个Tips

作者: Laruence( ) 本文地址: http://www.laruence.com/2015/12/04/3086.html 转载请注明出处

PHP7已经发布了, 作为PHP10年来最大的版本升级, 最大的性能升级, PHP7在多放的测试中都表现出很明显的性能提升, 然而, 为了让它能发挥出最大的性能, 我还是有几件事想提醒下.

PHP7 VS PHP5.6

1. Opcache

记得启用Zend Opcache, 因为PHP7即使不启用Opcache速度也比PHP-5.6启用了Opcache快, 所以之前测试时期就发生了有人一直没有启用Opcache的事情. 启用Opcache非常简单, 在php.ini配置文件中加入:

zend_extension=opcache.so
opcache.enable=1
opcache.enable_cli=1"

2. 使用新的编译器

使用新一点的编译器, 推荐GCC 4.8以上, 因为只有GCC 4.8以上PHP才会开启Global Register for opline and execute_data支持, 这个会带来5%左右的性能提升(Wordpres的QPS角度衡量)

其实GCC 4.8以前的版本也支持, 但是我们发现它支持的有Bug, 所以必须是4.8以上的版本才会开启这个特性.

3. HugePage

我之前的文章也介绍过: 让你的PHP7更快之Hugepage , 首先在系统中开启HugePages, 然后开启Opcache的huge_code_pages.

以我的CentOS 6.5为例, 通过:

$sudo sysctl vm.nr_hugepages=512

分配512个预留的大页内存:

$ cat /proc/meminfo  | grep Huge
AnonHugePages:    106496 kB
HugePages_Total:     512
HugePages_Free:      504
HugePages_Rsvd:       27
HugePages_Surp:        0
Hugepagesize:       2048 kB

然后在php.ini中加入:

 opcache.huge_code_pages=1

这样一来, PHP会把自身的text段, 以及内存分配中的huge都采用大内存页来保存, 减少TLB miss, 从而提高性能.

4. Opcache file cache

开启Opcache File Cache(实验性), 通过开启这个, 我们可以让Opcache把opcode缓存缓存到外部文件中, 对于一些脚本, 会有很明显的性能提升.
在php.ini中加入:

opcache.file_cache=/tmp

这样PHP就会在/tmp目录下Cache一些Opcode的二进制导出文件, 可以跨PHP生命周期存在.

5. PGO

我之前的文章: 让你的PHP7更快(GCC PGO) 也介绍过, 如果你的PHP是专门为一个项目服务, 比如只是为你的Wordpress, 或者drupal, 或者其他什么, 那么你就可以尝试通过PGO, 来提升PHP, 专门为你的这个项目提高性能.

具体的, 以wordpress 4.1为优化场景.. 首先在编译PHP的时候首先:

$ make prof-gen

然后用你的项目训练PHP, 比如对于Wordpress:

$ sapi/cgi/php-cgi -T 100 /home/huixinchen/local/www/htdocs/wordpress/index.php >/dev/null

也就是让php-cgi跑100遍wordpress的首页, 从而生成一些在这个过程中的profile信息.

最后:

$ make prof-clean
$ make prof-use && make install

这个时候你编译得到的PHP7就是为你的项目量身打造的最高性能的编译版本.

暂时就这么多吧, 以后想起来再加, 欢迎大家尝试, thanks

Comments

2015/12/04, seatle writes: 有点吊的,支持鸟哥2015/12/04, xLight writes: pgo 之后的wordpress性能也应该show出来啊2015/12/04, Laruence writes: @xLight 懒死你算了2015/12/04, barbery writes: 还可以机器学习,生成个性的编译版本,PGO太屌了。。。2015/12/04, Lancer writes: 不得不说PHP7真的性能提高了不少。过一段时间准备拿项目做升级试试水。2015/12/04, Young writes: 第四个厉害了 。 对于一些类库文件 简直就是预编译似的存在2015/12/05, lilj writes: 昨天升级了生产环境中的一台 升级后同样的配置, 相比其他5台 php7这台的负载下去了, 但是(104: Connection reset by peer) 成8倍增长 正在查原因2015/12/05, Laruence writes: @lilj 看看是不是php-fpm coredump了2015/12/06, simon_qqmmmqq writes: 鸟哥 NB [root@localhost php]# sysctl vm.nr_hugepages=512 vm.nr_hugepages = 512 [root@localhost php]# cat /proc/meminfo | grep Huge AnonHugePages: 288768 kB HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 2048 kB 看看这个怎么回事? HugePages_Total: 0 这个是代表huge pages 没设成功吗?2015/12/06, lilj writes: @laruence 你好 经提醒开了core dump, 截取了以下数据 .... Reading symbols from /mnt/data/env/php/lib/php/extensions/no-debug-non-zts-20151012/yac.so...done. Loaded symbols for /mnt/data/env/php/lib/php/extensions/no-debug-non-zts-20151012/yac.so Reading symbols from /mnt/data/env/php/lib/php/extensions/no-debug-non-zts-20151012/redis.so...done. Loaded symbols for /mnt/data/env/php/lib/php/extensions/no-debug-non-zts-20151012/redis.so Reading symbols from /lib64/libnss_files.so.2...(no debugging symbols found)...done. Loaded symbols for /lib64/libnss_files.so.2 Core was generated by `php-fpm: pool alpha '. Program terminated with signal 11, Segmentation fault. #0 _emalloc () at /usr/local/src/php/php-7.0.0/Zend/zend_alloc.c:1291 1291 heap->free_slot[bin_num] = p->next_free_slot; .... (gdb) where #0 _emalloc () at /usr/local/src/php/php-7.0.0/Zend/zend_alloc.c:1291 #1 0x000000000062adf6 in zif_spl_autoload_call () #2 0x000000000074807f in zend_call_function () #3 0x0000000000748722 in zend_lookup_class_ex () #4 0x000000000076bf24 in zif_class_exists () #5 0x000000000079e9bd in ZEND_DO_ICALL_SPEC_HANDLER () at /usr/local/src/php/php-7.0.0/Zend/zend_vm_execute.h:586 #6 0x0000000000790efb in execute_ex () at /usr/local/src/php/php-7.0.0/Zend/zend_vm_execute.h:414 #7 0x0000000000748004 in zend_call_function () #8 0x0000000000771244 in zend_call_method () #9 0x00000000007891ec in zend_std_call_getter () at /usr/local/src/php/php-7.0.0/Zend/zend_object_handlers.c:202 #10 0x000000000078a5ff in zend_std_read_property () at /usr/local/src/php/php-7.0.0/Zend/zend_object_handlers.c:564 #11 0x0000000000791ab3 in ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_HANDLER () at /usr/local/src/php/php-7.0.0/Zend/zend_vm_execute.h:23382 #12 0x0000000000790efb in execute_ex () at /usr/local/src/php/php-7.0.0/Zend/zend_vm_execute.h:414 #13 0x0000000000748004 in zend_call_function () #14 0x0000000000771244 in zend_call_method () #15 0x00007fe8427a1b41 in yaf_dispatcher_handle () from /mnt/data/env/php/lib/php/extensions/no-debug-non-zts-20151012/yaf.so #16 0x00007fe8427a2bf8 in yaf_dispatcher_dispatch () from /mnt/data/env/php/lib/php/extensions/no-debug-non-zts-20151012/yaf.so #17 0x00007fe84279e943 in zim_yaf_application_run () from /mnt/data/env/php/lib/php/extensions/no-debug-non-zts-20151012/yaf.so #18 0x00000000007cdffb in ZEND_DO_FCALL_SPEC_HANDLER () at /usr/local/src/php/php-7.0.0/Zend/zend_vm_execute.h:842 #19 0x0000000000790efb in execute_ex () at /usr/local/src/php/php-7.0.0/Zend/zend_vm_execute.h:414 #20 0x00000000007d9ae7 in zend_execute () at /usr/local/src/php/php-7.0.0/Zend/zend_vm_execute.h:458 #21 0x0000000000755c74 in zend_execute_scripts () at /usr/local/src/php/php-7.0.0/Zend/zend.c:1428 #22 0x00000000006faee0 in php_execute_script () at /usr/local/src/php/php-7.0.0/main/main.c:2471 #23 0x00000000007e505c in main () at /usr/local/src/php/php-7.0.0/sapi/fpm/fpm/fpm_main.c:1944 ... 技能太差不会用gdb 希望能有用, 目前已经切换回5.6版本 谢谢2015/12/06, lilj writes: 抱歉,我又来刷屏了 ... (gdb) source /usr/local/src/php/php-7.0.0/.gdbinit (gdb) zbacktrace [0x7fe842c13520] spl_autoload_call("Gifts_Model") [internal function] [0x7fe842c134b0] class_exists("Gifts_Model") [internal function] [0x7fe842c13410] Controller->load("Gifts_Model") /mnt/data/env/php-7.0/lib/php/Yafext/Traits/Common.php:31 [0x7fe842c13330] Controller->__get("gifts_model") /mnt/data/env/php-7.0/lib/php/Yafext/Traits/Common.php:18 [0x7ffc105bc0b0] ??? [0x7fe842c13140] Pvp_Fight_Controller->indexAction() /mnt/data/stable/sguo/server/app/controllers/Pvp/Fight.php:147 [0x7fe842c130e0] Yaf_Application->run() [internal function] [0x7fe842c13030] (main) /mnt/data/stable/sguo/server/public/index.php:30 ... ... $ cat /etc/php.ini |grep yaf extension=yaf.so [yaf] yaf.environ = product yaf.use_spl_autoload = 1 ... 问题似乎在yaf的use_spl_autoload 上 我用了一句 Yaf_Loader::getInstance->autoload('Gfits_Model'); 话说鸟哥能给回复邮件么? 这里交流实在太不方便了 谢谢2015/12/06, laruence writes: @lilj 没收到你邮件啊, 你发送我gmail的?2015/12/07, eechen writes: PHP7用opcache.file_cache导出opcode实现代码保护 http://my.oschina.net/eechen/blog/5399952015/12/07, cloud writes: 鸟哥, osx 10.11 是不是只能用gcc编译,不能用clang?2015/12/07, lilj writes: 鸟哥, 刚看到回复 我的意思是能否给你发邮件沟通, 不是说给你发邮件了。 目前已经切换回了5.6, 不敢拿用户试验太久 据初步判断,是spl_autoload 会出现core dump 我把用到autoload的几处地方改成include了, 情况有所好转 但是另外一个地方也老是产生502错误, 也没有报错和core dump, 只能先切换回5.6 等以后有时间再优化一下代码看看。 谢谢2015/12/09, sgub writes: 已经把php7以及内置的extension都用gcc 4.9.2编译了。外部ext有必要用高版本gcc重新编译吗?比如 php-pecl-memcached?不需要的话我就直接拿remi的成品啦。2015/12/10, lx writes: @lilj 你的502问题解决了吗? 我也遇见了一个很怪的问题,一个地方不报错,也没有报错和core dump, 但是切换回5.6,也没问题。2015/12/10, bruce writes: win server2012安装PHP7+fastcgi 想配置zend opcache但是php.ini里没有zend_extension=的选项,还需不需要加入zend_extension="c:\php\ext\opcache.dll"这一行在php.ini里?2015/12/12, kn007 writes: 鸟哥,PGO学习的话,代码含有PHP扩展怎么办? 我代码调用了Memcached扩展,但是编译的时候不带这个mc扩展,sapi/cgi/php-cgi直接报fatal error。 谢谢2015/12/20, lilj writes: @lx 没有解决 @kn007 你可以去下载memcached的php7分支单独编译2015/12/20, lilj writes: @lx 刚才尝试关闭了opcache, 可以扑捉到core。 你可以试一试。 @Laruence 给你的 l***e@php.net 发了一封邮件, 不知道能否收到。 谢谢2015/12/22, lagolas writes: 鸟哥 你好,你能发布一个php7安装配置以及依赖包的帖子吗?网上搜了好多安装,也都是各种问题,依赖包问题,以及配置问题。谢谢~2015/12/22, lagolas writes: 每次编译到这里就这样,centos7 php7.0.1 ext/openssl/.libs/xp_ssl.o: In function `php_openssl_setup_crypto': /usr/local/src/php-src-php-7.0.1/ext/openssl/xp_ssl.c:1599: undefined reference to `SSL_CTX_set_alpn_protos' /usr/local/src/php-src-php-7.0.1/ext/openssl/xp_ssl.c:1604: undefined reference to `SSL_CTX_set_alpn_select_cb' ext/openssl/.libs/xp_ssl.o: In function `php_openssl_sockop_set_option': /usr/local/src/php-src-php-7.0.1/ext/openssl/xp_ssl.c:2305: undefined reference to `SSL_get0_alpn_selected' collect2: error: ld returned 1 exit status make: *** [sapi/cli/php] Error 12015/12/22, 石樱灯笼 writes: 关于“专门为一个项目服务”,这里有什么特别的含义吗? 如果我的php既跑php,又跑其他自己写的php程序,会有问题吗? HugePages那里例子是512M,我的vps如果不足512该怎么做呢?要填小一些吗?2015/12/25, yumanutong writes: 恩恩,还不错。路过的2016/01/19, 烈火青春 writes: 请问鸟哥平常用的什么开发工具?2016/01/24, dearbaba writes: 看了您的博文总结的非常好,您的博客非常不错。我也推荐一个程序员必备的搜索博客问答的网站 http://www.itdaan.com 。2016/01/28, chahualao writes: 辛苦了。2016/03/01, 正山小种属于什么茶 writes: 看到最后,博主说“编译得到的PHP7是为项目量身打造的最高性能的编译版本”,一定要试一下啊.....看评论里大神们已经开始尝试了啊......2016/03/09, terry writes: 正在试水中,7的性能和新特性让人期待。2016/03/26, Jerray writes: Hello,鸟哥,遇到了奇怪的问题 sysctl vm.nr_hugepages=512 这样开了HugePage以后,只要登录phpMyAdmin,FPM就会一直报 WARNING: [pool www] child 785 exited on signal 7 (SIGBUS…… 用gdb查看core dump结果如下 Core was generated by `php-fpm: master process (/data/server/php/etc/php-fpm.conf) '. Program terminated with signal SIGBUS, Bus error. #0 zend_mm_alloc_small (size=, bin_num=8, heap=0x2aaaaac00040) at /data/software/php-7.0.4/Zend/zend_alloc.c:1284 1284 heap->size = size; (gdb) bt #0 zend_mm_alloc_small (size=, bin_num=8, heap=0x2aaaaac00040) at /data/software/php-7.0.4/Zend/zend_alloc.c:1284 #1 zend_mm_alloc_heap (size=, heap=0x2aaaaac00040) at /data/software/php-7.0.4/Zend/zend_alloc.c:1358 #2 zend_mm_realloc_heap (heap=0x2aaaaac00040, ptr=0x0, size=, copy_size=79) at /data/software/php-7.0.4/Zend/zend_alloc.c:1454 #3 0x00000000007abf5d in xbuf_format_converter (xbuf=xbuf@entry=0x7fff8800d7b0, is_char=is_char@entry=1 '01', fmt=0xddce8e "pool %s", ap=ap@entry=0x7fff8800d7f8) at /data/software/php-7.0.4/main/spprintf.c:246 #4 0x00000000007acbca in vspprintf (pbuf=0x7fff8800d8d8, max_len=0, format=, ap=ap@entry=0x7fff8800d7f8) at /data/software/php-7.0.4/main/spprintf.c:847 #5 0x00000000007accb2 in spprintf (pbuf=pbuf@entry=0x7fff8800d8d8, max_len=max_len@entry=0, format=format@entry=0xddce8e "pool %s") at /data/software/php-7.0.4/main/spprintf.c:871 #6 0x00000000008906c5 in fpm_env_init_child (wp=wp@entry=0x1d38000) at /data/software/php-7.0.4/sapi/fpm/fpm/fpm_env.c:142 #7 0x000000000088c412 in fpm_child_init (wp=0x1d38000) at /data/software/php-7.0.4/sapi/fpm/fpm/fpm_children.c:155 #8 fpm_children_make (wp=wp@entry=0x1d38000, in_event_loop=in_event_loop@entry=1, nb_to_spawn=nb_to_spawn@entry=1, is_debug=is_debug@entry=0) at /data/software/php-7.0.4/sapi/fpm/fpm/fpm_children.c:407 #9 0x000000000088c875 in fpm_children_bury () at /data/software/php-7.0.4/sapi/fpm/fpm/fpm_children.c:288 #10 0x0000000000890de6 in fpm_got_signal (ev=, which=, arg=) at /data/software/php-7.0.4/sapi/fpm/fpm/fpm_events.c:77 #11 0x000000000089aed6 in fpm_event_epoll_wait (queue=, timeout=) at /data/software/php-7.0.4/sapi/fpm/fpm/events/epoll.c:147 #12 0x00000000008916b1 in fpm_event_loop (err=err@entry=0) at /data/software/php-7.0.4/sapi/fpm/fpm/fpm_events.c:411 #13 0x000000000088c157 in fpm_run (max_requests=max_requests@entry=0x7fff8800dc78) at /data/software/php-7.0.4/sapi/fpm/fpm/fpm.c:115 #14 0x000000000043fbfc in main (argc=6, argv=0x7fff8800dfa8) at /data/software/php-7.0.4/sapi/fpm/fpm/fpm_main.c:1882 把 vm.nr_hugepages改回0,不会再出现这个问题。2016/03/27, Anonymous writes: 请评价一下laravel框架。谢谢。2016/03/31, ppto writes: php 内核代码在线查看工具, www.phpsourcechm.com 不用只为了看内核代码在本地装ide了。2016/04/01, Emilio Hancox writes: Menos mal que he dado con esta información. No sabe el tiempo que llevaba buscándola. Gracias. Abrazos!!! Masajes Relajantes - Masajes Eróticos - Masajes Tantricos2016/04/23, MYZHANG QJZI writes: 鸟哥。。这个大坑,zend_extension才能开启opcache,使用extension无法开启。。。2016/04/29, yao writes: magento提升仍然有限,感觉magento踩了大坑2016/05/10, PHP程序员雷雪松 writes: 好高端啊!!支持一下鸟哥!!2016/05/12, Name writes: PHP7快了不少。2016/06/05, php_fans writes: which one is original post? http://www.ithome.com.tw/news/1016022016/07/01, 161668 writes: 支持一下。。。2016/07/06, axwing writes: hi,鸟哥: 请教你一个问题,我们使用PHP7中发现,在同时使用zmq和opcache时,当PHP-FPM子进程重启时就会遇到下面这样的错误: “[pool www] child 25531 exited on signal 11 (SIGSEGV) after 0.052158 seconds from start” 不知道有没有发现过这样的问题或者怎么解决,谢谢!2016/07/08, e23 writes: 32e23e322016/07/09, TT writes: 内牛满面啊,为什么改底层结构体。好多扩展得重写。2016/07/13, phpi writes: 7中的use用法和5.4的use不一样么?具体怎么用的? use批量声明?不是用namespace命名,use调用么?有点迷糊,有没有具体实例学习一下2016/07/14, 上海项目管理软件 writes: 好文章 值得推荐2016/07/16, 个人博客 writes: 进来看看、支持一下2016/07/17, scorpion writes: win8.1 curl扩展打不开2016/08/01, johnnyzheng writes: php7不开启opcache也比php5.6开启opcache还要快,这个试了貌似不是这样的呢。2016/08/14, 1 writes: 2122016/08/28, yang writes: [root@cloud src]# sysctl vm.nr_hugepages=512 vm.nr_hugepages = 512 [root@cloud src]# sysctl vm.nr_hugepages vm.nr_hugepages = 198 这种情况是机器内存不足吗?2016/08/29, yang writes: /bin/sh /usr/local/src/php-7.0.10/libtool --silent --preserve-dup-deps --mode=compile gcc -I"/usr/local/include" -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -Iext/iconv/ -I/usr/local/src/php-7.0.10/ext/iconv/ -DPHP_ATOM_INC -I/usr/local/src/php-7.0.10/include -I/usr/local/src/php-7.0.10/main -I/usr/local/src/php-7.0.10 -I/usr/local/src/php-7.0.10/ext/date/lib -I/usr/include/libxml2 -I/usr/local/src/php-7.0.10/ext/sqlite3/libsqlite -I/usr/local/src/php-7.0.10/TSRM -I/usr/local/src/php-7.0.10/Zend -I/usr/local/include -g -O2 -fvisibility=hidden -c /usr/local/src/php-7.0.10/ext/iconv/iconv.c -o ext/iconv/iconv.lo /usr/local/src/php-7.0.10/ext/iconv/iconv.c: 在函数‘php_iconv_string’中: /usr/local/src/php-7.0.10/ext/iconv/iconv.c:590:21: 警告:传递‘libiconv’的第 2 个参数时在不兼容的指针类型间转换 [-Wincompatible-pointer-types] result = iconv(cd, (const char **) &in_p, &in_size, (char **) ^ In file included from /usr/local/src/php-7.0.10/ext/iconv/iconv.c:45:0: /usr/local/include/iconv.h:81:15: 附注:需要类型‘char **’,但实参的类型为‘const char **’ #define iconv libiconv ^ /usr/local/include/iconv.h:83:15: 附注:in expansion of macro ‘iconv’ extern size_t iconv (iconv_t cd, char* * inbuf, size_t *inbytesleft, char* * outbuf, size_t *outbytesleft); ^~~~~2016/08/30, Cindy Ming writes: 鸟哥: 最近我们基于您的yaf对我们一部分的业务逻辑代码做了性能的改进,现在我们遇到一个比较大的问题就是关于php echo的性能,也就是render哪块如果我需要render一个很大的字符串,pts只有200,同样的环境和机器我们其它的业务逻辑可以达到pts 8k多。 字符串:1.5kb 我们的环境: PHP7 + Nginx, 开启了opcache, hugepage,gzip 我们尝试过以下几个方案: 1. ob_start(); 在字符串输出之前 2. 对字符串进行切割:按照SendBufferSize的大小进行切割 然后foreach输出 但是都没有好的提升。 如果我们坚持用php 有什么好的办法 或者我们需要换一个语言。因为性能对于我们来说很重要2016/10/05, bjmayor writes: NB。根据文章修改后,wordpress网站由原来的6.11提升到了14.55。 不过是因为一次性修改的,可能是之前就没有开启Opcache。 效果应该是按你文章顺序来的吧。2016/11/14, Anonymous writes: 安装上面说的做的 系统是centos7 .1 fpm设置是 pm = static pm.max_children = 1024 重启之后 fpm启了好多僵尸进程 如下 不知道什么原因 [php-fpm] 2017/01/05, 美剧天堂 writes: 我用php7+opcache组合,感觉速度是快,但是我想知道这样对内存的占用是不是也高了2017/01/07, PresidentEscort writes: Very interesting, thank you for the useful information.2017/01/13, 神圣计划客户端 writes: 学习了,很实用,谢谢。2017/02/07, phper writes: 高级php技术交流 11153486,欢迎各位phper一起加群交流学习下。2017/04/29, 雅思预测 writes: 速度快了很多,不知道Hugepage对于php的运行提速有多大作用。2017/05/29, bullet force writes: 让你的PHP7更快之Hugepage , 首先在系统中开启HugePages, 然后开启Opcache的huge_code_pages.2017/10/09, 小萌希奥纸尿裤 writes: 真是不是错哦!2017/10/25, php优化加速:centos 6.5 开启 Zend Opcache_杨圣亮的个人网站 writes: [...] 随着php7的到来,php的速度得到了很大的提升,然而不幸的是,php7较新,目前大多数的程序依然只支持在5.x系列版本的php上运行。以前用过xcache之类的php缓存库,以前没有特别关注,觉得开个缓存组件就够了,实际上打开xcache确实能得到不小的速度提升,但在使用drupal8的时候,我感受到了什么是龟速,偶然的机会,到了风雪之隅的网站,这是大神级的php人,php开发组核心组人员,中国惟一一位在php核心开发成员。那篇:让PHP7达到最高性能的几个Tips 不禁让我心旷神怡,php7可以,php5当然也可以。 [...]2017/11/10, PHP笔记 – 初出茅庐 writes: [...] 让PHP7达到最高性能的几个Tips [...]2017/11/20, 数据库 writes: 这么快呀。谢谢分享Copyright © 2010 风雪之隅 版权所有, 转载务必注明. 该Feed只供个人使用, 禁止未注明的转载或商业应用. 非法应用的, 一切法律后果自负. 如有问题, 可发E-mail至my at laruence.com.(Digital Fingerprint: 73540ba0a1738d7d07d4b6038d5615e2)

Related Posts:

让你的PHP7更快(GCC PGO)PHP的性能演进(从PHP5.0到PHP7.1的性能全评测)Yaconf – 一个高性能的配置管理扩展在Qcon 2015 北京上的演讲PPT – PHP7PHP7 VS HHVM (Wordpress)一个关于Zend O+的小分享Weibo LAMP演变 – 6月在上海分享的PPT

文章来源:

Author:Laruence
link:http://www.laruence.com/2015/12/04/3086.html