laravel中moudle模块多很慢nwidart/laravel-modules有40个如何优化
是由于每次请求都要扫码所有模块的所有文件,找到根源文件后,我们添加上缓存即可解决该问题,速度提升1-2倍
上代码:
\vendor\nwidart\laravel-modules\src\FileRepository.php
public 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不是每次请求都会重新刷新内存数据吗,除非redis)
PHP-FPM 启动
├── Worker 进程 1
│ ├── 请求1: scan() → 执行扫描,静态变量 = 模块数据
│ ├── 请求2: scan() → 直接返回静态变量(快速!)
│ └── 请求3: scan() → 直接返回静态变量(快速!)
├── Worker 进程 2
│ ├── 请求4: scan() → 执行扫描,静态变量 = 模块数据
│ └── 请求5: scan() → 直接返回静态变量(快速!)
└── ...
结束

被折叠的 条评论
为什么被折叠?



