<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Php，php7 on 勇气</title><link>https://courages.us/tag/phpphp7/</link><description>Recent content in Php，php7 on 勇气</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Mon, 01 Jun 2015 09:16:04 +0800</lastBuildDate><atom:link href="https://courages.us/tag/phpphp7/index.xml" rel="self" type="application/rss+xml"/><item><title>&lt;img src="http://courages.us/wp-content/uploads/2015/05/logo.gif" alt="PHP" width="40" height="20"&gt;PHP 7</title><link>https://courages.us/php-7/</link><pubDate>Sat, 30 May 2015 18:18:49 +0800</pubDate><guid>https://courages.us/php-7/</guid><description>&lt;p&gt;最近学习了&lt;a class="link" href="http://www.infoq.com/cn/presentations/php7-new-engine-for-good-old-train" target="_blank" rel="noopener"&#10; &gt;PHP 7介绍的视频&lt;/a&gt;，看到了PHP每一天都在变好。PHP 将会带来许多新的特性：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;抽象语法树，在编译opcode时能够做更多的优化&lt;/li&gt;&#10;&lt;li&gt;INT64提升，支持大于2GB的字符串/文件上传&lt;/li&gt;&#10;&lt;li&gt;标量类型声明，可以声明参数类型&lt;/li&gt;&#10;&lt;li&gt;返回值声明，可以声明返回值类型&lt;/li&gt;&#10;&lt;li&gt;新操作符，&amp;lt;=&amp;gt;操作符，大于返回1，等于返回0，小于返回-1&lt;/li&gt;&#10;&lt;li&gt;统一变量语法；&lt;/li&gt;&#10;&lt;li&gt;引擎异常改进，函数不存在的fata error转为异常可以捕获处理&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;等等。&lt;br&gt;&#10;除了新特性外，PHP 7使用了新引擎&lt;a class="link" href="https://wiki.php.net/phpng" target="_blank" rel="noopener"&#10; &gt;PHP NG&lt;/a&gt;，性能得到了巨大的提升（&lt;a class="link" href="http://www.laruence.com/2014/12/18/2976.html" target="_blank" rel="noopener"&#10; &gt;与HHVM对比&lt;/a&gt;）。&lt;br&gt;&#10;这里的性能优化比较有意思， 非常值得借鉴学习。为什么要进行重构：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;PHP 5.4之后php引擎的性能提升已经不大，Zend VM已经高度优化&lt;/li&gt;&#10;&lt;li&gt;PHP JIT(Just In Time Compiler)项目在benchmakr上性能提升巨大（8倍），但是在实际业务提升不大（离开实际业务谈benchmark都是耍流氓）&lt;/li&gt;&#10;&lt;li&gt;分析wordpress项目发现瓶颈并不在Zend VM上面，21% CPU时间花在了内存管理，12%时间花在了hashTable操作，30% CPU时间花在了内部调用，25% CUP时间花在了VM&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;首先应当分析实际业务的性能消耗占比，确定需要优化的地方。JIT仅仅优化了Zend VM，提升是有限的，需要对其他地方（内存操作，HashTable，函数调用）也进行优化，所以才进行的重构。&lt;/p&gt;&#10;&lt;p&gt;PHP NG在很多方面做了优化：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;标量类型不做引用计数，zval分配在堆上，增加Referance类型&lt;/li&gt;&#10;&lt;li&gt;增加类型zend string，将字符串与值连续分配，避免CPU cache miss，避免二次读内存&lt;/li&gt;&#10;&lt;li&gt;原本的HashTable变为zend array，数组值为zval，内存一次分配，提升data locality，避免CPU cache miss&lt;/li&gt;&#10;&lt;li&gt;函数调用优化，减少重复入栈&lt;/li&gt;&#10;&lt;li&gt;参数解析优化，将不确定转化为确定&lt;/li&gt;&#10;&lt;li&gt;zend_qsort排序优化&lt;/li&gt;&#10;&lt;li&gt;内存管理优化，减少CPU cache miss&lt;/li&gt;&#10;&lt;li&gt;常用函数优化&lt;/li&gt;&#10;&lt;li&gt;字符串拼接优化，减少内存访问次数&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;通过这一系列的优化，改进了PHP的内存操作，改进了HashTable操作，改进了内部函数调用，降低了CPU 时间消耗，这时候再来做PHP JIT优化就有意义。PHP 7接下来仍然会继续优化，迁移常用扩展。&lt;br&gt;&#10;许多优化都是微小的，但是积累起来后却是巨大，特别是对于微博这样的网站，1%的性能提升都意义非凡。&lt;br&gt;&#10;优化是具有专向性的，对A场景的优化可能并不适合B场景，所以需要分析实际的业务中的瓶颈和调用频次，权衡优化的方向。&lt;br&gt;&#10;现在距离10月份发布已经不远了，大家也可以检查自己项目是否兼容PHP 7，性能提升多少。&lt;/p&gt;&#10;&lt;p&gt;参考链接：&lt;br&gt;&#10;&lt;a class="link" href="http://www.infoq.com/cn/presentations/php7-new-engine-for-good-old-train" target="_blank" rel="noopener"&#10; &gt;PHP7 – New engine for good old train&lt;/a&gt;&lt;br&gt;&#10;&lt;a class="link" href="http://www.laruence.com/2014/12/18/2976.html" target="_blank" rel="noopener"&#10; &gt;PHP7 VS HHVM (WordPress)&lt;/a&gt;&lt;br&gt;&#10;&lt;a class="link" href="https://wiki.php.net/phpng" target="_blank" rel="noopener"&#10; &gt;PHPNG (next generation)&lt;/a&gt;&lt;br&gt;&#10;&lt;a class="link" href="http://www.sitepoint.com/php-fights-hhvm-zephir-phpng/" target="_blank" rel="noopener"&#10; &gt;What to Expect When You’re Expecting: PHP 7, Part 1&lt;/a&gt;&lt;br&gt;&#10;&lt;a class="link" href="https://philsturgeon.uk/php/2015/03/15/php-7-feature-freeze/" target="_blank" rel="noopener"&#10; &gt;PHP 7 Feature Freeze&lt;/a&gt;&lt;br&gt;&#10;&lt;a class="link" href="http://hhvm.com/" target="_blank" rel="noopener"&#10; &gt;HHVM&lt;/a&gt;&lt;br&gt;&#10;&lt;a class="link" href="http://wuduoyi.com/note/hhvm/" target="_blank" rel="noopener"&#10; &gt;HHVM 是如何提升 PHP 性能的？&lt;/a&gt;&lt;br&gt;&#10;&lt;a class="link" href="http://www.sitepoint.com/php-fights-hhvm-zephir-phpng/" target="_blank" rel="noopener"&#10; &gt;PHP Fights HHVM and Zephir with PHPNG&lt;/a&gt;&lt;br&gt;&#10;&lt;a class="link" href="https://github.com/rlerdorf/php7dev" target="_blank" rel="noopener"&#10; &gt;rlerdorf/php7dev&lt;/a&gt;&lt;br&gt;&#10;&lt;a class="link" href="http://akrabat.com/building-and-testing-php7/" target="_blank" rel="noopener"&#10; &gt;Building and testing the upcoming PHP7&lt;/a&gt;&lt;br&gt;&#10;&lt;a class="link" href="http://www.zimuel.it/install-php-7/" target="_blank" rel="noopener"&#10; &gt;Install PHP 7 on Ubuntu 14.04&lt;/a&gt;&lt;/p&gt;&#10;</description></item></channel></rss>