自PHP 7.4起,OPCache新增了一个Preload特性,该功能可以将指定的文件预加载到内存中,这样当程序运行时等于是直接从内存到CPU进行运算,省略了磁盘IO的过程。
不过这个特性配置起来会有很多问题,比如说可能导致同一个类或方法被声明多次从而触发致命错误。
具体导致错误的原因以及错误的现象千奇百怪,得见招拆招了,实在没办法整理出一个能让小白看懂的通用教程。所以这里只对WordPress核心进行预加载,这样错误范围相对可控。
在WordPress根目录新建一个preload.php文件,写入如下内容:
<?php /** *这个文件被PHP的Preload功能执行以实现在PHP启动时预加载WordPress内核代码 */ $directory = new RecursiveDirectoryIterator( __DIR__ ); $fullTree = new RecursiveIteratorIterator( $directory ); $phpFiles = new RegexIterator( $fullTree, '/.+((?<!Test)+.php$)/i', RecursiveRegexIterator::GET_MATCH ); foreach ( $phpFiles as $key => $file ) { if ( stristr( $file[0], 'wp-admin/includes' ) || stristr( $file[0], 'wp-content/plugins' ) || stristr( $file[0], 'wp-content/themes' ) ) { continue; } @opcache_compile_file( $file[0] ); }
之后确保在PHP配置文件中的[Zend Opcache]配置区块的末尾追加如下两行:
opcache.preload=/www/wwwroot/litepress.cn/preload.php;这里是你的preload.php文件的路径,别直接复制…… opcache.preload_user=www
最后重启PHP即可,重启的速度会比较慢,因为要预加载文件。如此配置后大概可以提升50ms左右的首字节速度,当然,在硬盘越差的机器上效果越明显。最后的最后提醒一下:如果WordPress版本更新了要重启PHP服务以重新进行预加载,这样新的文件才会生效。
效果图:
需要注意的是,只有PHP7.4及以上版本才可以这样操作,在操作过程中,也许会产生如下所示报错,不用管,只有php起来就行。因为预加载不会执行需要动态生成的代码,比如说某些宏需要运行时才确定。<br>其次是代码执行顺序会被打乱,某些代码缺失上下文会弹出警告。这些都不会影响你程序的运行,大可放心。
本文链接:http://78moban.cn/post/14388.html
版权声明:站内所有文章皆来自网络转载,只供模板演示使用,并无任何其它意义!