Порридж В Ко-ливинге
Я конечно понимаю, что Array.push типо O(1), но реалокацию памяти, особенно когда 10^8 элементов никто не отменял
Порридж В Ко-ливинге
Попробуй просто сделать массив фикс длиныы
Порридж В Ко-ливинге
Roman
так с мапой он за 5сек решается, bottleneck в объекте был, который выдавал 3мин
Roman
Roman
Порридж В Ко-ливинге
А, да увидел, я не увидел shift
Порридж В Ко-ливинге
Roman
Какой bottleneck?
поиск по объекту по ключу намного медленее, чем поиск по мапе
Порридж В Ко-ливинге
Lynn «Кофеман»
Какой bottleneck?
map.has(n) быстрее n in obj или obj[n]. Потому что не ходит вверх по прототипу
Порридж В Ко-ливинге
Вряд ли в 36 раз медленнее
Roman
Разве на много?
я не замерял, но смена структуры дала снижение с 3мин до 5сек
Порридж В Ко-ливинге
Lynn «Кофеман»
Да вообще объекты не заточены под три миллиона ключей
Порридж В Ко-ливинге
Roman
Lynn «Кофеман»
К тому же целочисленных ключей, что заставляет объект их сортировать, ибо целочисленные неотрицательные ключи в объекте всегда отсортированы
Lynn «Кофеман»
В общем, простой объект это плохое хранилище для нескольких миллионов значений
Roman
Lynn «Кофеман»
Интересно проверить что будет если использовать ключи вида a123, что б они были не numeric
Evgeniy
Порридж В Ко-ливинге
Порридж В Ко-ливинге
Сортировался бы словарным способом
Порридж В Ко-ливинге
Было до ES6 не стандартом, но все браузеры делали так. В итоге решили сделать стандартом
Evgeniy
Evgeniy
Расчет видимо на то, что никто не будет много ключей создавать
Evgeniy
Небольшое количество можно быстро отсортировать
Lynn «Кофеман»
Ну да, это было особенностью имплементации. Но тут же как обычно, в (условном) browser1 так сделали. Разработчики browser2 и browser3 может и хотели бы по другому, но тогда ломались сайты тех авторов которые заложились на поведение browser1. Пришлось сделать так же. А потом глядь, и все считают что именно так и должно быть. Пришлось запихать в стандарт.
Roman
https://tc39.es/ecma262/#sec-ordinaryownpropertykeys а вот ссылочка на стандарт подъехала)
Порридж В Ко-ливинге
Lynn «Кофеман»
В общем, как обычно, жопа лошади 😀
Порридж В Ко-ливинге
🤣
Lynn «Кофеман»
В 2. В 1 тебе хром отсортировал по алфавиту для красоты
Evgeniy
Evgeniy
Лишь бы они были разумными)
Evgeniy
Viktor
Что-то я так задрался писать код в сегодняшней задаче, что во второй части, когда получил мапинг между позициями и возможными названиями, взял аутпут и в соседней вкладке через find-and-replace нашёл соответствия и запамил на нужные чиселки в своём билете руками 😂
Порридж В Ко-ливинге
Ну и правильно, ручками тоже иногда надо работать
Viktor
но вообще это смешно, конечно, обленился совсем.
Viktor
потом дописал код уже после того как отправил ответ.
Ilia
Когда оценивают конечный результат, а не код, то почему бы и нет?:)
Viktor
не эту задачу, другую.
Viktor
говорит «я руководитель такого-то отдела, и как вы поняли из моей должности, программировать я не умею, но это ничего, в этой задаче это и не надо» 😄
Viktor
зачёт за humble bragging
Порридж В Ко-ливинге
Вопрос на засыпку (боюсь @alexeyten даже знает ответ):
Что быстрее:
arr1 = arr1.concat(arr2);
или
arr1.push(...arr2);
ЕСЛИ ДЛИНА РАВНА:
1) 1_000_000
2) 100_000
3) 10_000
Порридж В Ко-ливинге
Viktor
Порридж В Ко-ливинге
Ilia
Почувствовал себя калекой, до этого момента всегда думал, что пуш позволяет только один элемент добавить, потому что больше одного никогда не добавлял :D
Порридж В Ко-ливинге
Ilia
Либо я путаю с сетом и добавлял через пуш, просто сам этого не замечал
Порридж В Ко-ливинге
Порридж В Ко-ливинге
Об этом бы не спросили бы
Порридж В Ко-ливинге
Спросили бы про ..., про то, как соединить 2 массива, но не про это
Порридж В Ко-ливинге
Viktor
если ты этого не знаешь, вряд ли это означает, что ты «плохой программист»
Порридж В Ко-ливинге
Viktor
Viktor
Viktor
Порридж В Ко-ливинге
Порридж В Ко-ливинге
Stackoverflow наверное не совсем подходит под это
Viktor
Viktor
Кстати, видосик про вчерашнюю задачу https://www.youtube.com/watch?v=etMJxB-igrc та самая игра
Viktor
«кто-то» я имею в виду сам джаваскрипт