从我的理解,如果你使用PHP缓存程序如APC,eAccelerator等,那么操作码将被存储在内存中,以便在后续请求时更快执行。我的问题是,为什么不总是更好/更快地编译你的脚本,假设你使用编译器如phc甚至是HPHP(尽管我知道他们在动态构造方面有问题)?为什么还要存储操作码,因为Zend引擎需要重新读取操作码,因为Zend引擎使用C函数来执行操作,而您只需编译并跳过该步骤?PHP缓存问题vs编译
回答
你不能简单地编译为c,并让你的php脚本以相同的方式执行。 HPHP做了真正的编译,但它不支持php特性的整个超集。
其他编译器实际上只是在二进制文件中嵌入了一个php解释器,所以你并没有真正编译代码。
PHP并不打算编译。操作码缓存非常快,足以满足99%的应用程序。如果您拥有Facebook的流量级别,并且您已经优化了后端数据库,则编译可能是提高性能的唯一方法。
PHP不是std c库的薄层。
gracias抽出时间回复。当你说“PHP不是std c库的薄层”时,你能进一步解释你的意思吗? – blacktie24
如果PHP没有eval()
,那么可能会以(相对)简单的方式进行直接PHP->编译的二进制翻译。但由于PHP本身可以通过eval()动态地动态构建/执行脚本,因此不可能执行全功能二进制。任何二进制文件都必须包含整个PHP,因为编译器不知道你的动态代码可以做什么。你会从一个小的1或2k脚本转换成一个巨大的数兆字节的二进制文件。
thx回复!假设我不使用eval(),并且解决了动态构造的问题(在另一个线程中获得了关于编译器和动态构造的另一个问题,我在原始问题下发布了这个问题作为注释),那么它会是高效地编译? – blacktie24
我不知道'高效',但不明白为什么它不可能。 –
- 1. PHP缓存问题
- 2. PHP缓存问题
- 3. php缓存vs cookie
- 4. TLB翻译vs缓存
- 5. Apache/PHP缓存头问题
- 6. 一般编译问题VS 2010
- 7. boost :: Mac vs Linux编译问题
- 8. 性能问题 - 编译速度缓慢
- 9. 编译资产缓存文件的守护测试问题
- 10. MVC 3多租户和查看编译缓存问题
- 11. VS 2005编译保存C#
- 12. 缓存问题
- 13. 缓存问题
- 14. 缓存问题
- 15. 缓存问题
- 16. 编译问题
- 17. 编译问题
- 18. 编译问题
- 19. 缓存编译的Javascript
- 20. 编译查询缓存?
- 21. Scala的编译器缓存?
- 22. CKEditor缓存问题,编辑皮肤css
- 23. 用php缓存图像的问题
- 24. PHP/HTML/MySQL的URL缓存问题
- 25. PHP filemtime缓存不同天的问题
- 26. PHP缓存或会话问题
- 27. 缓存问题uinsg php和jquery
- 28. PHP动态文件缓存问题
- 29. FIFO缓存vs LRU缓存
- 30. UIPageViewController缓存问题
还有这个问题的第2部分,我开始一个单独的线程:http://stackoverflow.com/questions/6525187/why-are-dynamic-constructs-difficult-for-php-compilers-hphp – blacktie24