• php OPcache


    众所周知php是一种解释型语言,它的执行可分为如下几个流程:

    1. Scanning(Lexing) ,将PHP代码转换为语言片段(Tokens)
    2. Parsing, 将Tokens转换成简单而有意义的表达式
    3. Compilation, 将表达式编译成Opocdes
    4. Execution, 顺次执行Opcodes,每次一条,从而实现PHP脚本的功能。

    这样一来的话,对于同一个文件,反复请求,就要不断解析、编译和执行PHP脚本,消耗过多资源。

    php传统运行方式:

    图示

    为了解决这个问题,opcode缓存技术应运而生。

    那么什么是 opcode 缓存?

    当解释器完成对脚本代码的分析后,便将它们生成可以直接运行的中间代码,也称为操作码(Operate Code,opcode)。Opcode 缓存就是将编译好的Opcode码缓存在内存中,下次再执行这个脚本时,直接会去找到缓存下的opcode码,直接执行最后一步,而不再需要中间的步骤了,其目地是避免重复编译,减少 CPU 和内存开销。

    当解释器完成对脚本代码的分析后,便将它们生成可以直接运行的中间代码,也称为操作码(Operate Code,opcode)。Opcode 缓存就是将编译好的Opcode码缓存在内存中,下次再执行这个脚本时,直接会去找到缓存下的opcode码,直接执行最后一步,而不再需要中间的步骤了,其目地是避免重复编译,减少 CPU 和内存开销。

    缓存运行方式:

    图示

    opcache就是一种opcode缓存工具。

    Opcache其他的缓存工具最大的不同,也可以说是优势,就是它已经进入php源码树,成为官方产品,会一直跟着php更新,而其他的已经很久不更新了,目前对于新版的php都不支持或者兼容性很差。其次,经过测试,opcache的效率也比其他工具高。

    那么如何开启使用opcache呢?

    既然opcahce已经进入php源码树,那么作为内置的工具,开启方式肯定很简单了,下面便是推荐配置:

    zend_extension=.././...php_opcache.dll(路径)
    opcache.memory_consumption=128   #共享内存
    opcache.interned_strings_buffer=8   #存储临时字符串
    opcache.max_accelerated_files=4000   #缓存文件数
    opcache.revalidate_freq=60  #缓存时间
    opcache.fast_shutdown=1
    opcache.enable_cli=1 
    opcache.enable=1   #是否开启opcode缓存
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    你只需要将前面的;去掉就可以了。

    当然opcache有很多配置,这里就不一一列举,上面这几条是标配,可以满足一般需求。

    理论上讲,php文件越大,逻辑越复杂,那么opcache的效果就越明显,而且在速度和抗并发上有非常大的作用。

    在本地环境测试结果如下(电脑性能有限):

    图示

    服务器测试:

    这里写图片描述

    图示

    有明显的效率提升。

    需要注意到是,opcache既然会缓存住文件第一次执行的opcode,那么在测试环境就不要开了,原因你懂得,开发时代码改来改去,结果却不变………..

    要手动清除opcache缓存,需要运行opcache_reset()来清除,所以线上如果配置了opcache,需要清除的话可以用这个函数。

    转自: http://qqfe.org/archives/240?utm_source=tuicool&utm_medium=referral

    鸟哥的解释

    http://www.laruence.com/2008/06/18/221.html

    另一个解释

    http://www.pdosgk.com/index.php/Home/News/show/id/172417.html

  • 相关阅读:
    vbScript首字拼音查询
    C#读取U盘序列号
    下拉 回车 筛选
    Oracle的汉字转拼音首字母的函数
    sql 触发器禁止和启用
    List.FindAll 方法
    MyControl 常用操作
    List.Find 方法
    regsvr32 C:\WINDOWS\system32\cell32.ocx
    2222222
  • 原文地址:https://www.cnblogs.com/clphp/p/7811453.html
Copyright © 2020-2023  润新知