Oleg Butrin
20 лет на форуме
- Сообщения
- 1 993
- Реакции
- 1 224
Ответ: Вопрос закрыт. Всем спасибо!
1. Создание массива - это выделение под него куска памяти. Поскольку javascript использует слаботипизированные переменные, разницы в скорости при объявлении массивов нет никакой.
2. Наполнение массива требует МЕНЬШЕ затрат времени по отношению к изменению свойств объектов с некоей проверкой. Сие очевидно теоретически и подтверждается практически. Зато обработка элементов в массиве на порядок быстрее прямой - это практически. В серьезном скрипте, обрабатывающем большие объемы структурированных данных преимущество по времени может быть в разы.
3. Неоднократно уже упоминалось о том, что обработка более 10 000 элементов при помощи прямого обхода намертво подвешивает ИД.
Давайте попроще. Поясняю.
Если обработать нужно 10 элементов, создание массива бессмысленно и занимает намного больше времени чем обработка.
При 100 элементах время создания массива по отношению к обработке значительно уменьшается.
При 1000 - величина эта уже несущественна.
При 10 000 - практически ноль.
Понятно?
Дешево ОБРАБОТАТЬ элемент в созданном массиве! В этом на собственном опыте можно убедиться, если написать тестовый скрипт с большим количеством обработок. Наполнение массива дешево ТОЛЬКО по отношению к перебору элементов С ОБРАБОТКОЙ. Компрене?
В чем ЗАДАЧА скрипта? в создании и наполнении массива или в некоторых действиях с ИД (получение свойств, выполнение методов, чтение содержимого text story, изменение ее же содержимого)? Есть мнение, что именно второе.ssyabr сказал(а):Давайте подумаем, а что меряет Ваш первый скрипт? Показывает ли он разницу во времени между выполнением при помощи
дополнительного массива и без него? Ответ прост - нет.
Что же меряет Ваш cкрипт? Ваш скрипт меряет все что угодно : получение свойств, выполнение методов, чтение содержимого text
story, изменение ее же содержимого. Но Ваш скрипт не меряет самого главного, а именно создание массива и наполнение массива!
1. Создание массива - это выделение под него куска памяти. Поскольку javascript использует слаботипизированные переменные, разницы в скорости при объявлении массивов нет никакой.
2. Наполнение массива требует МЕНЬШЕ затрат времени по отношению к изменению свойств объектов с некоей проверкой. Сие очевидно теоретически и подтверждается практически. Зато обработка элементов в массиве на порядок быстрее прямой - это практически. В серьезном скрипте, обрабатывающем большие объемы структурированных данных преимущество по времени может быть в разы.
3. Неоднократно уже упоминалось о том, что обработка более 10 000 элементов при помощи прямого обхода намертво подвешивает ИД.
ssyabr сказал(а):В нем я попытался убрать все лишнее. Результат на лицо : второй кусок кода отработал в 1,5 раза быстрее.
Ваше утверждение "создание массива занимает время, экспоненциально приближающееся к нулю. Равно и наполнение." звучит смешно и по другой причине. Вы сами написали "экспоненциально приближающееся к нулю". Экспоненциальго в зависимости от чего? От колбасок? Видимо от количества элементов. Так? Это в свою очередь делает справедливым утверждение : "создание массива занимает время, экспоненциально приближающееся к бесконечности, при увеличении количества элементов".
Давайте попроще. Поясняю.
Если обработать нужно 10 элементов, создание массива бессмысленно и занимает намного больше времени чем обработка.
При 100 элементах время создания массива по отношению к обработке значительно уменьшается.
При 1000 - величина эта уже несущественна.
При 10 000 - практически ноль.
Понятно?
ssyabr сказал(а):Очевидно, что надо выбирать между дешевой вставкой элемента в коллекцию и временем потраченным на произвольный доступ к элементу. Ну что же... За все надо платить... Бесплатно только, сами знаете что может быть
Дешево ОБРАБОТАТЬ элемент в созданном массиве! В этом на собственном опыте можно убедиться, если написать тестовый скрипт с большим количеством обработок. Наполнение массива дешево ТОЛЬКО по отношению к перебору элементов С ОБРАБОТКОЙ. Компрене?