2010-03-08 2 views
4

Я знаю, что лучше кодирования практика, чтобы избежать инлайн Javascript как:Инлайн Javascript производительность

<img id="the_image" onclick="do_this(true);return false;"/> 

Я имею в виду о переключении такого рода вещей для связанного JQuery событий щелчка, как:

$("#the_image").bind("click",function(){ 
    do_this(true); 
    return false; 
}); 

Воли Я теряю любую производительность, если я связываю тонну событий щелчка? Я не беспокоюсь о времени, которое требуется для первоначального связывания событий, но времени ответа между щелчком и его состоянием.

Держу пари, если есть разница, это пренебрежимо мало, но у меня будет тонна связанных функций. Мне интересно, обрабатывают ли браузер атрибут onclick так же, как связанное событие.

Thanks

+0

Сколько стоит «тонна»? –

ответ

2

Сохранить себя беспокойство, используйте на событие

$("#the_image").on("click",function(){ 
    do_this(true); 
    return false; 
}); 

одно событие, без потери производительности с несколькими элементами.

+2

«Отсутствие производительности с несколькими элементами» определенно неверно. Возможно, вы не заметите это на нескольких элементах, но поместите живое событие на сотни или тысячи элементов, и вы увидите удар производительности. Кроме того, я не понимаю, зачем вам нужно жить в одном элементе. (В вашем примере используется идентификатор для селектора CSS, который является уникальным.) –

+2

Я возвращаю свой предыдущий комментарий; очевидно, команда jQuery оптимизировала свой «живой» алгоритм с помощью jQuery 1.4, поэтому удар по производительности, который приходит с использованием 'live', практически исчез. +1 –

+0

@MikeRobinson Возможно, вам стоит обновить ваш ответ, чтобы было ясно, что .live теперь не рекомендуется – Undefined

1

В моей работе это зависело. Я переместил все мои события в jquery. Затем я профилировал javascript, используя FireBug, чтобы узнать, что было самым длинным. Затем я оптимизировал тех, кто занимает самое длинное место.

Если его несколько, вы не заметите никакой деградации. Если его сотни или тысячи, то вы могли бы.

0

Разница незначительна. Если вам нужно привязать ко многим элементам страницы, может произойти сбой производительности, и вы можете захотеть связать объект более высокого уровня и просто перехватить целевой элемент (изображение), где вы привязываете клик к содержащему DIV тег. Помимо этого, это должно быть хорошо и будет зависеть от вашего варианта использования.

Посмотрите на пузырь событий в javascript для более подробной информации.

+0

Спасибо, теперь я задаюсь вопросом, появляется ли производительность, потому что это jquery, или это ухудшает производительность в равной степени, если я это делаю: the_image.onclick = function() { do_this (true); }; Еще раз спасибо! – Geromey

+0

Это, в основном, огромное количество прослушивателей событий, особенно в IE, потому что в IE движок js и движок рендеринга/DOM являются пересекающимися границами COM. Разница между двумя небрежна, но использование .live может помочь, поэтому может привязываться к чему-то более высокому в DOM, чтобы вы могли поймать его на пузырь событий. – Tracker1

Смежные вопросы