Контекст: я создаю небольшой сайт, который читает RSS-канал и обновляет / проверяет его в фоновом режиме. У меня есть один массив для хранения отображаемых данных и другой, в котором хранятся идентификаторы показанных записей.
Вопрос: сколько элементов может содержать массив в Javascript, прежде чем работа станет медленной или вялой. Я не сортирую массив, но использую функцию jQuery inArray для сравнения.
Веб-сайт будет продолжать работать и обновляться, и маловероятно, что браузер будет перезапускаться / обновляться так часто.
Если мне нужно подумать об очистке некоторых записей из массива, как лучше всего удалить некоторые записи после ограничения, например 100 элементов.
javascript
arrays
добавлен
источник
источник
Ответы:
Максимальная длина до тех пор, пока "он не станет вялым", полностью зависит от вашей целевой машины и вашего фактического кода, поэтому вам необходимо протестировать на этой (этих) платформе (ах), чтобы увидеть, что приемлемо.
Тем не менее, максимальная длина массива в соответствии с ECMA-262 5th Edition , спецификации связан беззнаковое 32-битное целое число из - за ToUint32 абстрактной операции, так что самый длинный возможный массив может иметь 2 32 -1 = 4294967295 = 4,29 миллиарда элементов .
источник
Нет необходимости обрезать массив, просто обратитесь к нему как к кольцевому буферу (индекс% maxlen). Это гарантирует, что он никогда не превысит лимит (реализация кругового буфера означает, что как только вы дойдете до конца, вы снова вернетесь к началу - невозможно выйти за конец массива).
Например:
источник
Вы можете попробовать что-то вроде этого, чтобы проверить и обрезать длину:
http://jsfiddle.net/orolo/wJDXL/
источник
Как сказал @maerics, ваша целевая машина и браузер будут определять производительность.
Но для некоторых реальных цифр на моем корпоративном Chromebook 2017 года выполняется операция:
x=5e4
занимает 16 мс, достаточно для 60 кадров в секундуx=4e6
занимает 250 мс, что заметно, но не имеет большого значенияx=3e7
занимает 1300 мс, что довольно плохоx=4e7
занимает 11000 мс и выделяет дополнительно 2,5 ГБ памятиТаким образом, около 30 миллионов элементов - это жесткий верхний предел, потому что виртуальная машина javascript падает с обрыва на 40 миллионах элементов и, вероятно, приведет к сбою процесса.
источник
Я создал платформу производительности, которая управляет миллионами наборов данных и отображает их в графиках, и даже тогда задержка вычисления javascript составляла порядка десятков миллисекунд. Если вы не беспокоитесь о превышении предельного размера массива, я не думаю, что вам есть о чем беспокоиться.
источник
Это будет сильно зависеть от браузера. 100 предметов не звучат как большое количество - я думаю, вы могли бы пойти намного выше этого. Тысячи - не проблема. Что может быть проблемой, так это общее потребление памяти.
источник
Я без зазрения совести вытащил несколько довольно больших наборов данных в память, и хотя это действительно стало медленным, потребовалось, может быть, 15 млн данных вверх с довольно интенсивными вычислениями в наборе данных. Я сомневаюсь, что у вас возникнут проблемы с памятью, если у вас не будут интенсивные вычисления с данными и большим количеством строк. Профилирование и сравнительный анализ с различными фиктивными наборами результатов будут вашим лучшим выбором для оценки производительности.
источник