【问题标题】:What is a bytecode cache and how can I use one in PHP?什么是字节码缓存,我如何在 PHP 中使用它?
【发布时间】:2011-04-10 15:58:22
【问题描述】:

我在网上搜索并了解到可以编译 PHP 代码以提高性能。 但是怎么做呢? 我可以编译面向过程和面向对象的 PHP 代码吗?

【问题讨论】:

    标签: php caching bytecode


    【解决方案1】:

    执行PHP脚本的基本思路是分两步:

    • 首先:以纯文本形式编写的 PHP 代码被编译为操作码
    • 然后:那些操作码被执行


    当您有一个 PHP 脚本时,只要不修改,操作码将始终相同;因此,每次执行该脚本时都进行编译阶段有点浪费 CPU 时间。

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

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


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

    一旦正确安装和配置了 APC,您就无需在 PHP 代码中进行任何修改:APC 将缓存操作码,仅此而已 - 该过程对您的应用程序完全不可见。

    【讨论】:

    • 所以它是与 C/C++ 完全不同的场景......我们在 .c 文件中编写代码并编译为 .exe 并运行该 exe 文件!这个案子呢?
    • 是的,这是一个完全不同的想法:C/C++ 是编译型语言,而 PHP 更多的是解释型语言 ;;;如果你想将你的 PHP 代码编译成某种可执行文件,你可以看看 HipHop (github.com/facebook/hiphop-php/wiki)——但请注意,这通常不是必需的 (I'实际上,我们从未见过有人在生产服务器上使用 HipHop——当然除了 facebook...但是你的网站那么重要吗?)
    • 不,从不喜欢 Facebook :),但是我可以在我的 PHP 13000 行代码上使用 APC,它是用程序风格编写的吗?
    • 如果你只举一个简单的例子来说明如何使用APC会更好
    • 是的,你可以使用 APC (你的代码无所谓) ;只需安装扩展,编辑您的 php.ini 以启用它并配置它;重新启动 Apache,以便将修改考虑在内;等瞧;你没有别的事可做。
    【解决方案2】:

    但是怎么做呢?

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

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

    $timer_start = microtime(1);
    

    最后一行:

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

    如果时间超过0.01,你有其他的东西要先优化,因为你会注意到操作码缓存没有效果。

    【讨论】:

    • 请多解释一下,如果能给出一些PHP代码就更好了!
    • 说来话长。简而言之,你必须确定你是否真的需要操作码。世界上 99.99% 的网站不使用它,因为它对他们毫无用处。
    • 这是一个相当大胆的声明。大多数人不使用 APC,仅仅是因为他们在共享主机上,因此无法使用它。但据我所知,几乎所有虚拟主机或专用主机都使用 APC。有很多事情不会改善您的网站性能,但 APC 绝对可以(可以衡量,只有 Google)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-27
    • 2021-08-15
    • 2020-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多