Laravel 的性能和数据库使用 - 不需要连接?
Laravel's performance and database usage - connections unnecessary?
我有点担心 Laravel 的数据库使用性能。我注意到每次刷新或连接到服务器时,Laravel Auth 都会连接到数据库以通过 'ID' 获取用户。为什么不在会话中保存用户?有没有办法改变它?模型还检索了很多信息和一些不必要的信息。
我感觉这会使应用程序变慢,而且我无法控制这些连接...:/
一些提示?
简短回答:别担心。对于大多数应用程序,不会有问题。
长答案:如果您稍微查看一下框架级代码,看看 laravel 在您调用 Auth::User()
时实际上是如何处理请求的,您会发现对于经过身份验证的用户来说,每个请求都会通过SessionGuard 立即 return 通知用户而不是进行数据库调用。
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;
}
所以您的第一次点击将访问数据库,随后的请求应该只是 return 来自会话,如下所示。您可以通过在 Laravel 中启用数据库查询日志记录来验证这一点,并查看哪些查询正在访问数据库。有关查询日志记录的更多信息,您可以阅读 doc per laravel veersion or this .
从性能的角度来看,除非您打算让成千上万的并发用户访问数据库繁重的应用程序上的站点,否则数据库连接将是您的问题中最少的,您将 运行 进入其他在数据库陷入困境之前首先解决问题。我没有太多的上下文,所以我在做假设。如果您开始注意到性能下降,您总是可以投入更多商品硬件或将缓存移动到另一个数据存储,例如 MemCache 或 Redis。您选择 Laravel (PHP) 的原因是为了提高开发速度,而不一定是为了性能。
但是,您牢记性能并在构建应用程序时考虑这些事情真是太好了。
我有点担心 Laravel 的数据库使用性能。我注意到每次刷新或连接到服务器时,Laravel Auth 都会连接到数据库以通过 'ID' 获取用户。为什么不在会话中保存用户?有没有办法改变它?模型还检索了很多信息和一些不必要的信息。
我感觉这会使应用程序变慢,而且我无法控制这些连接...:/
一些提示?
简短回答:别担心。对于大多数应用程序,不会有问题。
长答案:如果您稍微查看一下框架级代码,看看 laravel 在您调用 Auth::User()
时实际上是如何处理请求的,您会发现对于经过身份验证的用户来说,每个请求都会通过SessionGuard 立即 return 通知用户而不是进行数据库调用。
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;
}
所以您的第一次点击将访问数据库,随后的请求应该只是 return 来自会话,如下所示。您可以通过在 Laravel 中启用数据库查询日志记录来验证这一点,并查看哪些查询正在访问数据库。有关查询日志记录的更多信息,您可以阅读 doc per laravel veersion or this
从性能的角度来看,除非您打算让成千上万的并发用户访问数据库繁重的应用程序上的站点,否则数据库连接将是您的问题中最少的,您将 运行 进入其他在数据库陷入困境之前首先解决问题。我没有太多的上下文,所以我在做假设。如果您开始注意到性能下降,您总是可以投入更多商品硬件或将缓存移动到另一个数据存储,例如 MemCache 或 Redis。您选择 Laravel (PHP) 的原因是为了提高开发速度,而不一定是为了性能。
但是,您牢记性能并在构建应用程序时考虑这些事情真是太好了。