【发布时间】:2016-02-23 17:37:12
【问题描述】:
我想知道通过数据库动态加载路由是否存在任何性能问题。
在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['url'] 构建Route::resource,它将使用DynamicController。
具有这种结构,在路由或加载网络应用程序方面是否会出现任何性能问题?我之所以问这个问题是因为我注意到我的网络应用加载速度似乎很慢,页面加载时间大约为 10-18 秒。
我最近从 Codeigniter 升级到了 Laravel 5.2,并注意到在切换到 Laravel 时出现了严重的性能问题。当我之前使用 Codeigniter 时,页面仅在大约 2-4 秒内加载。请注意它带来的巨大差异。
同样的逻辑,只是根据 Laravel 的标准重新编写代码。
【问题讨论】:
-
Codeigniter 比 laravel 快
-
我在 Laravel 中从未见过这样的事情。通常路由是静态的,然后通过路由缓存机制进行缓存。另外,试试 Lumen,它有更快的路由器。
-
尝试使用路由缓存(我不知道它是否适用于您的示例)但如果可以,请不要忘记在每次创建新路由时重新缓存路由@987654332 @
-
对于初学者来说,2-4 秒对于TTFB 来说是很多,所以你的 CodeIgniter 性能一开始就不好。除此之外,您应该更详细地解释您要实现的目标:为什么需要从数据库中加载路由,数据库中存储了多少路由等。了解更多细节将有助于我们提出一个很好的实施。
-
有一件事从一开始就很突出:您不应该在每个请求上生成路由定义。 @ahmad 关于缓存路线的建议非常好。您可以查看this answer,它展示了如何仅在需要时才以编程方式构建和缓存路由,而不是在每个请求时。
标签: php codeigniter laravel laravel-routing laravel-5.2