Note: Now that I know where the issue comes from, I modified the question. It now contains only the information needed.
我不熟悉Laravel PHP框架.
I have a very small app working on my computer. It is connected to a MySQL database and has a User model. I use the Auth class to log in and out.
一切都很正常,但是当我登录时,加载一个页面需要大约一秒钟,这是非常慢的.当我没有登录时,只有几毫秒的时间.
By using the built-in profiler, I realized two problems. First, like I said, loading a page takes a bit more than 1000 milliseconds. Second, the framework makes one SQL every time I load a page when I'm logged in. The query searches a user with a certain id (my id). I guess it is there to get information about the logged in user. But isn't there supposed to be some sort of cache. Will this be a problem if my website will have to manage many requests per seconds.
I realized that using Auth::check()
in the view is what is causing the issue. I have around 4 Auth::check()
is my Blade view. When I have none, it goes fast. If I have one, it is slow. Then, no matter how many I have, it doesn't get much slower. It's like if the Auth class' initialization takes too much time or something like that. I guess it explains why it only happens when I'm logged in.
I dived into Laravel's code and I found out that when Auth::check()
is called for the first time, the Auth class needs to "activate" my Session by retrieving the user's info from the database. That explains the query being executed every page request. But since the profiler says that the query doesn't even take a millisecond to execute, I still don't know why it slows down the app.
New information: Even when I'm not sending a query to the database, the simple act of connecting to it takes almost a second. This is the reason it is slow. I think I'm getting really close to solve the issue.
Any idea so far?
Thanks in advance.
Notes
- The fact that
Auth::check()
is in the view doesn't change anything. - 使用另一种方法,比如
Auth::guest()
,并不能解决这个问题. - New: Connecting to the database is what is slow.