[Modern PHP] 第二章 新特性之六 Zend OPcache
Zend OPcache
字节码缓存技术对于PHP来说并不新鲜。我们很早就有了Alternative PHP Cache(APC)、eAccelerator、ionCube和XCache这些独立的扩展,它们都可以作为我们的可选方案。但是在PHP的每个核心发布版本中都没有它们的身影。直到现在PHP 5.5.0后,PHP才有了自己内置的字节码缓存:Zend OPcache。
首先,让我来解释一下什么是字节码以及它的重要性。PHP是一种解释语言。当PHP解释器执行一个PHP脚本时,解释器解析PHP的脚本代码,将PHP代码编译成一组Zend Opcodes(机器码指令),最终执行这些字节码。PHP文件在每次请求时都会重复上面的步骤。这样做未免太浪费了,尤其是每次HTTP请求时PHP脚本都要一次又一次的执行解析、编译和执行。如果我们有办法能够缓存住这些编译好的字节码就可以缩短应用程序的响应时间,并且能够减轻系统资源的压力。你真幸运。
字节码缓存能够存储编译后的PHP字节码。这意味着每次请求时PHP解释器不再需要读取、解析和编译PHP代码,而是可以直接从内存中读取编译后的字节码并执行。这大大节省了时间,极大的提升了应用程序的性能。
开启Zend OPcache
Zend OPcache默认是不启用的,你需要在安装编译PHP时明确的开启Zend OPcache才行。
如果你使用的是虚拟主机,请确保你选择的是一家能够提供PHP 5.5.0及以上版本并且开启Zend OPcache的优秀服务商。
如果你自己编译PHP(假设你使用的是VPS或者服务器托管),你必须在PHP的 ./configure命令后添加一个参数
--enable-opcache
在PHP编译完成后,你还需要在phpini文件中指定Zend OPcache扩展的路径,参照下面的示例:
zend_extension=/path/to/opcache.so
在PHP编译成功后会立刻显示Zend OPcache扩展的文件路径的。如果你忘了像我说的这么做,你也可以执行下面的命令来获取PHP所有扩展存放的路径地址:
php-config --extension-dir
如果你在使用无与伦比的Derick Rethans开发流行调试工具Xdebug,在php.ini文件中,Zend OPcache扩展必须在Xdebug扩展之前加载。
在你更新了php.ini文件并且重启PHP进程后就可以使用了。如果需要确认Zend OPcache是否正确安装,可以创建一个PHP文件包含下面的内容:
<?phpphpinfo ();
在浏览器中查看这个PHP文件,并且下拉滚动条直到看到Zend OPcache扩展那一段信息,如图2-2所示。如果你没有看到这段信息,就表示Zend OPcache并没有在运行。
图 2-2 Zend OPcache INI设置
配置Zend OPcache
在Zend OPcache启用的情况下,你可以在php.ini配置文件中配置Zend OPcache。下面是我喜欢使用的OPcache设置:
opcache.validate_timestamps = 1 // 在生产环境中使用"0"
opcache.revalidate_freq = 0
opcache.memory_consumption = 64
opcache.interned_strings_buffer = 16
opcache.max_accelerated_files = 4000
opcache.fast_shutdown = 1
想了解更多关于这些Zend OPcache设置的信息可以阅读第八章。在PHP.net上可以获取到完整的设置列表。
使用Zend OPcache
这部分内容很简单,因为Zend OPcache一旦启用就会自动工作。Zend OPcache会自动将编译后的PHP字节码缓存到内存中并自动执行混存后的字节码。
当INI参数 opcache.validate_timestamps设置为false(0)时需要格外小心。这种情况下,Zend OPcache不会检测你的PHP脚本的改动,因此你必须在改动了PHP文件后手动的去清除Zend OPcaches的字节码缓存才行。这个设置对线上的产品服务器有很大的帮助,但是会给开发带来很大的不便。你可以在开发时使用下面的php.ini的配置设置来启用自动的文件检测:
opcache.validate_timestamps = 1
opcache.revalidate_freq = 0

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

Laravel使用其直观的闪存方法简化了处理临时会话数据。这非常适合在您的应用程序中显示简短的消息,警报或通知。 默认情况下,数据仅针对后续请求: $请求 -

PHP客户端URL(curl)扩展是开发人员的强大工具,可以与远程服务器和REST API无缝交互。通过利用Libcurl(备受尊敬的多协议文件传输库),PHP curl促进了有效的执行

Laravel 提供简洁的 HTTP 响应模拟语法,简化了 HTTP 交互测试。这种方法显着减少了代码冗余,同时使您的测试模拟更直观。 基本实现提供了多种响应类型快捷方式: use Illuminate\Support\Facades\Http; Http::fake([ 'google.com' => 'Hello World', 'github.com' => ['foo' => 'bar'], 'forge.laravel.com' =>

您是否想为客户最紧迫的问题提供实时的即时解决方案? 实时聊天使您可以与客户进行实时对话,并立即解决他们的问题。它允许您为您的自定义提供更快的服务

文章讨论了PHP 5.3中引入的PHP中的晚期静态结合(LSB),从而允许静态方法的运行时分辨率调用以获得更灵活的继承。 LSB的实用应用和潜在的触摸

JWT是一种基于JSON的开放标准,用于在各方之间安全地传输信息,主要用于身份验证和信息交换。1.JWT由Header、Payload和Signature三部分组成。2.JWT的工作原理包括生成JWT、验证JWT和解析Payload三个步骤。3.在PHP中使用JWT进行身份验证时,可以生成和验证JWT,并在高级用法中包含用户角色和权限信息。4.常见错误包括签名验证失败、令牌过期和Payload过大,调试技巧包括使用调试工具和日志记录。5.性能优化和最佳实践包括使用合适的签名算法、合理设置有效期、
