我想知道通过数据库动态加载路由是否存在任何性能问题。
在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的标准重写代码。
答案 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分钟。