PHP - APC/OPcache - 学习/实践

1.应用场景

主要用于学习和使用PHP中APC/OPcache功能,提升PHP执行性能。

2.学习/操作

PHP - APC/OPcache - 学习/实践_第1张图片

1.文档阅读

PHP: OPcache - Manual -- 官方文档

PHP: 安装 - Manual

PHP: 影响 PHP 行为的扩展 - Manual

PHP: 运行时配置 - Manual

PHP Opcache工作原理 - 知乎

What is OPcache and How Do You Use It?

哪种php加速器最靠谱APC,XCache,eAccelerator - SegmentFault 思否

PHP的apcu是什么,opcache又是什么?_羁士的博客-CSDN博客

PHP四大加速缓存器opcache,apc,xcache,eAccelerator与php解析的初步理解

eAccelerator

GitHub - eaccelerator/eaccelerator: DEPRECATED: eAccelerator PHP opcode cache

让PHP7达到最高性能的几个Tips - 风雪之隅

让你的PHP7更快(GCC PGO) - 风雪之隅

让你的PHP7更快之Hugepage - 风雪之隅

Learn how to integrate PHP OPcache in a web application

Swoole4 文档

JIT

PHP JIT 技术详解 - 知乎

参见 问题/补充 -2 

2.整理输出

先放下截图

国外一篇文章

2.1 是什么

OPcache 通过将 PHP 脚本预编译的字节码存储到共享内存中来提升 PHP 的性能, 存储预编译字节码的好处就是 省去了每次加载和解析 PHP 脚本的开销

「换句话说,PHP 脚本在执行时会被编译成操作码,即机器可以理解的代码。OPcache 在第一次执行时将此代码存储到内存中,以便之后重用,从而提高性能。

PHP 5.5.0 及后续版本中已经绑定了 OPcache 扩展。

对于 PHP 5.2,5.3 和 5.4 版本可以使用 » PECL扩展中的 OPcache 库。

但是还是不得不说,如果是自己源码编译安装:

还是看下,下面的一段话:

“OPcache 只能编译为共享扩展。如果您使用–disable-all禁用了默认扩展的构建,则必须使用–enable-opcache选项编译 PHP 以使OPcache 可用。


编译后,您可以使用zend_extension配置指令将 OPcache PHP 操作码缓存扩展加载到 PHP 中。

这可以在非 Windows 平台上使用zend_extension=/full/path/to/opcache.so来完成,

在 Windows 上使用zend_extension=C:\path\to\php_opcache.dll来完成。”

PHP7 OPcache 如何执行代码?

PHP - APC/OPcache - 学习/实践_第2张图片

我需要 APC 和 OPcache 吗?

答案是否定的,如果您在服务器上启用了 PHP OPcache,那么也可以选择安装 APC。

好吧,APC 也是以前版本的 PHP 中存在的缓存系统,但它不适用于 PHP 5.5 和 PHP 7.x 等最新版本。

您必须从 APC 迁移到 OPcache,如果您强行尝试使用它,那么您可能会遇到错误。

PHP 5.5 及更高版本不需要 APC(或任何类似的字节码缓存扩展,如 XCache)。

PHP 开发人员直接将 OPcache 集成到应用程序的核心中。这不仅提供了更高的整体产品稳定性,而且得到了 PHP 开发人员的官方支持,这意味着它拥有广泛的工作社区。

简单说,就是优先推荐使用OPcache「后续验证」

2.2 为什么需要「应用场景」

为了解决PHP脚本执行的时间,提升PHP执行性能。

从而支持更大的并发访问。

2.3 什么时候出现「历史发展」

PHP 5.5.0 及后续版本中已经绑定了 OPcache 扩展。

对于 PHP 5.2,5.3 和 5.4 版本可以使用 » PECL扩展中的 OPcache 库。

具体什么时候出现的:TBD

2.4 实践

这三个选项都适用于 WordPress,但PHP 5.5 及更高版本的推荐选项是 OPcache。平均而言,它使 WordPress 的速度提高了三倍,至少对于大中型网站而言。

如果您有一个较小的站点,但没有安装许多额外的 PHP 脚本或插件,您可能不会注意到有太大的不同。

但是,您仍然可以在即使是小型 WordPress 网站上安装 OPcache,除了内存使用量略有增加外,没有任何负面影响。但是,这不足以引起任何问题。这对于中型、大型或企业站点是类似的。

环境

Mac + PHP 8.1

+ Docker 「LNMP」PHP 7.4

or

Linux 「CentOS」+ Docker 「LNMP」

Linux + NMP

1. Mac + PHP + Docker 「LNMP」

1. 安装opcache 

2. 启用opcache

3. 合理配置参数

4. 开始测试

5. 分析结果

2. Linux 「CentOS」+ Docker 「LNMP」

Linux + NMP

操作同上

后续补充

...

3.问题/补充

1. 字节码和机器码的区别

字节码和机器码的区别 - 掘金

字节码和机器码的区别? - Mr_Riven - 博客园

https://www.jianshu.com/p/1f7aa0bf4cba

机器码

机器码(machine code),学名机器语言指令,有时也被称为原生码(Native Code),是电脑的 CPU 可直接解读的数据。 通常意义上来理解的话,机器码就是计算机可以直接执行,并且执行速度最快的代码。

总结:机器码是电脑 CPU 直接读取运行的机器指令,运行速度最快,但是非常晦涩难懂,也比较难编写

字节码

字节码(Bytecode)是一种包含执行程序、由一序列 op 代码/数据对 组成的二进制文件。 字节码是一种中间码,它比机器码更抽象,需要直译器转译后才能成为机器码的中间代码。

总结:字节码是一种中间状态(中间码)的二进制代码(文件)。需要直译器转译后才能成为机器码。

工程上的应用

V8 引擎诞生的使命就是要在速度和内存回收上进行革命。JavaScriptCore 的架构是采用生成字节码的方式,然后执行字节码。Google 觉得JavaScriptCore 这套架构不行,生成字节码会浪费时间,不如直接生成机器码快。所以 V8 在前期的架构设计上是非常激进的,采用了直接编译成机器码的方式。后期的实践证明 Google 的这套架构速度是有改善,但是同时也造成了「内存消耗问题」

同时以java为例「当然我们知道PHP也有字节码

机器码就是说计算机能读懂的代码, 简单点说就是给计算机执行的二进制代码.
字节码, 是JAVA语言专有的, 它是让JVM来执行的二进制代码PHP Zend Engine来执行, 即 PHP的虚拟机」
虽然都是二进制代码, 但是由于执行它的环境不一样, 所以它们存在一些指令集上的区别。

2.PHP JIT

PHP JIT 技术详解 - 知乎

4.参考

参见上面文档列表

后续补充

...

你可能感兴趣的:(php,opcache,opcode)