| 
	| 
	
	| 
		
	| 
			
			 
			
				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 известен, хоть поверхностно? Если да, то должны понять о чем я и к чему все это. |  |  |  |