php require 编译,深入PHP编译缓存 | 学步园

如果你想提高PHP项目的运行速度,编译缓存应该是你的选择之一。安装一个编译缓存能到产生极大的性能提升。目前最常见的PHP编译缓存工具有:APC,Accelerator,xcache(国产)等等。关于三者的安装和比较在这里就不阐述了。

那么什么是编译缓存呢?为什它能产生这么令人印象深刻的性能提升呢?为了更好的理解这些,我们首先需要了解Zend Engine执行PHP代码的过程及原理。在调用PHP执行代码的时候,通常需要下面两步:

1、编译过程。PHP读取文件,并解析该文件,然后生成能够在Zend Engine虚拟机上执行的中间码(通常是opcode)。

2、执行过程。PHP直接执行中间码opcode.

在这个过程中,有几点是需要注意的:

1、对许多代码文件说,特别是含有很多包含文件(include or require)。它们需要花费更多的时间和解析并产生中间代码。

2、即使PHP代码文件没有发生改变,这个执行过程还会严格的按照流程执行。也就是说,无论你的应该程序是否发生改变,每次调用的时候,都需要重新编译。(其实这就是编译缓存存在的理由)

3、这个流程不仅仅发生在主要的代码文件,对于每一次的include和require来说,都会执行这个流程。(这是可以继续优化的)

下图显示了在没有编译缓存的情况下,执行一个文件的流程。

attachment.php?s=98978d2fab3f4b1ff098aac35c8dbf7e&attachmentid=5187&d=1228715959

编译缓存就是用来缓存PHP执行的中间码OPCODE,从而提升PHP执行速度的yi中工具。加入编译缓存后的执行流程如下:

attachment.php?s=98978d2fab3f4b1ff098aac35c8dbf7e&attachmentid=5188&d=1228715959

编译缓存去掉了执行PHP过程中的解析过程(类似JAVA编译成CLASS文件),所以它对含有大量PHP代码的应用程序是非常有效的。通常情况下可以提升2-3倍以上的速度。对于包含大量include文件的项目,编译缓存更现实出它的优越性。

PS:在PHP项目中,过多的include文件会降低程序性能的,但include文件本身可以带来发开发和维护的方便性。如何取舍就看具体应用了。另外编译缓存是对具体的PHP文件的,也就是说include过程本身是没有被编译缓存的。

关于"include过程没有被编译缓存,即include与require都是运行时"的注解:

引用:

比如现在有两个文件:main.php 和tobeInclude.php

其中main.php中有这样的语句include 'tobeInclude.php'

假设中间码的后缀为.op(实际上不是这样)

那么加上缓存cache后 main.php=>main.op , tobeInclude.php=>tobeInclude.op

但是PHP在执行main.php的时候,她还是需要去解析main.op中的include命令,去调用tobeInclude.op的内容。

具体流程是这样的。

...=>执行main.op=>执行tobeInclude.op=>...

而不是之间简单的执行main.op

所以说“过多的include文件会降低程序性能的”

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值