20

注意:现在我知道问题出在哪里,我修改了问题。它现在只包含所需的信息。

我是 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()不能解决问题。
  • 新:连接到数据库很慢。
4

2 回答 2

38

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

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

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

现在一切都很快。

我觉得这真的很奇怪。在用于使数据库连接的配置文件中使用locahost需要一秒钟以上!

于 2012-10-12T05:16:32.807 回答
2

我不同意哈莫的例子。在会话中包含除 ID 之外的任何用户信息都会带来安全风险,这就是大多数框架采用这种方式的原因。当用户登录时,除了查询他们的记录之外,是否还有其他运行?绝对不是那会减慢您的应用程序的速度。

于 2012-10-11T04:33:09.843 回答