Skip to content

Sometimes timings.phases.dns is not lookup duration #35

@Motiveko

Description

@Motiveko

I use got http client and I use option {dnsCache: true}.

In http-timer packages, theres's two code to calculate dns duration.

  1. on socket's lookup event listener

    const lookupListener = (): void => {
    timings.lookup = Date.now();
    timings.phases.dns = timings.lookup - timings.socket!;
    };
    socket.prependOnceListener('lookup', lookupListener);

  2. deferToConnect()'s connect callback function

    http-timer/source/index.ts

    Lines 102 to 110 in 62f6b38

    timings.connect = Date.now();
    if (timings.lookup === undefined) {
    socket.removeListener('lookup', lookupListener);
    timings.lookup = timings.connect;
    timings.phases.dns = timings.lookup - timings.socket!;
    }
    timings.phases.tcp = timings.connect - timings.lookup;

When use got with dnsCache, once hostname resolved, then until ttl, no lookup event emitted on the socket, so lookup time should be 0.

But above the code 2, dns never be 0 but tcp(connection time) will be 0.

When Server got a lot of traffic and got's socket connection delayed, value of tcp will not increased ( this always be 0 ), but value of dns increased.

I think this is causing confusion and needs to be fixed

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions