我有点担心Laravel在数据库使用方面的性能。我注意到,每次刷新或与服务器建立连接时,Laravel Auth都会建立与数据库的连接,以通过“ ID”获取用户。为什么不将用户保存在会话中?有办法改变吗?模型还会检索很多信息和一些不必要的信息。
我觉得这会使应用程序变慢,并且我无法控制这些连接...:/
一些提示?
答案 0 :(得分:0)
简短的回答:不用担心。对于大多数应用程序来说,不会有问题。
长答案:如果您稍微看一下框架级别的代码,看看laravel在调用Auth::User()
时是如何处理请求的,您会看到,对于经过身份验证的用户,每个请求都会通过SessionGuard并立即返回用户而不是进行数据库调用。
https://github.com/laravel/framework/blob/5.6/src/Illuminate/Auth/SessionGuard.php#L122
public function user()
{
if ($this->loggedOut) {
return;
}
// If we've already retrieved the user for the current request we can just
// return it back immediately. We do not want to fetch the user data on
// every call to this method because that would be tremendously slow.
if (! is_null($this->user)) {
return $this->user;
}
因此,您的第一个匹配项将是一次数据库访问,随后的请求应从会话中返回,如下所示。您可以通过在Laravel中启用数据库查询日志记录来验证这一点,并查看哪些查询正在访问数据库。有关查询日志的更多信息,您可以阅读每个laravel版本的doc或此conversation。
从性能的角度来看,除非您将有成千上万的并发用户访问数据库密集型应用程序上的站点,否则数据库连接将是您遇到的最小问题,在获取数据库之前,您将首先遇到其他问题。越陷越深。我没有太多背景信息,所以我在做假设。如果您开始注意到性能下降,则始终可以投入更多的商用硬件或将缓存移至另一个数据存储,例如MemCache或Redis。选择Laravel(PHP)的原因是为了加快开发速度,而不一定是为了提高性能。
但是,您应该牢记性能,并且在构建应用程序时正在考虑这些事情,这是非常棒的。