Итак. Спасибо за ответы. Я понял в чем дело. Т.к. программирую на node.js аж целых 2 недели, я неверно трактовал результаты. Изменил тест, и вышло вот что:
var start = new Date();
var connection = mysql.createConnection({
host : 'localhost',
user : 'root',
password : '',
database : 'epr'
});
for (var i = 0; i < 1000; i++) {
connection.query(
'SELECT * FROM dreg_document',
function(error, result, fields){
var str = '';
result.forEach(function(row){
str += ' ' + row.id + ' ';
});
console.log(str);
}
);
}
connection.end();
var end = new Date();
console.log('node.js %d мс', (end.getTime()-start.getTime()) / 1000);
client.send('qwerty');
Если думать по php-шному, после отработки всех запросов, отправляется сообщение клиенту -
client.send('qwerty');
Но на деле, сообщение отправляется тогда когда node-server отправит к БД ВСЕ запросы. Затем (
! не дожидаясь ответа от БД) сервак отправляет клиенту сообщение. Клиент (браузер) подсчитывает время (вышло, к примеру 2 секунды для 100 000 итераций). А в это время в ноду
продолжают поступать ответы от БД. Эти ответы мы видим с помощью
console.log(str);
И тут уже получаются совсем другие результаты....
Далее, изменяем скрипт следующим образом, чтобы подсчитать время выполнения от 1го до последнего асинхронного подключения к БД:
// начало выполнения скрипта
var start = new Date();
// счетчик обращений к БД
var ConnCountGlobal = 0;
// Число обращений к БД
var iLength = 100;
var connection = mysql.createConnection({
host : 'localhost',
user : 'root',
password : '',
database : 'epr'
});
for (var i = 0; i < iLength; i++) {
connection.query(
'SELECT * FROM dreg_document',
function(error, result, fields){
// для последнего запроса вычисляем таймер
if (ConnCountGlobal == iLength-1){
var dateObj = new Date();
var currTime = dateObj.getTime();
console.log(' node.js - %d мс', (currTime-start.getTime()) / 1000);
}
ConnCountGlobal++;
}
);
}
connection.end();
Результат
Для 100 итераций 2.5 сек (что в 15 раз медленнее чем на PHP)
Промежуточный ответ на топик:
Node.js не быстрее PHP в 150 раз в вопросе доступа к БД.
Напротив, Node.js в этом плане в 15 раз медленнее чем PHP.
(это если брать оба сервера "из коробки", без улучшательств и настроек)
Новый вопрос:
Верен ли мой последний тест? Или я в нём тоже что-то не так сделал?