连接到数据库时,Laravel应用程序非常慢

时间:2012-10-11 04:27:04

标签: php laravel

注意:既然我知道问题的来源,我修改了问题。它现在只包含所需的信息。

我是Laravel PHP框架的新手。

我的计算机上有一个非常小的应用程序。它连接到MySQL数据库并具有用户模型。我使用Auth类登录和注销。

一切正常,但是当我登录时,加载页面大约需要一秒钟,这非常慢。当我没有登录时,这只是几毫秒。

通过使用内置的分析器,我意识到了两个问题。首先,就像我说的,加载页面需要超过1000毫秒。其次,每次我登录时,框架都会生成一个SQL。查询会搜索具有特定ID(我的id)的用户。我想这是获取有关登录用户的信息。但是不应该有某种缓存。如果我的网站必须每秒管理很多请求,这会是一个问题。

我意识到在视图中使用Auth::check()是造成问题的原因。我有大约4 Auth::check()是我的Blade视图。当我没有时,它会很快。如果我有一个,它很慢。然后,无论我有多少,它都不会慢得多。这就像Auth类的初始化需要花费太多时间或类似的东西。我想它解释了为什么它只在我登录时发生。

我潜入了Laravel的代码,我发现当第一次调用Auth::check()时,Auth类需要通过从数据库中检索用户的信息来“激活”我的Session。这解释了每个页面请求正在执行的查询。但是,由于分析器说查询甚至不需要一毫秒来执行,我仍然不知道为什么它会减慢应用程序的速度。

新信息:即使我没有向数据库发送查询,连接到它的简单操作也需要几秒钟。这就是它变慢的原因。我想我已经非常接近解决这个问题了。

到目前为止有什么想法吗?

提前致谢。

备注

  • Auth::check()在视图中的事实不会改变任何内容。
  • 使用Auth::guest()等其他方法无法解决问题。
  • 新功能:连接到数据库的速度很慢。

2 个答案:

答案 0 :(得分:32)

我终于找到了解决这个问题的方法。

在许多论坛上阅读有关XAMPP,MySQL和PHP的一些帖子时,我在某处读到了最好使用 127.0.0.1 ,因为 locahost 需要一个额外的DNS查询。

在数据库配置文件中,我只是为 127.0.0.1 更改了 locahost

现在一切都很快。

我觉得这很奇怪。在用于建立数据库连接的配置文件中使用 locahost 需要一秒多的时间!

答案 1 :(得分:2)

我不同意哈莫的例子。在会话中拥有除ID以外的任何用户信息都存在安全风险,这就是大多数框架采用此路由的原因。除了查询记录之外,还有其他什么在用户登录时运行吗?这绝对不会减慢您的应用程序。