注意:现在我知道问题出在哪里,修改了问题。 它现在只包含所需的信息。
我是 Laravel PHP 框架的新手。
我的电脑上有一个非常小的应用程序。它连接到 MySQL 数据库并拥有一个用户模型。我使用 Auth 类来登录和退出。
一切都工作正常,但是当我登录时,加载页面需要大约一秒钟的时间,这非常慢。当我没有登录时,只需要几毫秒。
通过使用内置的分析器,我发现了两个问题。首先,就像我说的那样,加载页面需要多于 1000 毫秒的时间。其次,每次在已登录状态下加载页面时,框架都会执行一次 SQL 查询。该查询搜索具有特定 ID(我的 ID)的用户。我猜它是为了获取有关已登录用户的信息。但是应该有某种缓存,对吗?如果我的网站必须管理许多请求每秒,这会是一个问题吗。
我意识到在视图中使用 Auth::check()
是导致问题的原因。在我的 Blade 视图中有大约 4 个 Auth::check()
。如果没有这个语句,它就很快。如果有一个,就很慢。然后,无论我有多少个,都不会变得更慢。就像 Auth 类的初始化需要太多时间之类的。我猜这解释了为什么只有在我登录时才会发生。
我深入研究了 Laravel 的代码,并发现当第一次调用 Auth::check()
时,Auth 类需要通过从数据库检索用户信息来“激活”我的会话。这就解释了每个页面请求都要执行查询的原因。但是由于分析器显示查询甚至不需要一个毫秒就可以执行完,我仍然不知道为什么会导致应用程序变慢。
新信息:即使我没有向数据库发送查询,连接到它的简单操作也需要近一秒钟的时间。这就是它变慢的原因。我认为我已经非常接近解决问题了。
到目前为止,有什么想法吗?
谢谢您的提前预祝。
注意事项
Auth::check()
在视图文件中出现并不影响任何情况。- 使用
Auth::guest()
等其他方法也不能解决这个问题。 - 新的提示:连接数据库是导致速度变慢的原因。