| 
	| 
	
	| 
		
	| 
			
			 
			
				08.04.2009, 20:16
			
			
			
		 |  
	| 
		
			|  | 
       |  | 
					Регистрация: 27.12.2008 
						Сообщений: 4,201
					 
		
 |  |  
	| 
	
 
	| Цитата: |  
	| Универсальные функции обычно и становятся узкими местами. Не лучше ли подумать об этом сразу, чем возвращаться потом |  
	
 нет, потому что заранее неизвестно, где будет узкое место. И вместо оптимизации всего кода, нужно оптимизировать конкретные места. А вообще, как сказал один чувак "если ты привык к такому стилю и можешь при этом эффективно заниматься проектом, то отлично. Пока кому-то другому не прийдется его отлаживать". Т.е. плюс в производительности (а это еще надо доказать на реальном проекте, мне вот так сходу не очевидно), но минус в сложностях поддержки проекта
 
	
 
	| Цитата: |  
	| А чем плох лишний уровень вложенности? Ты же за читаемость. |  
	
 тем что он лишний и это как раз про читабельность
 
	
 
	| Цитата: |  
	| Из-за одного такого случая вряд ли что-то изменится. Но если весь код писать так, то меняется, и очень даже заметно |  
	
 это все теория, нужен реальный (т.е. не теоретический) проект/страничка, выполненные, например, мной и тобой, на котором можно было бы сравнить производительность. Или может у тебя есть результаты подобных тестов, или статьи известных авторов на тему
 
	
 
	| Цитата: |  
	| Я вот только что был на qip.ru. У меня почта там. Зайди и посмотри, как тормозит почтовый интерфейс напичканный ajax-ом. При нажатии на ссылку запускающую javascript аж флеш-банеры подвисают. А теперь зайди на gmail |  
	
 1) это ничего не говорит про экономию на операторах, это говорит только о том, что gmail сделан лучше, а в чем именно причина - неизвестно 2) это довольно серьезные сервисы (для большинства сайтов не думаю, что ты заметишь свои оптимизации, разве что отдельные в отдельных местах) и для таких проектов вряд ли оправдано использование популярных фреймворков
			
			
	
			
			
			
			
			
				  |  |  
	| 
		
	| 
			
			 
			
				08.04.2009, 21:19
			
			
			
		 |  
	| 
		
			|  | Рассеянный профессор       |  | 
					Регистрация: 06.04.2009 
						Сообщений: 2,379
					 
		
 |  |  
	| 
	
 
	| Сообщение от x-yuri |  
	| нет, потому что заранее неизвестно, где будет узкое место |  
	
 Любая универсальная функция, это уже 100% узкое место, как бы идеально она не была оптимизирована, т. к. неизвестно заранее где она найдет себе применение. А рано или поздно она найдет себе применение в месте, где требуется высокая производительность. И тогда появится необходимость открыть ее и подумать над тем, как бы ускорить ее еще хоть на чуть-чуть. И тут уже даже экономия на спичках окажется эффективна. Зачем откладывать эту работу на потом, когда будут сроки.
 
	
 
	| Сообщение от x-yuri |  
	| но минус в сложностях поддержки проекта |  
	
 Для того кто будет работать с моим кодом может и так(если у него мало опыта). Для меня же это скорее плюс, т. к. я сильнее привязываю к себе заказчика. Студент Вася, помучившись недельку с "этим странным javascript-ом", откажется от работы, и позвонят опять мне. Я не говорю, что нужно специально писать запутанно, но и беспокоиться о Васе в ущерб себе не нужно. А при работе в группе заранее обговариваются правила оформления кода. И раз мне платят за какой-то определенный стиль, то и вопросов нет.
 
	
 
	| Сообщение от x-yuri |  
	| тем что он лишний и это как раз про читабельность |  
	
 Я уже совсем запутался. При всем своем желании, я не могу признать такой код:
 
if (! div.firstChild ||
            (div.innerHTML == noda.nodeValue))
                return;
//
более читабельным, чем такой:
 
if (div.firstChild && div.innerHTML != noda.nodeValue) {
    //
}
Создается ощущение, что это уже предвзятое мнение, просто для того что бы быть несогласным со мной.
 
	
 
	| Сообщение от x-yuri |  
	| нужен реальный (т.е. не теоретический) проект/страничка, выполненные, например, мной и тобой |  
	
 Я же привел ссылки. Или теперь уже нужно что бы это были не чьи то сайты. А потом что понадобится?
 
	
 
	| Сообщение от x-yuri |  
	| на котором можно было бы сравнить производительность |  
	
 Неужели так трудно написать:
 
var startTime = new Date();
for (var __i = 0; __i < 100001; __i++) {
	//
}
alert((new Date()) - startTime);
И сравнивай сколько хочешь.
 
	
 
	| Сообщение от x-yuri |  
	| Или может у тебя есть результаты подобных тестов |  
	
 Три 48-листовые тетради исписаны результатами.
 
	
 
	| Сообщение от x-yuri |  
	| а в чем именно причина - неизвестно |  
	
 По моему очевидно, что в кривом javascript-е.
			
			
	
			
			
			
			
			
				  |  |  
	| 
		
	| 
			
			 
			
				08.04.2009, 22:21
			
			
			
		 |  
	| 
		
			|  | 
       |  | 
					Регистрация: 27.12.2008 
						Сообщений: 4,201
					 
		
 |  |  
	| 
	
 
	| Цитата: |  
	| Создается ощущение, что это уже предвзятое мнение, просто для того что бы быть несогласным со мной |  
	
 ни в коем случае, например, вот здесь . Могу еще поискать источники
 
	
 
	| Цитата: |  
	| Я же привел ссылки. Или теперь уже нужно что бы это были не чьи то сайты. А потом что понадобится? |  
	
 у меня нету доступа ни к google-, ни к qip-серверам. Я не могу переписать ни одну из их страничек и сравнить разницу в производительности
 
	
 
	| Цитата: |  
	| Неужели так трудно написать: var startTime = new Date();
 for (var __i = 0; __i < 100001; __i++) {
 //
 }
 alert((new Date()) - startTime);
 И сравнивай сколько хочешь
 |  
	
 не трудно, но у меня пока такой необходимости не возникало. Т.е. когда тормоза были из-за js. А причин сравнивать производительность отдельных операторов не вижу смысла пока. Вижу причины искать узкие места, но ты такую деятельность похоже полностью исключаешь. Но откуда тогда взялось это выражение?
 
А по поводу твоих тестов, одни и те же операции во всех браузерах с одинаковой скоростью выполняются? А от версии к версии это меняется?
 
	
 
	| Цитата: |  
	| По моему очевидно, что в кривом javascript-е |  
	
 только не понятно, изменит что-то запись всех переменных в одном var, for, преобразование while -> do-while etc
			
			
	
			
			
			
			
			
				  |  |  
	| 
		
	| 
			
			 
			
				08.04.2009, 23:33
			
			
			
		 |  
	| 
		
			
			| ...       |  | 
					Регистрация: 09.03.2008 
						Сообщений: 216
					 
		
 |  |  
	| 
if (div.firstChild && div.innerHTML != noda.nodeValue) {
Бог с ней с читабельностью, а зачем это вообще нужно? |  |  
	| 
		
	| 
			
			 
			
				09.04.2009, 03:55
			
			
			
		 |  
	| 
		
			|  | 
       |  | 
					Регистрация: 27.12.2008 
						Сообщений: 4,201
					 
		
 |  |  
	| давайте тогда свой текущий вариант приведу: 
var TextNode = {
    each: function(callback, parent) {
        var childNodes = (parent || document.body).childNodes;
        length = childNodes.length;
        for (var i=0; i < length; i++) {
            var I = childNodes[i];
            if( I.nodeType == 1 )
                arguments.callee(callback, I);
            elseif( I.nodeType == 3 )
                callback(I, i);
        }
    }
};
 
window.onload = function() {
    TextNode.each(function(noda) {
        var div = document.createElement('div');
        div.innerHTML = noda.nodeValue.replace(/(http\:\/\/www\.youtube\.com\/watch\?v\=[0-9a-z]{11})/gi, '<a href="$1">$1</a>');
        if (! div.firstChild ||
            (div.innerHTML == noda.nodeValue))
                return;
        var f = document.createDocumentFragment();
        while (div.firstChild)
            f.appendChild(div.firstChild);
        noda.parentNode.replaceChild(f, noda);
    });
};
вариант Riim а, Поиск выражения в тексте 
не считаю, что все должны писать как я, мне скорее интересно, действительно ли оправдана такая экономия на каждом операторе, пусть даже и в библиотеках 
div.firstChild: в ie div.innerHTML = ' '; ничего в div не добавляет, т.е. "пустые" текстовые ноды удаляются, при этом нужно в другом месте либо на каждой итерации проверять текущую длину (а не считать ее один раз), либо делать в итерации проверку, что теукщий узел существует, а именно здесь: 
div.innerHTML != noda.nodeValue: чтобы не выполнять лишних действий, когда текущий узел останется таким же каким и был
			
			
	
			
			
			
			
			
				  |  |  
	| 
		
	| 
			
			 
			
				09.04.2009, 07:03
			
			
			
		 |  
	| 
		
			|  | Рассеянный профессор       |  | 
					Регистрация: 06.04.2009 
						Сообщений: 2,379
					 
		
 |  |  
	| 
	
 
	| Сообщение от x-yuri |  
	| браузерах с одинаковой скоростью выполняются? А от версии к версии это меняется? |  
	
 Вот потому тетрадей 3, а не 1. Все меняется, но соотношение очень редко. Если одна операция в 2 раза медленней в одном браузере, то 95% она будет медленней и в других. И в следующих версиях тоже.
 
	
 
	| Сообщение от x-yuri |  
	| А причин сравнивать производительность отдельных операторов не вижу смысла пока. Вижу причины искать узкие места, но ты такую деятельность похоже полностью исключаешь |  
	
 Нет, не исключаю. Просто у меня нет необходимости в ней. Зная производительность каждого оператора, можно писать функцию и параллельно просчитывать ее производительность. Дальше сразу ясно, где и когда она станет узким местом. И когда это случится, сразу будет ясно в каком направлении копать.
 
	
 
	| Сообщение от x-yuri |  
	| только не понятно, изменит что-то запись всех переменных в одном var, for, преобразование while -> do-while |  
	
 Я уже писал, что из-за одного случая ничего не изменится. Нужно стараться ВСЕ писать как можно лучше.
 
	
 
	| Сообщение от x-yuri |  
	| у меня нету доступа ни к google-, ни к qip-серверам |  
	
 И теперь можно писать, как вздумается? По-моему нужно стараться становиться лучшим программистом, чем есть. 
Может моя экономия на спичках не так эффективна, как мне/тебе хотелось бы, но я хоть что-то стараюсь для этого делать.
 
----
 
Ну ладно, вот с этим:
 
if (! div.firstChild ||
            (div.innerHTML == noda.nodeValue))
                return;
еще можно мириться, но не менять while на do-while. Мне кажется, что любой хороший программист должен стараться избавлять логику программы от лишних действий. К тому же настолько очевидных.
 
----
 
Что касается авторитетных мнений, то ты сам сказал, что копаешься в Jquery. Там же всюду экономия на спичках, как в объеме кода так и в производительности. Чем тебе не авторитетное мнение. 
Возьми любой другой фреймворк кроме PrototypeJs. Везде это есть. И в PrototypeJs тоже есть, только у меня создалось впечатление, что автор сего творения, создавая метод, не задумывается над вопросом: "сжать его или ускорить?", и лепит первую оптимизацию, что придумалась. В результате часто методы, на которых половина фреймворка держится, оказываются, почему то сжаты, а там где можно было спокойно сжимать, явная оптимизация производительности. Вот и появляются те самые узкие места, которые теперь искать нужно. А ведь можно было сразу их исключить. В результате PrototypeJs самый тормозной фреймворк из известных, и чуть более сложные интерфейсы на его основе (lightbox например) тормозят значительно заметнее аналогичных на Jquery.
			
			
	
			
			
			
			
			
				  |  |  
	| 
		
	| 
			
			 
			
				09.04.2009, 08:29
			
			
			
		 |  
	| 
		
			
			| ...       |  | 
					Регистрация: 09.03.2008 
						Сообщений: 216
					 
		
 |  |  
	| 
	
 
	| Сообщение от Riim |  
	| Мне кажется, что любой хороший программист должен стараться избавлять логику программы от лишних действий. |  
	
 Поэтому для каждой! ноды вы создаёте элемент и так далее. Я задал выше вопрос, неужто никто не видит, что до разговора о спичках, нужно ошибки логики устранить...   |  |  
	| 
		
	| 
			
			 
			
				09.04.2009, 08:38
			
			
			
		 |  
	| 
		
			|  | 
       |  | 
					Регистрация: 27.12.2008 
						Сообщений: 4,201
					 
		
 |  |  
	| 
	
 
	| Цитата: |  
	| поэтому для каждой! ноды вы создаёте элемент и так далее. Я задал выше вопрос, неужто никто не видит, что до разговора о спичках, нужно ошибки логики устранить... |  
	
 то, что можно один раз создавать div и DocumentFragment? Да (собственно, идея Dmitry A. Soshnikov) И это скорее оптимизация, чем ошибка логики 
Но речь не о том. Дальше что? Исправили. Нужно дальше оптимизировать? 
p.s. Riim , авторитеность jQuery сомнительна - Сторонние библиотеки - быть или не быть? |  |  
	| 
		
	| 
			
			 
			
				09.04.2009, 08:40
			
			
			
		 |  
	| 
		
			|  | Рассеянный профессор       |  | 
					Регистрация: 06.04.2009 
						Сообщений: 2,379
					 
		
 |  |  
	| 
	
 
	| Сообщение от Zeroglif |  
	| что до разговора о спичках, нужно ошибки логики устранить |  
	
 Похоже вы сами еще не до конца разобрались в логике кода. 
Если видите ошибки, приводите свой вариант.
 
	
 
	| Сообщение от Zeroglif |  
	| Поэтому для каждой! ноды вы создаёте элемент и так далее |  
	
 Можно и без этого обойтись. Я спорю на тему "как оптимизировать код" на примере window.onload, но это плохой пример т. к. это одноразовый код. Я уже писал что мне все равно как он оптимизирован. Я просто взял несколько моментов из него как примеры.
 
	
 
	| Сообщение от Zeroglif |  
	| Я задал выше вопрос, неужто никто не видит |  
	
 x-yuri вам ответил на него. В постах выше я 2 раза пояснял эту строку. Читайте внимательней. |  |  
	| 
		
	| 
			
			 
			
				09.04.2009, 08:43
			
			
			
		 |  
	| 
		
			|  | Рассеянный профессор       |  | 
					Регистрация: 06.04.2009 
						Сообщений: 2,379
					 
		
 |  |  
	| 
	
 
	| Сообщение от Riim |  
	| x-yuri вам ответил на него. В постах выше я 2 раза пояснял эту строку. Читайте внимательней. |  
	
 Если все равно не понятно, запустите:
 
window.onload = function() {
	TextNode.each(function(noda) {
		var div = document.createElement('div');
		div.innerHTML = noda.nodeValue.replace(/(http\:\/\/www\.youtube\.com\/watch\?v\=[0-9a-z]{11})/gi, '<a href="$1">$1</a>');
		if (div.firstChild && div.innerHTML != noda.nodeValue) {
			alert('1');
		}
	});
	
	TextNode.each(function(noda) {
		var div = document.createElement('div');
		div.innerHTML = noda.nodeValue.replace(/(http\:\/\/www\.youtube\.com\/watch\?v\=[0-9a-z]{11})/gi, '<a href="$1">$1</a>');
		//if (div.firstChild && div.innerHTML != noda.nodeValue) {
			alert('2');
		//}
	});
	
};
Только body получше заполните |  |  
 
 
 
 |  |