Oleg
Ага, только не везде
Oleg
На столько не везде что только в IE и Edge
Oleg
То есть только у Микрософта
Константин
как раз этот метод и работает сразу же
Oleg
Ладно, не буду тут шуток шутить 😄
Oleg
Ой ли))
А я там ниже написал кейс
Oleg
Внешний мир может быть суров
Дима
Нет, именно внутри приложения
Дима
Ничто не мешает кривым рукам устроить гонку потоков на промисах
Oleg
Или сделать бесконечный цикл
Oleg
Ну тут увы, архитекрура не поможет 😄
Dima
Сборщик мусора лучше уберет мусор т.к. это почти явный его вызов, при этом оное эквивалентно тому что будет если вызвать setTimeout с 0
а почему setTimout с 0 - позволяет другим "процессам" выполняться? ведь 0 это и есть 0 ничего не ждем.
Oleg
А оно всё-равно кидает в очередь
Oleg
И продолжает выполнение того кода что есть, а когда завершает - только тогда смотрит очередь
Dima
А оно всё-равно кидает в очередь
я помню какую-то лекцию, о том что в JS есть некций стек, куда закладываются все действия. и они по очереди выоплняются
Dima
так смутно несколько лет назаж посмотрел бегом
Oleg
Это, к слову, хороший способ кинуть что-то в конец очереди исполнения
Dima
Это, к слову, хороший способ кинуть что-то в конец очереди исполнения
как на английском языке называется эта сущность в базсе жаваскритпа: очередь стек. чтоб о ней можно было почитать через гугл
Oleg
Да так же как и везде
Жуткая
Примерно через 10000, в зависимости от настроек, приложение упадет
А JS не оптимизирует на уровне байткода такие конструкции? Все таки будет переполнение стека?
Дима
В браузере минимум 12 мс
Oleg
А JS не оптимизирует на уровне байткода такие конструкции? Все таки будет переполнение стека?
Есть такие понятия как хвостовая рекурсия, ну и древовидная. Не смотря на то что это заложено в стандарт ES6 - до сих пор не реализовали. А до ES6 вообще не говорилось об этом.
Oleg
В браузере минимум 12 мс
А ещё может от питания ноутбука зависеть 😄
Дима
Oleg
Мир суров
Дима
Ога
Oleg
Не все согласуют спеку, увы
Дима
Браузеры — все
Oleg
А вот про рекурсии конечно странно что так и не внедрили
Oleg
Оптимизацию
Dima
Да так же как и везде
вот как это называется: https://developer.mozilla.org/en/docs/Web/JavaScript/EventLoop
Dima
event loop
Oleg
Да
Дима
Но своеобразных
Dreamerinnoise
https://twitter.com/horse_js/status/818666826888572928
Дима
Я когда добивался ультра скорости pipe / compose ловил значительный буст от вычисления функций прямо перед возвратом
Дима
типа какая-то фигня там оптимизируется
Дима
Я даже сформулировать это толком не могу >_<
Oleg
Тут уже исходники движков копать нужно
Oleg
Да
Ivan
https://www.youtube.com/watch?v=HPFARivHJRY
Ivan
вроде в этом докладе видел что-то по этому поводу
Andrey
Тоже интересно посмотреть, что было сделанно и дало эффект
Дима
Есть проект на гитхабе или gist с бенчмарком?
Ну в итоге пришёл к тому, что проще вообще все вычисления развернуть
Дима
А своя реализацая array-flatten даже с этими оптимизациями оказалась медленнее модуля array-flatten
Дима
В итоге модуль оказывается в разы быстрее ramda.compose и redux compose при том что они без уплощения аргументов)
Дима
https://github.com/zerobias/pipe-perf
Дима
Сейчас там бенчмарк выдаёт проценты результатов разных модулей от самого эффективного решения, но только недавно догадался как можно сделать оптимальный бенч — надо от развернутого пайпа проценты и считать) Думаю на следующих выходных добью
Konstantin
https://i.gyazo.com/9d049718af603f46244ab785c2657bd9.png
Andrey
https://github.com/zerobias/pipe-perf
спасибо, посмотрю и много ты накрутил над benchmark)
Дима
спасибо, посмотрю и много ты накрутил над benchmark)
Ну вообщ хочется в конце концов доделать до уровня фреймворка - воткнул тесты - получил процентное сравнение на правильно сгенерированных данных, среднее, медиану и доверительный интервал 0.95 😄🙈
Andrey
Да, отличная идея) Нужно еще сделать проверку выходных результатов, что все вернут одинаковое значение
Andrey
или я этого не нашел просто)
Andrey
а так, у меня стандартный бенчмарк выглядит так https://gist.github.com/Tom910/41e6f150bc6d1325ebe75f6fe04245bf
Дима
Все сравнить точно не получится, benchmark.js пару миллионов тестов вроде бы прогоняет 😄 Я там небольшой блок smoke test сделал, чтобы видеть какие результаты на самом деле возвращаются
Andrey
не, только один вызов проверять, не все
Дима
А, ну так да
Дима
Ещё одна проблема в том, что одинаковые данные закидывать нельзя, у тех кто выполняется позже может быть преимущество 🤔
Andrey
запускать в отдельной ноде?
Andrey
тогда можно сделать 2 теста, в прогретом состоянии и только холодном
Дима
запускать в отдельной ноде?
Я каждому испытуемому просто выдаю уникальные данные, так надёжнее
Дима
https://github.com/zerobias/pipe-perf/blob/master/src/bench/data-shuffle.js
Anton
Вопрос по replace. Мне нужно понять является ли объект объектом или массивом. Делаю Object.prototype.toString.call(photos[i]), на выходе получаю [object Array] или [object Object] Вопрос: как через 1 replace оставить только Array или Object? Пробовал Object.prototype.toString.call( photos[i] ) .replace(/\[object |\]/, ""), но на выходе тогда получаю Array] или Object] (с пробелом в начале). Как лучше избавиться от квадратных скобок, пробелов и object в начале в таком случае?
Anton
Спасибо
Anton
Как вариант решения задачи да, но из спортивного интереса хотелось понять как множественная замена replace делается в подобных случаях, когда у тебя пробелы и спецсимволы
Andrey
function - Функция, вызываемая для создания новой подстроки (помещаемой вместо подстроки из первого параметра). Аргументы, передаваемые функции, описаны ниже в разделе
Andrey
https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/String/replace