jeudi 17 juin 2021

Controller method very fast (0.2s) but TTFB is 15 seconds

So I've timed my controller method in Laravel with both microtime(true) and getrusage, and checked the actual data responded - it processes my request in ~0.2s, so quite fast.

The actual TTFB for it to respond back to my app is a massive 12 seconds.

Given the data is obtained and returned so quickly, where could this bottleneck be?

I'm aware it's quite a vague question, but I honestly have no idea what could be doing this. Has anyone encountered similar? Included the controller method below, in case it's handy. Just using a standard Axios get() request to run the query.

enter image description here

public function authenticate(Request $request){
    $credentials = $request->only('email', 'password');

    try {
        if (! $token = JWTAuth::attempt($credentials)) {
            return response()->json(['error' => 'invalid_credentials'], 401);
        }
    } catch (JWTException $e) {
        return response()->json(['error' => 'could_not_create_token'], 500);
    }

    $user = User::where('email',$request->email)->first();

    if($request->invitationIdIfExists){
        $invitation = Invitation::find($request->invitationIdIfExists);

        if($invitation->recipient_email == $user->email){
            $request->headers->set('Authorization', 'Bearer '.$token);
        
            Helper::processInvitation($invitation, $user);
        }
    }

    $user->touch();

    $user->token = $token;

    $user->load(['accounts', 'minTodoDays', 'minNotifications']);

    $user->todo_days = $user->minTodoDays;
    $user->notifications = $user->minNotifications;

    unset($user->minTodoDays);
    unset($user->minNotifications);

    $invitationIfExists = Invitation::where('recipient_email', $user->email)->where('completed', 0)->first();

    if($invitationIfExists){
        $user->invitedAccount = $invitationIfExists->account;
    }

    return $user;
}


via Chebli Mohamed

Aucun commentaire:

Enregistrer un commentaire