当前位置: 首页 > 后端技术 > PHP

php预加载,预加载

时间:2023-03-29 15:13:17 PHP

phppreload,preloadphp.ini#只需要设置为0重启php就可以清空preload文件opcache.enable=1#配置php脚本进行preload,php-fpm启动时会根据这个文件preloadopcache。preload=/home/www/test/preload.php#预加载用户,不建议使用rootopcache.preload_user=www使用opcache_compile_file进行文件缓存,一旦缓存不会被清除,使用opcache_reset()不会清除预加载文件,opcache_invalidate()无法清除,使用opcache_get_status()查看缓存占用内存大小,缓存文件名//preload.php$files=glob('/home/www/test/*.php');foreach($filesas$file){opcache_compile_file($file);}//parent.phpclassA{publicfunctiona(){echo'classA';}}}//child.phprequire('./parent.php');B类扩展A{publicfunctionb(){echo'clsssB'.PHP_EOL;}}//conf.phpreturnarray_fill(0,20,'abc');//index.phpb();ab-c1-n10000启用预加载并发级别:1测试时间:2.864秒完成请求:10000失败请求:0总transferred:1620000bytesHTMLtransferred:160000bytesRequestspersecond:3492.01[#/sec](mean)Timeperrequest:0.286[ms](mean)Timeperrequest:0.286[ms](mean,acrossallconcurrentrequests)传输速率:552.45[Kbytes/sec]收到未启用预加载并发级别:1测试时间:4.043秒完成请求:10000失败请求:0传输总数:1860000字节HTML传输:每秒400000字节请求。时间:247:0.404[ms](平均值)每时间request:0.404[ms](mean,acrossallconcurrentrequests)Transferrate:449.24[Kbytes/sec]receivedLaravel7预加载测试ab-c1-n1000//preload.phpfunctiona($path){$files=glob($路径。'*');//print_r($文件);foreach($filesas$file){if(is_dir($file)){a($file.'/');}else{//使用pathinfo获取扩展报错,php无法启动if(basename($file)=='index.php'){继续;}if(strstr($file,'.')=='.php'){opcache_compile_file($file);}}}a('/home/www/test/Laravel7/vendor/laravel/');未开启预加载并发级别:1测试时间:100.983秒完成请求:1000失败请求:0总传输:3355000字节HTML传输:2426000bytesRequestspersecond:9.90[#/sec](平均值)每个请求的时间:100.983[ms](平均值)每个请求的时间:100.983[ms](平均值,所有并发请求)传输速率:32.44[Kbytes/sec]收到打开预加载Laravel,只保存供应商/laravel/目录并发级别:1测试时间:12.377秒完成请求:1000失败请求:0总传输:3355000字节HTML传输:2426000字节每秒请求:80.79[#/sec](平均)时间请求:12.377[ms](平均)每个请求的时间est:12.377[ms](mean,acrossallconcurrentrequests)Transferrate:264.71[Kbytes/sec]receivedSummary我自己写的,缓存文件数为4,性能提升40%。预加载laravel核心文件,总缓存大小约2200000,性能提升10倍缺点:缓存一旦无法修改,需要重启php进程才能生效