Pull to refresh
-29
@MaZaAaread⁠-⁠only

User

Send message
Давай так, посмотри код для теста REST API для Node.js, перепиши его так, чтобы результат приблизился к ПХП. И приложи его сюда, в комментарии. Я замерю скорость и скажу результат, если твой код окажется быстрым, то я только буду рад, я люблю и Node.js и PHP, поэтому не отношусь предвзято к какому-то из них, а основываюсь только на экспериментах и фактах.
Вы возможно не знаете что в PHP 1 запрос = 1 процесс? Т.е. с ростом кол-ва ядер процессора, будет расти производительность, как у пхп, так и у ноды(запущеной в кластере само собой, она ведь однопоточная)) Какие мы можем сделать выводы? Результаты будут такими же, только циферки увеличатся. Вам никто не мешает доказать обратное(прежде всего самому себе). Арендуйте многоядерный сервер, установите Nginx, PHP 7.1.1-FPM и Node.js 7.7.1, скопируйте из репозитория мой код, прогоните тесты и увидите результат сами. Лучше проверить на практике, чем проводить эксперименты в уме. Конфиг ПХП сейчас добавлю в репозиторий
Как я и говорил выше, когда писал вопросы и ответы, с пулом результат хуже, а конкретно лучшее что чего мне удалось добиться за 10 прогонов это 380 запросов в секунду…

Кусок кода
const mysql = require('mysql2');
const Promise = require('bluebird');
const http = require('http');

const pool = mysql.createPool({
    host: 'localhost',
    user: 'root',
    password: 'pwd',
    database: 'test',
    connectionLimit: 100
});
pool.query = Promise.promisify(pool.query);

function generatePage(res) {
    const time = process.hrtime();
    pool.query('SELECT * FROM `users`')
        .then(results => {
            let response = JSON.stringify(results);
            const diff = process.hrtime(time);
            const generationTime = diff[1] / 1000000;
            response += `<div><b>Страница сгенерирована за: ${generationTime}ms</b></div>`;
            res.end(response)
        })
        .catch(err => console.log(err))
}


connectionLimit пробовал ставить разный и 10 и 50 и 100 и 1000. Лучший результат — 380 запросов в секунду…
Результат ещё хуже, за 10 прогонов подряд лучший результат — 150 запросов в секунду…

Тесть вас не волнует скорость работы приложения? Главное чтобы язык был модный и новый?

Любая постобработка быстрее в пхп, поэтому без разницы, все равно пхп обгонит)
Да, я все всех обманываю. Только берешь мой код, запускаешь, смотришь цифры и убеждаешься в том, что тесты не врут
Да да да, конечно же.
Работает медленнее чем пхп) а пхп 7.1 быстрее чем 7.0 значительно)
Завтра напишу какой результат по скорости с такой реализацией
https://habrahabr.ru/post/320670/ вот статья
С массивами пхп работает в разы быстрее, я уже проверял
Nginx отправляет заголовки отличные от тех что отправляет модуль http в ноде, вот и все дела
Кластер запускается когда процессор многоядерный. Тоже самое касается и Nginx, где worker_processes рекомендуется ставить = числу ядер. А у меня процессор одноядерный. Тем более, я само собой запускал ноду в кластере и результат — гораздо хуже. Т.к ядро у меня одно.
Согласен, в подавляющем большинстве случаев, процессор просто ждет сетевой ввод/вывод.
Добавил чтение результата после циклов, результат тот же, увы
Я буквально месяц назад замерял разницу в скорости, между нативными промисами, Bluebird и callback'ами, так вот, callback'и выигрываю в разы… Не верите, убедитесь в этом сами. Это довольно легко.
Так я и не убивал процесс Node.js, я просто запускал 10 раз подряд ab
# wrk -t 4 -c 100 -d30s --timeout 2000 http://127.0.0.1:3000
# zmalloc: Out of memory trying to allocate 16000000040 bytes

У меня не достаточно памяти на сервере чтобы прогнать этот бенчмарк)

Information

Rating
Does not participate
Registered
Activity