• 新一代 PHP 加速插件 Zend Opcache


    参考:http://www.laogui.com/Zend-Opcache

    大家知道目前PHP的缓存插件一般有三个:APCeAcceleratorXCache,但未来它们可能都会消失,因为PHP 5.5已经集成Zend Opcache,功能和前三者相似但又有少许不同,缓存速度据说比它们更快(注意:只是据说,我没测试过)。

    这几个PHP加速插件的主要原理都相同,就是把PHP执行后的数据缓冲到内存中从而避免重复的编译过程,能够直接使用缓冲区已编译的代码从而提高速度,降 低服务器负载,它们的效率是显而易见的,像drupal这种庞大的CMS,每次打开一个页面要调用数十个PHP文件,执行数万行代码,效率可想而知,在安 装APC等加速器后打开页面的速度明显加快。

    Zend Opcache 已经集成在了PHP 5.5里面,编译安装PHP5.5的时候加上--enable-opcache就行了。但也支持低版本的 PHP 5.2.*, 5.3.*, 5.4.*,未来会取消对5.2的支持,下面是我在PHP 5.4下的安装方法:

    依次执行下面的命令
    wget http://pecl.php.net/get/zendopcache-7.0.2.tgz
    tar xzf zendopcache-7.0.2.tgz
    cd zendopcache-7.0.2
    phpize
    如果找不到phpize 的话自己找PHP路径,我的在/usr/local/php/bin/phpize,下面这行也要按你的php.ini路径自行修改
    ./configure --with-php-config=/usr/local/php/bin/php-config
    make
    make install


    如果显示Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-zts-20100525/ 表示安装完成,下面要修改php的配置文件让它生效

    PHP5.3.27 的扩展php_opcache.dll

    测试平台:Windows 2008 R2 x64 (IIS7.5 FastCGI,Apache2.2.23,Apache2.4.3, Nginx 1.2.9)

    包含 Non Thread Safe 和 Thread Safe

    如果用的是 FastCGI 请使用 Non Thread Safe 版

    php_opcache.dll 的使用方法


    在 php.ini 的最后面加入下面几行

    [opcache]

    zend_extension = "D:phpecorgPHPextphp_opcache.dll" 

    //或 linux下:zend_extension=/usr/local/php/lib/php/extensions/no-debug-zts-20100525/opcache.so

    opcache.enable = 1

    opcache.enable_cli = 1

    opcache.memory_consumption = 256

    opcache.interned_strings_buffer = 8

    opcache.max_accelerated_files = 4096

    opcache.max_wasted_percentage = 5

    opcache.validate_timestamps = 1

    opcache.revalidate_freq = 60

    opcache.fast_shutdown = 1

    opcache.optimization_level = 0xffffffff



    128意思是给它分配128M内存,然后重启apache,用phpinfo查看是否生效,显示下面的信息就说明生效了



    在phpinfo页面的下面可以看到的运行状态



    如果嫌这个不直观可以装个PHP文件查看,地址在https://gist.github.com/ck-on/4959032,把上面的代码保存为一个php文件放到你的网站目录下面打开就可以看到:



    命中率100%。

    Zend Opcache因为最近才出来,现在还是测试版,相信在未来几年会越来越流行,现在真没多少人用。目前测试来看还比较稳定,我已经在 vbulletin论坛下运行了几天,不过没看出和APC、xcache有啥区别,只是最近我的APC老让apache崩溃(可能是apache和php版本太新的原因),想换个试试,毕竟Zend Opcache和APC都是php官方的,值得信赖。


    重新启动apache, 打印phpinfo();信息后, 即可找到Zend OPcache信息. 如图片

    在phpinfo()信息中, 目前来看有两条信息犹为重要:

    Cache hits (高级缓存命中)
    Cache misses (高级缓存未命中)

    在这两条信息中即可观察缓存运行情况, 一目了然
    高速缓存带来哪些优化呢? 对代码运行有多大帮助?

    我们做个测试, 验证一下什么是opcache.

    < ?php
    echo ‘opcache';
    ?>

    这是一段非常简单的php代码, 请保存为demo.php文件然后访问, 随意刷新, Cache hits数值会不停地增加, 说明起作用了,
    然后你修改代码为:

    < ?php
    echo ‘cache new';
    ?>

    再刷新demo.php, 应该可以看到效果, 打印出来的值仍然是opcache, 即源码被缓存了, 它不再解析demo.php文件, 试着不停地刷新, 检测多少秒后才更新.
    可设置: opcache.force_restart_timeout=180 的时间来控制更新速度.

    这 就类似于web项目中的静态文件缓存一下, 比如我们加载一个网页, 浏览器会自动帮我们把jpg, css缓存起来, 唯独php没有缓存, 每次均需要open文件, 解析代码, 执行代码这一过程, 而opcache即可解决这个问题, 代码会被高速缓存起来, 提升访问速度.

  • 相关阅读:
    nginx配置404
    js修改浏览器url
    mysql DATE_ADD DATE_SUB
    centos6.5 ssh安全优化,修改默认端口名,禁止root远程登录
    关于mysql varchar 类型的最大长度限制
    IIS7多域名绑定同一物理目录,设置不同默认文档的解决方案
    获取某个数据所在数据列表中的行数 mysql
    安全模式不能删除使用SET SQL_SAFE_UPDATES = 0;
    Failed to run the WC DB work queue associated with 错误的解决
    mysql正则匹配解决查询一个字段是否在另一个字段中
  • 原文地址:https://www.cnblogs.com/Alight/p/3966335.html
Copyright © 2020-2023  润新知