现在我们用的PHP 5.4优化工作通过更有效的查找类变量的名字在运行时加载类,因为当一个我们已经知道什么是所有的变量,假设没有动态变量是后来添加的。
更多的优化可以做PHP引擎也知道这个类型的变量和函数的返回值提前。这是特别真实,而不是在当前Zend引擎版本,因为它通过口译编译后的Zend操作码,而是当使用JIT(及时)PHP编译器引擎。 JIT编译器至少提前一代Zend引擎2用于PHP 5。自2004年以来。JIT编译器可以使PHP运行得更快通过生成和执行本机代码优化当前的运行CPU。 目前JIT编译器引擎试图猜变量和函数返回值类型从PHP代码上下文使生成的机器码更有效率。例如考虑以下代码: $length = strlen($string);
trlen是一个函数,它总是返回一个整数。因此,JIT编译器可以声明一个变量integer类型的因为,可以肯定的是它总是一个整数。这种类型的值类型猜称为类型推断。当变量的类型不能猜肯定、JIT编译器使用变量的类型叫做变体。
各种变量的使用是非常低效的,因为操作与这些变量可能需要许多类型转换,因为我们不能承担什么类型是当前值存储在该变量。这意味着JIT编译的代码将使用更多的本地机器代码,更多的内存,更多的CPU周期,从而减少性能。
在这个情况下,JIT编译器无法猜出变量类型的上下文,它将是有益的,如果程序员告诉明确什么类型的变量。这不仅会使生成的代码变得更高效,但是最终会使JIT编译速度,因为JIT编译器就不会使变量类型的猜测。
传统的PHP核心开发人员一直不愿接受任何走向一个更加严格的变量类型的PHP语言。
但这个想法,我的建议是不要让PHP严格类型化的语言。这个想法是为了让PHP开发人员选择显式声明的类型至少一些变量,所以JIT编译器可以做一个更好的工作产生更高效的本地机器代码在更少的时间。
对于PHP5. x / Zend引擎2声明的变量和函数类型值几乎是有用的动态特性将Zend引擎2。
然而,对于一个最终的PHP 6基于Zend引擎3支持JIT编译,任何类型的暗示,PHP代码可以通过JIT引擎将有助于使编译PHP代码更加高效。
据我所知,该计划为PHP 6和Zend引擎3不公开,如果它们存在。但它既不是很快也不晚,讨论他们会。他们很可能解决这个问题的效率有视力的JIT编译器的好处。
本文地址:http://www.eobo.cn/news/395.html
|