Laravel动态路由性能问题

时间:2016-02-23 17:37:13

标签: php codeigniter laravel laravel-routing laravel-5.2

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

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类的ModelFactory。实例化后,它将通过getRoutes()方法连接到API,该方法将返回路由结果。

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

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

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

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

1 个答案:

答案 0 :(得分:1)

试试这个,让我们知道它是怎么回事。

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

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

use Illuminate\Support\Facades\Cache;

如果$ routes路由值频繁更改,则可以设置另一个缓存时间而不是120分钟。