注意:现在我知道问题出在哪里,我修改了问题。它现在只包含所需的信息。
我是 Laravel PHP 框架的新手。
我的电脑上有一个非常小的应用程序。它连接到 MySQL 数据库并具有 User 模型。我使用 Auth 类登录和注销。
一切正常,但是当我登录时,加载页面大约需要一秒钟,这非常慢。当我没有登录时,它只是几毫秒的问题。
通过使用内置的分析器,我发现了两个问题。首先,就像我说的,加载一个页面需要超过 1000 毫秒。其次,当我登录时,每当我加载一个页面时,该框架都会生成一个 SQL。该查询搜索具有某个 id(我的 id)的用户。我想它可以获取有关登录用户的信息。但是不应该有某种缓存。如果我的网站每秒必须管理许多请求,这会是一个问题吗?
我意识到Auth::check()
在视图中使用是导致问题的原因。我有大约 4 个Auth::check()
是我的 Blade 视图。当我没有时,它会很快。如果我有,它会很慢。然后,无论我有多少,它都不会变慢。就像 Auth 类的初始化需要太多时间或类似的东西。我想它解释了为什么它只在我登录时发生。
我深入研究了 Laravel 的代码,发现当Auth::check()
第一次被调用时,Auth 类需要通过从数据库中检索用户信息来“激活”我的 Session。这解释了每个页面请求都执行的查询。但是由于分析器说查询甚至不需要一毫秒来执行,我仍然不知道为什么它会减慢应用程序的速度。
新信息:即使我没有向数据库发送查询,连接到它的简单动作也几乎需要一秒钟。这就是它慢的原因。我想我已经非常接近解决这个问题了。
到目前为止有什么想法吗?
提前致谢。
笔记
- 视图中的事实
Auth::check()
并没有改变任何东西。 - 使用另一种方法
Auth::guest()
不能解决问题。 - 新:连接到数据库很慢。