Цитата:
Цитата:
Цитата:
Цитата:
|
Цитата:
Цитата:
Цитата:
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, время: 13:04. |