返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >PHP的优化加速组件Opcache怎么使用
  • 100
分享到

PHP的优化加速组件Opcache怎么使用

2023-06-27 18:06:43 100人浏览 八月长安
摘要

这篇文章主要讲解了“PHP的优化加速组件Opcache怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“php的优化加速组件Opcache怎么使用”吧!Opcache是一种通过将解析的P

这篇文章主要讲解了“PHP优化加速组件Opcache怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“php的优化加速组件Opcache怎么使用”吧!

Opcache是一种通过将解析的PHP脚本预编译的字节码(Operate Code)存放在共享内存中来避免每次加载和解析PHP脚本的开销,解析器可以直接从共享内存读取已经缓存的字节码(Operate Code),从而大大提高PHP的执行效率。

PHP的优化加速组件Opcache怎么使用

为什么要使用opcode缓存?

这得从PHP代码的生命周期说起,请求PHP脚本时,会经过五个步骤,如下图所示: PHP的优化加速组件Opcache怎么使用

Zend引擎必须从文件系统读取文件、扫描其词典和表达式、解析文件、创建要执行的计算机代码(称为Opcode),最后执行Opcode。每一次请求PHP脚本都会执行一遍以上步骤,如果PHP源代码没有变化,那么Opcode也不会变化,显然没有必要每次都重行生成Opcode,结合在WEB中无所不在的缓存机制,我们可以把Opcode缓存下来,以后直接访问缓存的Opcode岂不是更快,启用Opcode缓存之后的流程图如下所示: PHP的优化加速组件Opcache怎么使用

PHP opcode原理

Opcode是一种PHP脚本编译后的中间语言,就像Java的ByteCode,或者.net的MSL,举个例子,比如你写下了如下的PHP代码:

echo "Hello World";  $a = 1 + 1;  echo $a;?>

PHP执行这段代码会经过如下4个步骤(确切的来说,应该是PHP的语言引擎Zend)

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

PHP opcache介绍

Optimizer+(Optimizer+于2013年3月中旬改名为Opcache),OPcache通过将PHP脚本预编译的字节码存储到共享内存中来提升PHP的性能,存储预编译字节码的好处就是省去了每次加载和解析PHP脚本的开销。

PHP 5.5.0 及后续版本中已经绑定了 OPcache 扩展。 对于 PHP 5.2,5.3 和 5.4 版本可以使用 » PECL扩展中的OPcache库。

PHP 5.5.0及后续版本

OPcache只能编译为共享扩展。如果你使用–disable-all参数禁用了默认扩展的构建,那么必须使用–enable-opcache选项来开启OPcache。编译之后,就可以使用 zend_extension 指令来将 OPcache 扩展加载到 PHP 中。

推荐的php.ini设置

使用下列推荐设置来获得较好的性能:

opcache.memory_consumption=128opcache.interned_strings_buffer=8opcache.max_accelerated_files=4000opcache.revalidate_freq=60opcache.fast_shutdown=1opcache.enable_cli=1opcache.save_comments=0

你也可以禁用 opcache.save_comments 并且启用 opcache.enable_file_override。 需要提醒的是,在生产环境中使用上述配置之前,必须经过严格测试。 因为上述配置存在一个已知问题,它会引发一些框架和应用的异常, 尤其是在存在文档使用了备注注解的时候。

以下是opcache的配置说明,其中给有值得都是默认配置:

; opcache的开关,关闭时代码不再优化.opcache.enable=1; Determines if Zend OPCache is enabled for the CLI version of PHPopcache.enable_cli=1; OPcache的共享内存大小,以兆字节为单位。总共能够存储多少预编译的PHP代码(单位:MB); 推荐128opcache.memory_consumption=64; 用来存储临时字符串的内存大小,以兆字节为单位.; 推荐8opcache.interned_strings_buffer=4; 最大缓存的文件数目200到100000之间.; 推荐4000opcache.max_accelerated_files=2000; 内存"浪费"达到此值对应的百分比,就会发起一个重启调度.opcache.max_wasted_percentage=5; 开启这条指令, Zend Optimizer + 会自动将当前工作目录的名字追加到脚本键上,以此消除同名文件间的键值命名冲突.关闭这条指令会提升性能,但是会对已存在的应用造成破坏.opcache.use_cwd=0; 开启文件时间戳验证opcache.validate_timestamps=1; 检查脚本时间戳是否有更新的周期,以秒为单位。设置为0会导致针对每个请求,OPcache都会检查脚本更新.; 推荐60opcache.revalidate_freq=2; 允许或禁止在include_path中进行文件搜索的优化.opcache.revalidate_path=0; 如果禁用,脚本文件中的注释内容将不会被包含到操作码缓存文件,这样可以有效减小优化后的文件体积,禁用此配置指令可能会导致一些依赖注释或注解的应用或框架无法正常工作,比如:Doctrine,Zend Framework2等.; 推荐0opcache.save_comments=1; 如果禁用,则即使文件中包含注释,也不会加载这些注释内容。本选项可以和opcache.save_comments一起使用,以实现按需加载注释内容.opcache.load_comments=1; 打开快速关闭,打开这个在PHP Request Shutdown的时候会收内存的速度会提高.; 推荐1opcache.fast_shutdown=1; 允许覆盖文件存在(file_exists等)的优化特性.opcache.enable_file_override=0; 定义启动多少个优化过程.opcache.optimization_level=0xffffffff; 启用此Hack可以暂时性的解决"can’t redeclare class"错误.opcache.inherited_hack=1; 启用此Hack可以暂时性的解决"can’t redeclare class"错误.;opcache.dups_fix=0; 通过文件大小屏除大文件的缓存,默认情况下所有的文件都会被缓存.;opcache.max_file_size=0; 每N次请求检查一次缓存校验.默认值0表示检查被禁用了,由于计算校验值有损性能,这个指令应当紧紧在开发调试的时候开启.;opcache.consistency_checks=0; 从缓存不被访问后,等待多久后(单位为秒)调度重启.;opcache.force_restart_timeout=180; 日志记录level,默认只有fatal error和error.;opcache.error_log=; 将错误信息写入到服务器(Apache等)日志;opcache.log_verbosity_level=1; 内存共享的首选后台.留空则是让系统选择.;opcache.preferred_memory_model=; 运行php脚本时保护共享内存防止意外的写入,只对debug时有用.;opcache.protect_memory=0

最后说一下使用opcache加速php时应该注意的坑:

opcache依靠的是PHP文件的modify time作为文件被修改的检测条件,基于这个会引发两个问题。

第一个问题是做版本回滚时,由于版本回滚后的文件修改时间比现有opcache缓存的文件时间要往前一些,所以可能会导致opcache不会清除缓存,需要手动reload。

第二个问题是做版本发布时,一般都是sync方式,可能会出现文件发布一半时被opcache缓存,用户访问会报程序错误,这个主要是因为文件内容缓存了一半,但是文件的时间戳不会在改变,所以就算opcache检测时也不会去读取新的文件了,需要手动reload。

针对这两个问题,不光reload可以解决,同样调用opcache的接口也可以清除opcache缓存。

你可以使用opcache_reset()或者或者opcache_invalidate()函数来手动重置OPcache。

opcache_reset():该函数将重置整个字节码缓存,在调用opcache_reset()之后,所有的脚本将会重新载入并且在下次被点击的时候重新解析。

opcache_invalidate():该函数的作用是使得指定脚本的字节码缓存失效。 如果force没有设置或者传入的是FALSE,那么只有当脚本的修改时间 比对应字节码的时间更新,脚本的缓存才会失效。

但是不推荐使用,个人在生产环境中进行代码发布后调用opcache_reset()清空缓存(测试确实可以清空缓存),出现过奇葩问题(访问量大的应用),后来就果断放弃了,使用了reload的方式。

感谢各位的阅读,以上就是“PHP的优化加速组件Opcache怎么使用”的内容了,经过本文的学习后,相信大家对PHP的优化加速组件Opcache怎么使用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: PHP的优化加速组件Opcache怎么使用

本文链接: https://lsjlt.com/news/312716.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • PHP的优化加速组件Opcache怎么使用
    这篇文章主要讲解了“PHP的优化加速组件Opcache怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“PHP的优化加速组件Opcache怎么使用”吧!Opcache是一种通过将解析的P...
    99+
    2023-06-27
  • PHP 5.5的加速插件ZEND OPCACHE怎么用
    今天就跟大家聊聊有关PHP 5.5的加速插件ZEND OPCACHE怎么用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。大家知道目前PHP的缓存插件一般有三个:APC、eAccele...
    99+
    2023-06-17
  • PHP加速器配置神器opcache怎么用
    这篇文章将为大家详细讲解有关PHP加速器配置神器opcache怎么用,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。什么是opcode?当解释器完成对脚本代码的分析后,便将它们生成可以直接运行...
    99+
    2023-06-04
  • PHP 应用程序性能优化中 OPcache 配置的优化技巧
    通过优化 opcache 配置,可以提升 php 应用程序性能。优化包括:设置合理的 opcache.memory_consumption 大小提高 opcache.max_accele...
    99+
    2024-05-01
    php opcache linux
  • 怎么使用OPCache提升PHP的性能
    这篇文章给大家分享的是有关怎么使用OPCache提升PHP的性能的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。PHP开发环境搭建工具有哪些一、phpStudy,是一个新手入门最常用的开发环境。二、WampServ...
    99+
    2023-06-14
  • 如何使用 PHP 容器来优化数组加载?
    在 PHP 中,数组是一种非常常见的数据结构,它可以用来存储多个值,并且可以根据键名进行访问。然而,当数组中的元素数量很大时,数组的加载和遍历会变得非常耗时。为了优化数组的加载和遍历效率,我们可以使用 PHP 容器。本文将介绍如何使用 P...
    99+
    2023-08-22
    数组 load 容器
  • PHP 文件存储:如何优化您的文件加载速度?
    在现代Web开发中,文件存储是一个关键的问题。PHP作为一种流行的服务器端语言,也需要在文件存储方面做出优化,以确保Web应用程序的高性能和响应速度。在本文中,我们将探讨如何优化PHP文件存储,以提高您的文件加载速度。 使用缓存 使用...
    99+
    2023-09-05
    文件 存储 load
  • vue使用mixins优化组件
    目录mixins 实现钩子函数的合并项目实践extend总结vue 提供了 mixins 这个 API,可以让我们将组件中的可复用功能抽取出来,放入 mixin 中,然后在组件中引入...
    99+
    2024-04-02
  • React优化子组件render怎么用
    这篇文章主要为大家展示了“React优化子组件render怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“React优化子组件render怎么用”这篇文章吧...
    99+
    2024-04-02
  • VUE 异步组件的性能优化指南:提升加载速度
    使用懒加载 懒加载允许组件只在需要时加载,避免不必要的请求和渲染。通过使用<component :is="componentName">语法,可以根据组件的显示条件动态加载组件。 拆分代码块 将大型组件拆分成更小的代码块可以提...
    99+
    2024-04-02
  • 如何使用PHP开发缓存优化图片加载速度
    如何使用PHP开发缓存优化图片加载速度随着互联网的快速发展,网页加载速度成为用户体验的重要因素之一。而图片加载速度是影响网页加载速度的重要因素之一。为了加速图片的加载,我们可以使用PHP开发缓存来优化图片加载速度。本文将介绍如何使用PHP开...
    99+
    2023-11-08
    图片加载 优化技巧 PHP缓存
  • 如何优化 PHP 代码中的加载速度?
    PHP 是一种被广泛应用于 Web 开发的编程语言,但在实际开发中,我们经常会遇到 PHP 代码加载速度过慢的问题。这不仅会影响用户体验,也会影响网站的 SEO 排名。为了解决这个问题,本文将为您介绍如何优化 PHP 代码的加载速度。 开...
    99+
    2023-08-12
    编程算法 load laravel
  • php str_replace速度很慢怎么优化
    要优化str_replace的速度,可以考虑以下几点: 尽量减少str_replace的调用次数:将多个替换操作合并为一个操作,...
    99+
    2023-10-27
    php
  • 优化 PHP 自动加载:为你的应用注入速度
    自动加载机制简介 PHP 自动加载是一种机制,用于在需要时动态加载类文件。当 PHP 遇到未定义的类时,它会触发自动加载函数,该函数负责查找和加载相应的类文件。 默认情况下,PHP 使用 __autoload() 作为自动加载函数。但是,...
    99+
    2024-03-02
    PHP 自动加载 性能优化 代码加载速度
  • PHP opcache的原理及使用方法是什么
    这篇文章主要介绍了PHP opcache的原理及使用方法是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇PHP opcache的原理及使用方法是什么文章都会有所收获,下面我们一起来看看吧。PHP项目中,尤其...
    99+
    2023-07-05
  • 如何优化组件库的webpack构建速度
    这篇文章给大家分享的是有关如何优化组件库的webpack构建速度的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。背景在公司的主要工作是组件库(基于vue的ui组件库,类似eleme...
    99+
    2024-04-02
  • 怎么使用Flutter叠加组件Stack
    本篇内容介绍了“怎么使用Flutter叠加组件Stack”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!注意:无特殊说明,Flutter版本及...
    99+
    2023-06-04
  • 如何在Linux系统中优化PHP的加载速度?
    在Linux系统中,PHP作为一种广泛使用的编程语言,其加载速度对于网站的性能和用户体验来说至关重要。在本文中,我们将讨论如何优化PHP的加载速度,以提高网站的性能和用户体验。 一、使用最新版本的PHP 首先,使用最新版本的PHP是优化加载...
    99+
    2023-11-04
    load linux linux
  • 优化pip使用体验的实用提示:使用镜像源来加速下载速度
    实用技巧:优化您的pip使用体验——镜像源的使用方法 随着Python的广泛应用,pip成为了Python开发中必备的包管理工具。然而,由于众所周知的原因,pip在国内访问官方仓库的速度往往较慢,这给开发者们带来了一定的困扰。为...
    99+
    2024-01-16
    镜像源 pip安装 优化体验
  • 怎么使用cdn加速
    使用cdn加速的方法:登录服务代理商官网,进入管理面板。找到cdn加速度服务。选择需要加速的服务器,点击添加cdn。填写相关信息,添加cdn加速策略即可。...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作