Ответ 1
Спецификация ECMA не определяет ограничительную сложность, однако вы можете получить ее из алгоритмов спецификации.
push
- это O (1), однако на практике он столкнется с расходами на копирование O (N) на определенных границах движка, поскольку массив слотов необходимо перераспределить. Эти границы обычно логарифмичны.
pop
- это O (1) с аналогичной оговоркой к push
, но копия O (N) встречается редко, поскольку ее часто складывают в сборку мусора (например, копировальный коллектор может копировать только использованную часть массив).
shift
в худшем случае O (N), однако в особых случаях он может быть реализован как O (1) за счет замедления индексации, поэтому ваш пробег может меняться.
slice
- O (N), где N - end - start
. Не огромная возможность оптимизации здесь без значительного замедления записи в оба массива.
splice
, в худшем случае, O (N). Существуют методы хранения массивов, которые делят N на константу, но значительно замедляют индексирование. Если двигатель использует такие методы, вы можете заметить необычно медленные операции, поскольку он переключается между методами хранения, вызванными изменениями шаблонов доступа.
Тот, о котором вы не говорили, < <27 > . В среднем случае это O (N log N). Однако в зависимости от алгоритма, выбранного двигателем, вы можете получить O (N ^ 2) в некоторых случаях. Например, если движок использует QuickSort (даже с поздним выходом в InsertionSort), он имеет известные случаи N ^ 2. Это может быть источником DoS для вашего приложения. Если это связано с ограничением размера массивов, которые вы сортируете (возможно, слиянием подмассивов) или выкупа в HeapSort.