什么是字节码缓存?如何在PHP中使用字节码缓存?

什么是字节码缓存?如何在PHP中使用字节码缓存?,php,caching,bytecode,Php,Caching,Bytecode,我在网上搜索,发现PHP代码可以编译以提高性能。 但是怎么做呢? 我可以同时编译过程性和面向对象的PHP代码吗?执行PHP脚本的基本思想分为两个步骤: 第一:用纯文本编写的PHP代码被编译成操作码 然后:执行那些操作码 当您有一个PHP脚本时,只要它没有被修改,操作码就会始终相同;因此,每次执行脚本时都要执行编译阶段,这有点浪费CPU时间 为了防止这种冗余编译,您可以使用一些操作码缓存机制 一旦PHP脚本被编译成操作码,这些操作码将保存在RAM中——并在下次执行脚本时直接从内存中使用;防止

我在网上搜索,发现PHP代码可以编译以提高性能。 但是怎么做呢?
我可以同时编译过程性和面向对象的PHP代码吗?

执行PHP脚本的基本思想分为两个步骤:

  • 第一:用纯文本编写的PHP代码被编译成操作码
  • 然后:执行那些操作码

当您有一个PHP脚本时,只要它没有被修改,操作码就会始终相同;因此,每次执行脚本时都要执行编译阶段,这有点浪费CPU时间

为了防止这种冗余编译,您可以使用一些操作码缓存机制

一旦PHP脚本被编译成操作码,这些操作码将保存在RAM中——并在下次执行脚本时直接从内存中使用;防止一次又一次地进行编译


使用最多的操作码缓存是APC-Alternative PHP缓存:

  • 请参阅PECL上的以下载
  • 这是
一旦正确安装和配置了APC,您就不必在PHP代码中修改任何内容:APC将缓存操作码,仅此而已——这个过程对于您的应用程序来说是完全不可见的

但是怎么做呢

简单。
首先,您必须进行一些分析,以确保代码解析是站点的瓶颈,并且所有其他明显的瓶颈,如未优化的数据存储、缓慢的算法、数据挖掘和网络调用都得到了优化

确定是否需要操作码缓存的最简单方法是将这一行放在最常用页面的顶部

$timer_start = microtime(1);
最后这一行:

echo "Generated in ".(round((microtime(1) - $timer_start),4))." sec.";

如果时间超过
0.01
,您需要首先优化其他内容,因为您不会注意到操作码缓存的影响。

因此它与C/C++完全不同。。。我们在.c文件中编写代码,编译成.exe并运行该exe文件!这个例子呢?是的,这是一个完全不同的想法:C/C++是编译语言,而PHP更多的是解释型的;;;如果您想将PHP代码编译成某种可执行文件,可以看看HipHop()——但请注意,这通常不是很必要(我实际上从未见过任何人在生产服务器上使用HipHop——当然,除了facebook……但您的网站有那么重要吗?)不,永远不喜欢facebook:),但是我可以在我的PHP13000行代码中使用APC吗?它是以过程风格编写的?如果您只给出一个关于如何使用APC的简单示例会更好。是的,您可以使用APC(您的代码不重要);只需安装扩展,编辑php.ini以启用它并对其进行配置;重新启动Apache,以便考虑修改;瞧;您没有其他事情要做。请再解释一下,如果您能给出一些PHP代码,那就更好了!说来话长。简而言之,您必须确定是否真的需要操作码。世界上99.99%的网站不使用它,因为它对他们来说毫无用处。这是一个相当大胆的说法。大多数人不使用APC,只是因为他们在共享主机上,因此不能使用它。但据我所知,虚拟主机或专用主机上几乎所有人都使用APC。有很多东西不会改善你的网站性能,但APC确实是这样(可以测量,只有谷歌)。