Цитата:
Цитата:
Цитата:
Цитата:
|
Цитата:
Цитата:
Цитата:
if (! div.firstChild || (div.innerHTML == noda.nodeValue)) return; // более читабельным, чем такой: if (div.firstChild && div.innerHTML != noda.nodeValue) { // } Создается ощущение, что это уже предвзятое мнение, просто для того что бы быть несогласным со мной. Цитата:
Цитата:
var startTime = new Date(); for (var __i = 0; __i < 100001; __i++) { // } alert((new Date()) - startTime); И сравнивай сколько хочешь. Цитата:
Цитата:
|
Цитата:
Цитата:
Цитата:
А по поводу твоих тестов, одни и те же операции во всех браузерах с одинаковой скоростью выполняются? А от версии к версии это меняется? Цитата:
|
if (div.firstChild && div.innerHTML != noda.nodeValue) { Бог с ней с читабельностью, а зачем это вообще нужно? |
давайте тогда свой текущий вариант приведу:
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а, http://javascript.ru/forum/jquery/33...html#post16154 не считаю, что все должны писать как я, мне скорее интересно, действительно ли оправдана такая экономия на каждом операторе, пусть даже и в библиотеках div.firstChild: в ie div.innerHTML = ' '; ничего в div не добавляет, т.е. "пустые" текстовые ноды удаляются, при этом нужно в другом месте либо на каждой итерации проверять текущую длину (а не считать ее один раз), либо делать в итерации проверку, что теукщий узел существует, а именно здесь: div.innerHTML != noda.nodeValue: чтобы не выполнять лишних действий, когда текущий узел останется таким же каким и был |
Цитата:
Цитата:
Цитата:
Цитата:
Может моя экономия на спичках не так эффективна, как мне/тебе хотелось бы, но я хоть что-то стараюсь для этого делать. ---- Ну ладно, вот с этим: if (! div.firstChild || (div.innerHTML == noda.nodeValue)) return; еще можно мириться, но не менять while на do-while. Мне кажется, что любой хороший программист должен стараться избавлять логику программы от лишних действий. К тому же настолько очевидных. ---- Что касается авторитетных мнений, то ты сам сказал, что копаешься в Jquery. Там же всюду экономия на спичках, как в объеме кода так и в производительности. Чем тебе не авторитетное мнение. Возьми любой другой фреймворк кроме PrototypeJs. Везде это есть. И в PrototypeJs тоже есть, только у меня создалось впечатление, что автор сего творения, создавая метод, не задумывается над вопросом: "сжать его или ускорить?", и лепит первую оптимизацию, что придумалась. В результате часто методы, на которых половина фреймворка держится, оказываются, почему то сжаты, а там где можно было спокойно сжимать, явная оптимизация производительности. Вот и появляются те самые узкие места, которые теперь искать нужно. А ведь можно было сразу их исключить. В результате PrototypeJs самый тормозной фреймворк из известных, и чуть более сложные интерфейсы на его основе (lightbox например) тормозят значительно заметнее аналогичных на Jquery. |
Цитата:
|
Цитата:
Но речь не о том. Дальше что? Исправили. Нужно дальше оптимизировать? p.s. Riim, авторитеность jQuery сомнительна - http://javascript.ru/forum/offtopic/...html#post12621 |
Цитата:
Если видите ошибки, приводите свой вариант. Цитата:
Цитата:
|
Цитата:
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 получше заполните |
Часовой пояс GMT +3, время: 20:52. |