26.10.2010, 04:48
|
|
Кандидат Javascript-наук
|
|
Регистрация: 19.10.2010
Сообщений: 143
|
|
Массив объектов или объект объектов
Достопочтенная публика, на ваше публичное осуждение выставляется мой замутненый разум, в значительной степени ОН расщепленный.
Если Array - объект, и содержит объекты то это как не крути массив объектов со всеми присущими тратами памяти, с другой стороны если взять Хэш массив, опять таки объект, то опять таки имеем массив объектов, правда с "именованными" ключами.
Вопрос: нахрена козе баян? Ну а если серьезно, то где памяти больше утечет?
|
|
26.10.2010, 08:29
|
|
Матрос
|
|
Регистрация: 04.04.2008
Сообщений: 6,246
|
|
Сам-то как думаешь?
Все специфичные методы объектов Array, и Object находятся в прототипах.
то есть большая часть затраты памяти - напрямую связано с самим абстрактным типом данных.
ну, и вполне очевидно, что ассоциативный массив занимает больше памяти чем неассоциативный
|
|
26.10.2010, 09:23
|
Новичок на форуме
|
|
Регистрация: 19.02.2008
Сообщений: 9,177
|
|
А с чего памяти вообще утекать-то?
|
|
26.10.2010, 12:26
|
Профессор
|
|
Регистрация: 20.03.2008
Сообщений: 1,183
|
|
в яваскрипте нет массивов ;-)
__________________
.ня
|
|
26.10.2010, 13:15
|
|
Кандидат Javascript-наук
|
|
Регистрация: 19.10.2010
Сообщений: 143
|
|
tenshi, а кто сказал что они есть?
Kolyaj, я не имел в виду "утечки" как таковые, речь идет о тратах памяти.
Gvozd, так-то так, только есть у меня подозрения что ?!"маленькие"!? массивы выгоднее делать на основе Object, а не Array. Но с другой стороны, Array потомок Object, а значит каждое значение отягощено всей дребухой присущей как тому, так и другому в случае хранения числовых значений.
В общем нехрена не очевидно Но линия такая тонкая
Вы меня просветлите, мож я че не так думаю
З.Ы. Согласитесь, тема более интересная чем: "напишите мне скрипт, а то я тут только сегодня зарегался" или "у меня на сайте, адрес которого я вам не дам, в коде ошибка которую я вам не покажу, в чем дело-то"
|
|
26.10.2010, 13:18
|
Новичок на форуме
|
|
Регистрация: 19.02.2008
Сообщений: 9,177
|
|
Тема неинтересная, вы не заметите разницы, особенно на ?!"маленьких"!? массивах.
|
|
26.10.2010, 14:11
|
|
Кандидат Javascript-наук
|
|
Регистрация: 19.10.2010
Сообщений: 143
|
|
Ну пока это поделки, да. Однако некоторые поделки вырастают до разных размеров Я предпочитаю, по возможности, подумать и написать помелче код. А если тонкости языка известны, то какие проблемы.
Вот в частности в PHP при использовании цикла for лучше написать ++$i, а не наоборот. В случае одного цикла это значения не имеет, а вот в случае навороченной CMS уже имеет, но никто особо не стремиться все это переписывать, хлопотно. Со сборщиком мусора там тоже тараканы есть. И тут тоже плюшки свои есть.
Подискутировать на тему высоких материй всегда интересно, можно даже ченить подчерпнуть
Насчет маленьких, не замечу, но она есть, однако при правильном использовании и при больших будет разница. Только вот неплохо было бы понять критерий слова "правильное"
А также не стоит забывать, что объем затраченной памяти обратно пропорционален производительности.
|
|
26.10.2010, 14:38
|
Новичок на форуме
|
|
Регистрация: 19.02.2008
Сообщений: 9,177
|
|
Сообщение от vladlen
|
В случае одного цикла это значения не имеет, а вот в случае навороченной CMS уже имеет
|
И в случае навороченной CMS не имеет, т.к. в процессе одного запроса все эти циклы запускаться не будут, а в одном случае один цикл, в другом -- другой. Поэтому разницы вы опять же не заметите. Даже если у вас внезапно появится цикл с перебором миллиона элементов (какие обычно делают в подобных тестах), то основное время будет тратиться на обработку самих элементов, а не на $i++, так что смена на ++$i опять же ничего не даст.
Я не понимаю, на чём вы пытаетесь память сэкономить, на именах свойств?
|
|
26.10.2010, 15:34
|
|
Матрос
|
|
Регистрация: 04.04.2008
Сообщений: 6,246
|
|
Сообщение от vladlen
|
Array потомок Object, а значит каждое значение отягощено всей дребухой присущей как тому, так и другому в случае хранения числовых значений.
|
Array имеет в качестве прототипа экземпляр Array-а, который имеет в качестве прототипа экземпляр Object-а
поэтому "дребуха" хранится в уже и так существующих объектах, и никак не сказывается на размер новых объектов.
А вообще, это экономия на спичках.
Надо руководствоваться в данном случаен не затратами памяти, а уровнем абстракции, и использовать логически верный Абстрактный Тип Данных
К тому же, речь о производительности JS следует вести в контексте конкретных браузеров.
Внутри них возможны различные реализации.
|
|
26.10.2010, 15:36
|
|
Кандидат Javascript-наук
|
|
Регистрация: 19.10.2010
Сообщений: 143
|
|
Сообщение от Kolyaj
|
Я не понимаю, на чём вы пытаетесь память сэкономить, на именах свойств?
|
Экономя память поднимается производительность. На рациональном использовании того что лучше подходит для решения тех или иных задач.
Не забывайте, Вы работаете с объектами и значит вы имеете дело с указателями ссылающимися на другие указатели, а данные разбросаны по памяти. Чем больше объект с которым вы работаете, тем больше фрагментированна память. Ну и пошли поехали. Каждая реализация интерпритатора: JScript, БелкаРыба да и хер как там они называются могут оптимизировать работу с ней, но могут этого и не делать.
Вам ASM известен, хоть поверхностно? Если да, то должны понять о чем я и к чему все это.
|
|
|
|