Seditio.by

Рациональное использование jQuery

Seditio.by » Наш блог » jQuery и JavaScript » Рациональное использование jQuery

Рациональное использование jQuery

Сегодня наш разговор пойдет о том, как рационально использовать библиотеку jQuery. Для начала первое правило: всегда используйте последнюю версию этой библиотеки – скорость выше, возможностей больше, ошибок меньше. Всегда читайте документацию. Где ее найти, мы уже упоминали. Если у вас большие JS библиотеки, то не забудьте их сжать (например, при помощи YUICompressor, Dojo ShrinkSafe или Google Closure Compiler).
А теперь о том, что неявно. Возьмем небольшой участок разметки на которой и будем приводить примеры.
<div id="content">
	<form method="post" action="" id=”entryform” />
		<h2>Ваш пол</h2>
		<ul id="Gender">
			<li><input type="radio" class="on" name="genderR" value="M" /> Мужской</li>
			<li><input type="radio" class="off" name=" genderR " value="W" /> Женский</li>
			<li><input type="radio" class="off" name=" genderR " value="Na" /> Не указан<<li>
		<input class="button" id="submit_button" type="submit" value="Далее" />
	</form>
</div>
1. Элемент лучше и быстрее всего искать по его аттрибуту id, потому что используется метод DOM getElementById. Если у элемента нет id, то нужно указывать ближайший к нему элемент с id:
var gender = $('#Gender.on');
2. Использовать имя тега перед названием класса:
var gender = $('#Gender input.on');
В этом случае используется метод DOM getElementsByTagName и среди выбранных элементов ищется тот, у которого есть класс 'on'.
Сама популярная выборка элементов по названию класса — одна из самых медленных в jQuery.
3. Никогда не ставьте имя тега перед id:
var gender = $('div#Gender);
В этом случае сначала будут выбраны все элементы с тэгом 'div', а уже потом среди них будет найден элемент с нужным id.
4. Кешируйте объекты jQuery. Например, вы используете объект больше чем один раз, вместо того, чтобы несколько раз искать по элементу:
$('#Gender input.on).bind('click', function(){...});
$('#Gender input.on).css('background-color', '888');
$('#Gender input.on).fadeIn('slow');
сохраните его в локальную переменную:
var $gender = $('#Gender input.on');
$gender.bind('click', function(){...});
$gender.css('background-color', '888');
$gender.fadeIn('slow');
Примечание: чаще всего '$' перед именем переменной ставят, чтобы показать что в ней храниться объект jQuery.
5. Выстраивайте цепочки. Большинство методов jQuery возвращают после выполнения объект jQuery, это позволит сократить размер кода:
$('#Gender input.on').bind('click', 
function(){return false;})
	.css('background-color', '888')
	.fadeIn('slow');
6. Используйте подзапросы. Это сократит время поиска объекта, так как последующие выборки будут происходить из сохраненного объекта
var $gender = $('#Gender'),
	$onGender = $gender.find('input.on'),
	$offGenders = $gender.find('input.off');
7. Минимизируйте работу с DOM-деревом. Любые манипуляции (удаление, перемещение и вставка новых элементов) с DOM довольно медленные, поэтому вместо того, чтобы вставлять каждый элемент в DOM:
var toplist = [...], 
$mylist = $('#mylist'); 
for (var i=0, l=toplist.length; i<l; i++ )
{
	$mylist.append('<li>' + toplist[i] + '</li>');
}
Лучше работу с DOM свести к одному шагу.
var toplist = [...], 
$mylist = $('#mylist'), 
topli = ""; 

for (var i=0, l=toplist.length; i<l; i++)
{
	topli += '<li>' + toplist[i] + '</li>';
}

$mylist.html(toplist);
8. $(window).load. Чаще всего выполнение скрипта привязывают к событию $(document).ready(). Событие происходит в то время, когда объекты все еще загружаются. Иногда можно наблюдать, что страница подвисает во время загрузки. Причиной этого могут быть именно функции, которые привязаны к $(document).ready(). Чтобы избежать этого, можно часть функций привязать к событию $(window).load(), которое происходит уже после того, как все содержимое страницы (включая содержимое iframe) уже загружено.
$(window).load(function(){
	// функции jQuery, инициализируемые после загрузки страницы
});
9. Привязывайте к странице только относящиеся к ней скрипты. Обычно все складывается в один большой скрипт, который вставляется на все страницы сайта и выполняется на событие $(document).ready(). Но даже если функция не работает на данной конкретной странице, то все равно тратится время на поиск элементов, к которым привязана эта функция. Скрипт можно разделить на несколько частей или сделать его следующим образом:
var mylib =
{
	article:
	{
		init : function()
		{
			...
		}
	},
	forum_posts :
	{
		init : function()
		{
			...
		}
	}
}
а на странице, где мы хотим использовать функции, относящиеся, например, к article вставить:
<script type="text/javascript">
mylib.article.init();
</script>
 

Комментарии

Имя (E-mail):
* Ваш комментарий будет доступен для редактирования в течение 10 Минут

Похожие страницы

Теги

jquery

Поиск: