laravel中moudle模块多很慢nwidart/laravel-modules有40个如何优化FileRepository的scan用php.ini缓存opcache laravel中moudle模块多很慢nwidart/laravel-modules有40个如何优化以文件http://usr/local/php/etc/php.ini中开启以下配置zend_extensionopcache opcache.enable1 opcache.enable_cli0 opcache.memory_consumption256 opcache.interned_strings_buffer32 opcache.max_accelerated_files30000 opcache.max_wasted_percentage10 opcache.validate_timestamps0 opcache.revalidate_freq0 opcache.save_comments1检查apache的状态sudo /usr/local/apache/bin/httpd -t平滑重启 Apachesudo /usr/local/apache/bin/apachectl graceful速度提升了很多。之前接口要2-3秒现在基本在500ms以内。【注之后更新代码需要执行平滑重启命令】检查文件是否有开启成功。linux上直接生成该文件printf %s\n ?php header(Content-Type: application/json); echo json_encode([phpPHP_VERSION,sapiPHP_SAPI,opcachefunction_exists(opcache_get_status) ? opcache_get_status(false) : false]); public/opcache-check.php然后curl -s https://www.eip.com/opcache-check.php-----------------------以下作用不大--------------------------是由于每次请求都要扫码所有模块的所有文件找到根源文件后我们添加上缓存即可解决该问题速度提升1-2倍上代码\vendor\nwidart\laravel-modules\src\FileRepository.phppublic function scan() { // 添加静态缓存 - 就这4行代码 static $cachedModules null; if ($cachedModules ! null) { return $cachedModules; } $paths $this-getScanPaths(); $modules []; foreach ($paths as $key $path) { $manifests $this-getFiles()-glob({$path}/module.json); is_array($manifests) || $manifests []; foreach ($manifests as $manifest) { $name Json::make($manifest)-get(name); $modules[$name] $this-createModule($this-app, $name, dirname($manifest)); } } // 保存到静态变量 $cachedModules $modules; return $modules; }另为什么这样的方式起作用PHP不是每次请求都会重新刷新内存数据吗除非redisPHP-FPM 启动 ├── Worker 进程 1 │ ├── 请求1: scan() → 执行扫描静态变量 模块数据 │ ├── 请求2: scan() → 直接返回静态变量快速 │ └── 请求3: scan() → 直接返回静态变量快速 ├── Worker 进程 2 │ ├── 请求4: scan() → 执行扫描静态变量 模块数据 │ └── 请求5: scan() → 直接返回静态变量快速 └── ...结束