почему узел JS медленнее, чем Chrome? - PullRequest
3 голосов
/ 05 октября 2019

Я создаю сайт, используя nodejs. На странице моего сайта я прошу Google, затем проанализирую его результаты и отправлю их пользователю. Я использую request модуль npm для запроса в Google. У модуля request есть флаг с именем time, что, если я установлю его в значение true, request даст мне подробную информацию о времени запроса. Я прошу Google, как это:

var express = require('express');
var router = express.Router();
var request = require('request');

router.get('/', function(req, res, next) {
    return request({
        url: 'https://<google-ip>/search?q=' + req.query.query + '&num=30&start=0',
        headers: {
            'host': 'www.google.com'
        },
        strictSSL: false,
        time: true,
        gzip: true,
    }, function (error, response, body) {
        res.send(
            {
                'starts_at: ':{
                'timings.socket':response.timings.socket,
                'timings.lookup':response.timings.lookup,
                'timings.connect': response.timings.connect,
                'timings.response': response.timings.response,
                'timings.end': response.timings.end
            },
            'duration: ':{
                'timingPhases.wait': response.timingPhases.wait,
                'timingPhases.dns': response.timingPhases.dns,
                'timingPhases.tcp': response.timingPhases.tcp,
                'timingPhases.firstByte': response.timingPhases.firstByte,
                'timingPhases.download': response.timingPhases.download,
                'timingPhases.total': response.timingPhases.total
            }
        });
    });
});

module.exports = router;

И вывод здесь:

{
    starts_at:
        {
            timings.socket: 3.725953000015579,
            timings.lookup: 3.725953000015579,
            timings.connect: 117.76885500003118,
            timings.response: 692.0431389999576,
            timings.end: 1220.5685750000412
        },
    duration:
        {
            timingPhases.wait: 3.725953000015579,
            timingPhases.dns: 0,
            timingPhases.tcp: 114.0429020000156,
            timingPhases.firstByte: 574.2742839999264,
            timingPhases.download: 528.5254360000836,
            timingPhases.total: 1220.5685750000412
        }
}

Но когда я ищу тот же запрос в Chrome, я получаю эти результаты:

enter image description here

Я не знаю, почему эти цифры очень разные. tcp время в nodejs занимает около 114 миллисекунд, а в хроме - около 0 миллисекунд. Кроме того, и сервер Chrome, и nodejs находятся в одном регионе, но time-to-first-byte в nodejs медленнее, чем Chrome, примерно на 245 миллисекунд.

Как улучшить nodejs, чтобы он был похож на Chrome?

...