Laravel 动态路由性能问题

Laravel dynamic routing performance issue

我想知道通过数据库动态加载路由是否有任何性能问题。

routes.php 中,它将从数据库中检索值并从那里创建路由。

来自routes.php

buildDynamicRoutes(new App\Factory\ModelFactory('App\Models\RoutingModel'));

function buildDynamicRoutes($model)
{
    $routes = $model->getInstance()->getRoutes(); // 'routes' is the table name wherein routes will be stored.
    if (is_array($routes) && !empty($routes)) {
        foreach ($routes as $route) {
            Route::resource($route['url'], 'DynamicController');
        }
    }
}

所以基本上,在 buildDynamicRoutes 方法上,它将调用实例化 RoutingModel class 的 ModelFactory。实例化后,它将通过 getRoutes() 方法连接到 API,该方法将 return 路由结果。

从那里,它将在 $route['url'] returned 的基础上构建 Route::resource,它将使用 DynamicController.

采用这种结构,在路由或加载网络应用程序方面是否会出现任何性能问题?我问这个是因为我注意到我的网络应用程序加载速度似乎很慢,页面加载大约需要 10-18 秒。

我最近从 Codeigniter 升级到 Laravel 5.2,并注意到在切换到 Laravel 后出现了严重的性能问题。当我以前使用 Codeigniter 时,页面加载仅需大约 2-4 秒。请注意它带来的巨大变化。

同样的逻辑,只是根据Laravel的标准重写代码。

试试这个,让我们知道进展如何。

 $routes = Cache::has('routes')
               ? Cache::get('routes')
               : $model->getInstance()->getRoutes();
 if (!Cache::has('routes')) {
    Cache::add('routes', $routes, 120); 
 }

替换为您的“$routes = $model->getInstance()->getRoutes()”赋值。也许您需要导入缓存:

use Illuminate\Support\Facades\Cache;

如果您的 $routes 值经常变化,您可以设置另一个缓存时间而不是 120 分钟。