Comments 27
Про то как V8 оптмизирует код почитайте. Ваш бенчмарк совершенно некорректен.
+3
Спасибо за комментарий. Напишите, пожалуйста корректный бенчмарк. Очень хочется посмотреть на грамотную реализацию.
0
Зря накинулись:
http://programmers.stackexchange.com/questions/278778/why-are-native-es6-promises-slower-and-more-memory-intensive-than-bluebird
http://programmers.stackexchange.com/questions/278778/why-are-native-es6-promises-slower-and-more-memory-intensive-than-bluebird
+5
Абсолютно бесполезный бенчмарк. Тестировать промисы нужно под асинхронной нагрузкой.
+2
Можете привести пример?
0
Что даст «асинхронная нагрузка»? Завалит callback queue колбеками от асинхронных вызовов? На чистое время исполнения промисов, это не повлияет.
0
впечатляет, а что на счет observble?
0
Object.observe? судя по всему он тоже написан на javascript и там тоже можно ожидать худших результатов, чем у аналогов.
-2
Неделю назад был статья JavaScript Performance, базы данных и поиски «серебряной пули»: видеозаписи ТОП-5 докладов HolyJS 2016
В ней есть видео на доклад Вячеслава Егорова, «Производительность JavaScript через подзорную трубу»
В данном докладе объясняется почему данный бенчмарк некорректен.
И вот хорошая статься Что браузеры делают с вашим JavaScript-кодом: об оптимизациях в JS-движках на примере V8
В ней есть видео на доклад Вячеслава Егорова, «Производительность JavaScript через подзорную трубу»
В данном докладе объясняется почему данный бенчмарк некорректен.
И вот хорошая статься Что браузеры делают с вашим JavaScript-кодом: об оптимизациях в JS-движках на примере V8
0
Бенчмарк поправил. Сейчас более корректно?
0
UFO just landed and posted this here
Иногда промисы используют например в анимациях:
function show(element) {
return new Promise(resolve => element.animate([
{ opacity: 0, transform: 'scale(.5)' },
{ opacity: 1, transform: 'scale(1)' }
], { duration: 250 }).onfinish = resolve).then(() => {
element.style.opacity = 1;
});
}
+1
В собственно анимации тут промисы явно не используются.
+1
Более — они и в Ajax запросах, в популярных библиотеках, тоже явно не используются. Я просто привел пример, где производительность промисов может как то повлиять на конечный результат.
0
В данном случае один единственный промис не в состоянии как-либо повлиять на анимацию.
0
show(el).then(() => hide(el)).then(() => show(el)).then(() => expand(el))...;
Например цепочка промисов. Чем больше задержка в промисах, тем дерганей будут переходы между анимациями. Но да, полагаю это не сильно существенно если промисы достаточно быстрые и доли секунды не заметны глазу.
Но не всегда асинхонная функция асинхронна. Иногда функция (в зависимости от разных ситуаций) сама принемает решение: получить данные из стороннего источника или взять уже имеющиеся в кэше и отдать синхронно, но интерфейс все равно — промис. Тогда было бы не плохо получить данные максимально быстро. Не так ли?
+1
Стараются, по крайней мере движение есть
node v6.3.1: 26.3 сек
node v6.5.0: 16.5 сек
Вообще на node 6.5.0 тест из статьи выдает такие результаты:
node v6.3.1: 26.3 сек
node v6.5.0: 16.5 сек
Вообще на node 6.5.0 тест из статьи выдает такие результаты:
Bluebird
Время выполнения 14.876 сек.
Native promise
Время выполнения 16.519 сек.
0
Странные результаты. У меня на node 6.5.0 совсем по другому. В статью добавил результаты, полученные при использовании этой версии.
0
Первый вариант повторно
Второй вариант:
$ node prom.js
Бенчмарк промисов выполнен!
Время выполнения 14.426 сек.
$ node prom.js
Бенчмарк промисов выполнен!
Время выполнения 15.856 сек.
$ node -v
v6.5.0
Второй вариант:
$ node prom.js
Бенчмарк промисов выполнен!
Время выполнения 2.7 сек.
$ node prom.js
Бенчмарк промисов выполнен!
Время выполнения 10.404 сек.
0
UFO just landed and posted this here
Все корректно — Петька Антонов адово крутит перфоманс, и его реализация давным-давно известна за чудовищную эффективность. А вот почему его код не перенесли в v8 — для меня большой вопрос.
0
bluebird быстрее стандартных промисов, да и прочих реализаций промисов. Это факт.
Но ваш тест, даже откинув остальные косяки, тестирует не промисы, а crypto.randomBytes
. То, что происходит внутри промисов должно выполняться за константное время, чтобы протестировать непосредственно промисы.
0
Рекомендую еще сравнить расход оперативной памяти на промисы.
Будете очень удивлены, особенно в Google Chrome.
По нашим тестам, нативные промисы съели около 200 МБайт памяти на 100 000 вызовов.
Bluebird — что-то около 10 Мбайт кажется.
Будете очень удивлены, особенно в Google Chrome.
По нашим тестам, нативные промисы съели около 200 МБайт памяти на 100 000 вызовов.
Bluebird — что-то около 10 Мбайт кажется.
+1
Sign up to leave a comment.
Проверяем скорость работы промисов