原文链接何晓东博客确保你的PHP是7.4版本,preload是对7.4版本新特性的基本认识根据rfc描述,Preload简明翻译就是预加载,这是基于opcache的升级,也是opcache的一部分。现有的opcache存储文件以消除编译开销,但仍然存在与从缓存中获取文件和获取特定请求的上下文相关的成本。PHP仍然需要检查源文件是否被修改,将部分类和函数从共享内存缓存复制到进程内存等。值得注意的是,由于每个PHP文件都是完全独立于任何其他文件编译和缓存的,我们无法解析在操作码缓存中存储文件时,存储在不同文件中的类之间的依赖关系,并且类依赖关系必须在运行时为每个请求重新链接。Preload的灵感来自为JavaHotSpotVM设计的“类数据共享”技术。它旨在为用户提供用传统PHP模型提供的一些灵活性来换取性能的能力。在服务启动时(在运行任何应用程序代码之前),我们可以将一组特定的PHP文件加载到内存中,并使它们的内容“永久可用”到服务器将处理的所有后续请求。这些文件中定义的所有函数和类都可用于开箱即用的请求,就像strlen()或异常等内部实体一样。通过这种方式,我们可以预加载整个或部分框架,甚至整个应用程序库。它还将允许引入用PHP编写的“内置”函数(类似于HHVM的sytemlib)。扩展灵活性包括无法在服务器启动后更新这些文件(在文件系统上更新这些文件没有任何作用;需要重新启动fpm服务才能应用更改。此外,这种方法与托管多个服务器不兼容应用程序或应用程序的多个版本(对于某些具有相同名称的类具有不同的实现)是不兼容的,如果此类是从一个应用程序的代码库中预加载的,它将与从另一个应用程序加载不同的类实现发生冲突。开始使用整个打开就可以了,配置脚本文件,设置用户首先需要修改配置文件php.ini[opcache]zend_extension=opcache.soopcache.enable=1#启用opcacheopcache.enable_cli=1#只启用CLI版本的PHP的操作码缓存。通常用于测试和调试。opcache.preload=preload.php#预加载脚本路径opcache.preload_user=web#预加载用户,安全考虑禁止root用户对应preload.php文件,可以导入其他文件:
