Anonymous
не пей, не будь как все
Yuliia
Дело в том, что при асинхронной операции Node начнет читать файл в фоновом режиме, а при синхронной блокируется поток выполнения прогаммы, поэтому синхронные операции выполнются быстрее
Yuliia
Поправьте меня, если я ошибаюсь, всякое может быть
Bushrut
судя по докам ты права
Anonymous
ну в браузере даже не знаю
Anonymous
ведь вкладка = один поток
Anonymous
если брать в8
Anonymous
фоновых процессов нет
hamper 𓅝
асинхронные файловые операции в отдельном потоке выполняются так что на скорость не повлияет, там же libuv
hamper 𓅝
ну и другая асинхронщина, ну при учете что ядро процессора в 100% не уперлось конечно
Yuliia
Есть ответ на стэк
http://stackoverflow.com/questions/13822085/fs-readfilesync-seems-faster-than-fs-readfile-is-it-ok-to-use-for-a-web-app-in
Vlad
tldr: No, it is not OK to use a blocking API call in a node server as you describe.
Vlad
как и говорилось тысячу раз
Yuliia
да, но вопрос был ведь в том, что быстрее. Вот еще хорошая статья
https://habrahabr.ru/post/150788/
http://joxi.ru/Grq94MoT0oaOrz
darkwoolf
как сделать пулл форкнутого репозитория на свой локальный?
darkwoolf
всем привет
Anonymous
быстрее на фор и иф писать :)
Anonymous
но не интересно, скучно и много времени и ещё лексическая среда общая
hamper 𓅝
Yuliia
извините, если мой ответ был не полный, я не говорила, что это хорошо. Пыталась объяснить, почему синхронное чтение файлов быстрее работает. Но выше я прикрепила статью, где описанны основы многопоточности в ноде, там это должно быть намного понятней тому, кто спрашивал
у автора это получилось намного лучше, чем у меня )
hamper 𓅝
git remote add fork https://.../..git; git fetch fork; git merge fork/master
Name
Bushrut
и где здесь измерено время асинхронного чтения файла?
var fclcAsync = fs.readFile('clickerHeroSaveJson.txt', {encoding: 'utf8'}, function (err, data) {
if (err) throw err;
var end = process.hrtime()[1];
console.log("Done in async " + (end-begin) + " nanoseconds");
});
Bushrut
вот здесь я так полагаю
hamper 𓅝
оверхед на колбек еще надо учитывать
Name
вот здесь я так полагаю
почему отчёт начат в момент добавления чтения в IO очередь, а не после регистрации обработчика и вызова process.nextTick?
Я про то, что в итоге замеряется совсем не то
hamper 𓅝
var fclcSync = (() => fs.readFileSync('clickerHeroSaveJson.txt', {encoding: 'utf8'}))();
Name
Bushrut
Done in sync 1576754 nanoseconds
Done in async 34300630 nanoseconds
Bushrut
вроде так же
Bushrut
вообщем не использовать синхронный ?
Nikolay
почему
Nikolay
ты можешь как консольную утилиту использовать
Nikolay
через exec
Bushrut
Done in sync 1486781 nanoseconds
Done in async 133205729 nanoseconds
Bushrut
разница огромная прям
Name
разница огромная прям
https://0bin.net/paste/W6g-YisbmOmumjHO#Rxf1iBdU12QCcTq5Qij4R4ufmXSCyOylk-gdoYMlwbY а теперь посмотри вот этот (тоже не совсем корректный, но тут мы хоть не меряем ожидание нового цикла)
Bushrut
Done in sync 23969115 nanoseconds
Done in async 2375564 nanoseconds
Nikolay
надо мерять в двух разных файлах
Nikolay
по очереди
Nikolay
а не в одном
Name
да, конечно, и уж тем более не один раз, и тем более не измерять задержки файловой системы, я просто указал принципиальную ошибку
hamper 𓅝
надо во первых хотя бы несколько сотен измерений проводить, во вторых там куча факторов которые могут влиять, от общей загруженности процессора, до оверхедов на создание функций и прочее
Anonymous
на разных осях, машинах и выводить общее среднее?
JẹtFightżer
Nikolay
а на чем щас модно простые проектики стартовать?
Nikolay
TARS?
Vlad
create-react-app
Vlad
next.js
Nikolay
а если мне нужно простая html страничка
Nikolay
с css, jquery
Vlad
$ vim index.html
Nikolay
ну я хочу еще туда stylus, собиралку всего js
Nikolay
ладно, пойду TARS ковырять
Vlad
сначала css/jquery
Vlad
потом stylus+js-bundling
Vlad
тарс умеет в вебпак?
Андрій
да
Vlad
тогда мб подойдёт
Дима
Дима
Постарался провести корректные измерения, сведя погрешность от создания функций и прочего оверхеда к нулю
Дима
Дима
Требуются модули bluebird, hirestime — это модуль таймера для нормальных миллисекунд и ramda (¯\_(ツ)_/¯)
Дима
Дима
Сначала генерируются данные в виде буферов достаточно большого размера (5-6 мегабайт), для каждого файла — свой уникальный буфер, чтобы ничего нигде не кэшировалось
Дима
Потом по очереди стартует синхронный и асинхронный тест
Каждый файл пишется строго по одному, чтобы ничего нигде не перебивалось и не накладывалось
Nikolay
и кто вин?
Дима
Ща
Nikolay
обычно для таких тестов делают gist или репку
Nikolay
а то у тебя там babel нужно )
Дима
Таймер стартует прямо перед началом записи и заканчивает сразу после, в первой строке колбека, данные в этом промежутке не считаются
Дима
Ну у меня просто проект был открыт как раз про запись файлов 😄
Дима
Нода стартует с максимальныи приоритетом, то есть остальные процессы влиять почти не будут
Дима
В итоге в консоль выводит median и mean от сотни тестов
Дима
Проверял на ssd, на винде
Дима
Sync
median: 6.18 mean: 18.294600000000006
Async
median: 18.15 mean: 20.79539999999999
Дима
mean — среднее арифметическое, median — медиана
означает, что в основном синхронный вариант будет чуть быстрее завершаться, но на суммарное время записи это всё равно ̶п̶о̶ч̶т̶и̶ ̶н̶е̶ ̶п̶о̶в̶л̶и̶я̶е̶т̶
Перевес на 5-30%