Javascript-форум (https://javascript.ru/forum/)
-   Ваши сайты и скрипты (https://javascript.ru/forum/project/)
-   -   spike - библиотека внедряет W3C-шные методы в IE (https://javascript.ru/forum/project/27728-spike-biblioteka-vnedryaet-w3c-shnye-metody-v-ie.html)

B~Vladi 29.05.2012 12:01

Цитата:

Сообщение от devote
меня как будто не услышали

Ой, прости, наверно не до понял :)

devote 29.05.2012 12:04

Цитата:

Сообщение от B~Vladi
Ой, прости, наверно не до понял

да, наверно мне нужно русский выучить получше :D

devote 03.06.2012 19:43

melky,
опробовал я твой вариант тот что ты указал в посте для мелких сайтов он конечно норм, но вот при большом количестве элементов на странице чуствуется довольно таки огромное падение производительности. Так как браузер перерисовывает документ при любых манипуляциях со стилями, даже если такого свойства нет в CSS то он вызывает все равно перерисовку.
Я вот накидал примерный селектор:
(function( window ){

	var stylesheet = document.createStyleSheet();

	function qSelector( selector ) {

		var elem, index = 0, result = [];

		if ( stylesheet.lastSelector !== selector ) {
			stylesheet.cssText = selector + "{testNativeSelector:1}";
			stylesheet.lastSelector = selector;
		}

		if ( stylesheet.rules.length && stylesheet.rules[ 0 ].selectorText !== "UNKNOWN" ) {

			var elems = document.getElementsByTagName( "*" );

			for( ;elem = elems[ index++ ]; ) {
				if ( elem.currentStyle.testNativeSelector ) {
					result[ result.length ] = elem;
				}
			}
		} else {
			throw new Error( "Syntax error: " + selector );
		}

		return result;
	}

	window.qSelector = qSelector;

})( window );
можешь потестить, при 2000 элементов на странице, задержка на 2-3 сек в ИЕ7 и 1-2 сек в ИЕ8

melky 03.06.2012 20:15

Цитата:

Сообщение от devote
можешь потестить, при 2000 элементов на странице, задержка на 2-3 сек в ИЕ7 и 1-2 сек в ИЕ8

Само собой она будет. Скрипт же просто все элементы обходит.

Конечно, не панацея, но для "минимума" подойдёт. Я этот метод использовал как костыль matchesSelector.

FINoM 03.06.2012 20:22

Цитата:

Сообщение от melky
Я этот метод использовал как костыль matchesSelector.

Ёпт, умно.

melky 03.06.2012 20:41

FINoM, ?

FINoM 03.06.2012 20:42

melky, я не догадался эту особенность IE так использовать.

devote 03.06.2012 21:05

Цитата:

Сообщение от melky
Скрипт же просто все элементы обходит.

да это понятно что проходит, ибо и не было бы нового свойства в стилях если бы не проходил. Проблема не в том что проходит, а в том что он во время прохода вновь пересчитывает все данные на элементы, одним словом изменив одно свойство CSS неважно существующего или нет, он заного делает перерасчет всех свойств элементов. За счет чего производительность падает чуть ли не в пять раз чем например выборка моего селектора QSA, то-есть в сравнении с ним скорость выборки получается в пять раз медленнее чем у моего скрипта. Вот если бы он просто нашел элементы, дал им новое свойство без перерисовки, тогда конечно же производительность выросла бы в разы. Но увы( это не так.

viktorina 06.01.2013 17:22

То есть спайк - это кроссбраузерные события, кроссбраузерный qSA?

devote 06.01.2013 18:22

Цитата:

Сообщение от viktorina
То есть спайк - это кроссбраузерные события, кроссбраузерный qSA?

да именно, вот это будет работать и в ИЕ с библиотекой spike:
<!DOCTYPE html>
<html>
    <head>
        <script type="text/javascript" src="http://code.spb-piksel.ru/spike.min.js"></script>
    </head>
    <body>
        <div id="mydiv" style="width: 100px; height: 100px; background: #00ff00">Кликни по мне</div>

        <script type="text/javascript">
            document.querySelector('#mydiv').addEventListener('click', function(e) {
                alert("кликнули по элементу: " + e.target);
            }, false);
        </script>
    </body>
</html>


Часовой пояс GMT +3, время: 17:13.