注意:既然我知道问题的来源,我修改了问题。它现在只包含所需的信息。
我是Laravel PHP框架的新手。
我的计算机上有一个非常小的应用程序。它连接到MySQL数据库并具有用户模型。我使用Auth类登录和注销。
一切正常,但是当我登录时,加载页面大约需要一秒钟,这非常慢。当我没有登录时,这只是几毫秒。
通过使用内置的分析器,我意识到了两个问题。首先,就像我说的,加载页面需要超过1000毫秒。其次,每次我登录时,框架都会生成一个SQL。查询会搜索具有特定ID(我的id)的用户。我想这是获取有关登录用户的信息。但是不应该有某种缓存。如果我的网站必须每秒管理很多请求,这会是一个问题。
我意识到在视图中使用Auth::check()
是造成问题的原因。我有大约4 Auth::check()
是我的Blade视图。当我没有时,它会很快。如果我有一个,它很慢。然后,无论我有多少,它都不会慢得多。这就像Auth类的初始化需要花费太多时间或类似的东西。我想它解释了为什么它只在我登录时发生。
我潜入了Laravel的代码,我发现当第一次调用Auth::check()
时,Auth类需要通过从数据库中检索用户的信息来“激活”我的Session。这解释了每个页面请求正在执行的查询。但是,由于分析器说查询甚至不需要一毫秒来执行,我仍然不知道为什么它会减慢应用程序的速度。
新信息:即使我没有向数据库发送查询,连接到它的简单操作也需要几秒钟。这就是它变慢的原因。我想我已经非常接近解决这个问题了。
到目前为止有什么想法吗?
提前致谢。
Auth::check()
在视图中的事实不会改变任何内容。Auth::guest()
等其他方法无法解决问题。答案 0 :(得分:32)
我终于找到了解决这个问题的方法。
在许多论坛上阅读有关XAMPP,MySQL和PHP的一些帖子时,我在某处读到了最好使用 127.0.0.1 ,因为 locahost 需要一个额外的DNS查询。
在数据库配置文件中,我只是为 127.0.0.1 更改了 locahost 。
现在一切都很快。
我觉得这很奇怪。在用于建立数据库连接的配置文件中使用 locahost 需要一秒多的时间!
答案 1 :(得分:2)
我不同意哈莫的例子。在会话中拥有除ID以外的任何用户信息都存在安全风险,这就是大多数框架采用此路由的原因。除了查询记录之外,还有其他什么在用户登录时运行吗?这绝对不会减慢您的应用程序。