2011-08-19 91 views
8

PHP通常被编译为在执行时由Zend引擎操作。将PHP编译为操作码并执行操作码

每次可以使用像APC这样的操作码缓存来将操作码保存到共享内存中并重新使用时,可以跳过编译。

好吧,现在看来有没有解决方案,但只是编译PHP操作码,并使用它。与您使用Java的方式类似。

但是为什么?我想知道这个B/C这是一个非常明显的想法,所以我想这是有原因的。

编辑

的核心问题是:

不会让PHP编译使操作码缓存多余?

反对它的唯一“原因”是你不能在现场系统上修复某些东西......无论如何这是坏坏的坏习惯。

+3

还有更好的aproach by facebook ...看嘻哈的PHP https://github.com/facebook/hiphop-php –

+0

[Zend Guard](http://www.zend.com/en/产品/警卫/)已经有这个支持闭源可感染的项目? –

+1

容易...我的问题不是关于将PHP转换为C++。这是关于操作码。 – Raffael

回答

2

你给出了一个反对它的理由。

另一个非常重要的问题是,如果将运行时的编译与运行时的时间分开,而且运行时的硬件方面也会有所不同,那么您很快就会遇到复杂的相关性问题 - 你试图在PHP 5.3运行时运行由PHP 5.1生成的操作码?

它也使得代码更难调试 - 因为调试器必须将操作码映射回源代码。

但是,您似乎并没有问过一个非常重要的问题,更别说是回答了预先生成操作码的好处是什么?

在运行之前编译操作码会比缓存操作码有明显的好处吗?差别不会很小。

当然,对于HipHop存在的理由是,在的某些功能为代价的本地编译PHP代码runs faster比PHP与指令缓存。但这是完全不同的。

您认为只有服务器上的操作码可以提高安全性(默默无闻)吗?

+0

好吧,好吧,它似乎没有向下兼容的操作码定义的波动是主要障碍。尽管调试没有理由,但是可以在开发环境中进行调试,而无需预编译。我不是在谈论安全。 – Raffael

+0

所以你建议使用不同于软件生产的软件进行测试/调试? – symcbean

+1

好吧,一个C++开发人员也不会调试机器代码......我是对的还是对吗? – Raffael