итерация всех Rectangles

  • Автор темы Автор темы ssyabr
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.
Ответ: Вопрос закрыт. Всем спасибо!

ssyabr сказал(а):
Давайте подумаем, а что меряет Ваш первый скрипт? Показывает ли он разницу во времени между выполнением при помощи
дополнительного массива и без него? Ответ прост - нет.
Что же меряет Ваш cкрипт? Ваш скрипт меряет все что угодно : получение свойств, выполнение методов, чтение содержимого text
story, изменение ее же содержимого. Но Ваш скрипт не меряет самого главного, а именно создание массива и наполнение массива!
В чем ЗАДАЧА скрипта? в создании и наполнении массива или в некоторых действиях с ИД (получение свойств, выполнение методов, чтение содержимого text story, изменение ее же содержимого)? Есть мнение, что именно второе.

1. Создание массива - это выделение под него куска памяти. Поскольку javascript использует слаботипизированные переменные, разницы в скорости при объявлении массивов нет никакой.
2. Наполнение массива требует МЕНЬШЕ затрат времени по отношению к изменению свойств объектов с некоей проверкой. Сие очевидно теоретически и подтверждается практически. Зато обработка элементов в массиве на порядок быстрее прямой - это практически. В серьезном скрипте, обрабатывающем большие объемы структурированных данных преимущество по времени может быть в разы.
3. Неоднократно уже упоминалось о том, что обработка более 10 000 элементов при помощи прямого обхода намертво подвешивает ИД.

ssyabr сказал(а):
В нем я попытался убрать все лишнее. Результат на лицо : второй кусок кода отработал в 1,5 раза быстрее.

Ваше утверждение "создание массива занимает время, экспоненциально приближающееся к нулю. Равно и наполнение." звучит смешно и по другой причине. Вы сами написали "экспоненциально приближающееся к нулю". Экспоненциальго в зависимости от чего? От колбасок? Видимо от количества элементов. Так? Это в свою очередь делает справедливым утверждение : "создание массива занимает время, экспоненциально приближающееся к бесконечности, при увеличении количества элементов".

Давайте попроще. Поясняю.
Если обработать нужно 10 элементов, создание массива бессмысленно и занимает намного больше времени чем обработка.
При 100 элементах время создания массива по отношению к обработке значительно уменьшается.
При 1000 - величина эта уже несущественна.
При 10 000 - практически ноль.

Понятно?

ssyabr сказал(а):
Очевидно, что надо выбирать между дешевой вставкой элемента в коллекцию и временем потраченным на произвольный доступ к элементу. Ну что же... За все надо платить... Бесплатно только, сами знаете что может быть

Дешево ОБРАБОТАТЬ элемент в созданном массиве! В этом на собственном опыте можно убедиться, если написать тестовый скрипт с большим количеством обработок. Наполнение массива дешево ТОЛЬКО по отношению к перебору элементов С ОБРАБОТКОЙ. Компрене?
 
Ответ: Вопрос закрыт. Всем спасибо!

2 Oleg Butrin,

Что вы мне тут так усиленно пытаетесь доказать? Найдите свой первый пост в этой теме:

Oleg Butrin сказал(а):
Более того, если все ректанглы собрать сперва в один массив, а потом их обрабатывать, будет еще быстрее.
Если создание коллекции, ее наполнение и переборор элементов занимает время, пусть даже ничтожно малое, как можно писать, что "будет еще быстрее"??? Ферсштанден?
Я вам на примере показал, что ВЫ НЕ ПРАВЫ. Быстрее это будет только в случае необходимости повторного обхода массива, о котором тут НЕ упоминалась.

Oleg Butrin сказал(а):
В чем ЗАДАЧА скрипта?
Задачи у всех разные, давайте не будем обобщать.

Oleg Butrin сказал(а):
1. Создание массива - это выделение под него куска памяти. Поскольку javascript использует слаботипизированные переменные, разницы в скорости при объявлении массивов нет никакой.
Заблуждение номер один. При создании массива память выделяется под сам объект, а не под сами элементы. Это следует понимать и различать. Очевидно предположить, что наиболее оптимальной реализацией массивов в скрипте будет именно гибрид списка и вектора. Но об этом я уже писал выше. Будьте внимательны и соизвольте ознакомиться с мнением опонента...

Oleg Butrin сказал(а):
2. Наполнение массива требует МЕНЬШЕ затрат времени по отношению к изменению свойств объектов с некоей проверкой. Сие очевидно теоретически и подтверждается практически.
Заблуждение номер два. Не зная природы хранимых объектов НЕ СТОИТ делать таких смелых утвердждений. Более того, вы забыли упомянуть о времени, необходимом при перераспределении памяти, при возможной реализации массивов посредставом вектора. При смешанной реализации(гибрид вектора и списка) потребуется перераспределять лишь страницу памяти.

Oleg Butrin сказал(а):
Давайте попроще. Поясняю.
Если обработать нужно 10 элементов, создание массива бессмысленно и занимает намного больше времени чем обработка.
При 100 элементах время создания массива по отношению к обработке значительно уменьшается.
При 1000 - величина эта уже несущественна.
При 10 000 - практически ноль.

Понятно?
Ваше ИМХО мне более чем понятно...
Теперь мое ИМХО : при необходимости повторного обращения к элементам коллекции , создание дополнительной может быть оправдано.

ЗЫЫЫЫ:
вопрос уже давным давно закрыт! :y)
 
Статус
Закрыто для дальнейших ответов.