Ожидаете, пока JQuery завершит привязки .live() или .bind()?

У меня есть скрипт, который добавляет обработчики событий щелчка примерно к 500 элементам на странице через JQuery .live или .bind (еще не решил), и у меня проблема с производительностью JQuery.

С небольшим набором данных я могу загрузить страницу, и как только страница закончит загрузку в соответствии с браузером, я могу щелкнуть что-то, и мы пойдем. Но увеличьте набор данных, и существует определенная задержка между окончанием загрузки страницы и обработкой моего клика, и я могу только предположить, что JQuery все еще работает над присоединением обработчиков событий - щелчок обрабатывается правильно, поэтому я предполагаю, что он ставится в очередь а потом обрабатывался.

Есть ли способ заставить JQuery дождаться завершения .live(), прежде чем двигаться дальше, или, другими словами, обрабатывать его синхронно, а не асинхронно, если это имеет смысл? Это сделано для того, чтобы я мог включить экран загрузки перед запуском вызова .live() и закрыть его, когда он будет готов.

С уважением Му


person Moo    schedule 12.08.2010    source источник


Ответы (1)


Обработчик jQuery .live() (или .delegate()) должен завершиться очень быстро, в отличие от .bind(), который связывает каждый элемент. В таких ситуациях следует использовать .live() или .delegate(), поскольку начальная стоимость .bind()< /a> намного превышает стоимость всплытия/прослушивания событий обработчиком родительского элемента.

person Nick Craver    schedule 12.08.2010
comment
Задержка происходит независимо от того, использую ли я .bind или .live, и я не вижу никакой другой причины задержки, кроме этих конкретных вызовов. По сути, мое приложение запускается на $(document).ready, вызывает $('.MenuItem').live(..... и затем сидит там, ожидая взаимодействия с пользователем. С небольшим объемом тестовых данных приложение можно использовать мгновенно, но увеличьте тестовые данные, и я получу вышеупомянутую задержку при обработке первого клика. - person Moo; 12.08.2010
comment
@Moo - .live() не вызовет вашей задержки, если правильно использовать ... должно быть что-то еще, live() создает один обработчик событий для document, это буквально все, что он делает, что еще нужно происходит помимо бинда? - person Nick Craver; 12.08.2010
comment
На данном этапе? Буквально ничего — вся остальная часть приложения работает с этими привязанными событиями щелчка, не происходит никаких манипуляций с домом, никакой анимации, ничего, пока не произойдет щелчок. - person Moo; 12.08.2010
comment
@Moo - Ты можешь дать мне ссылку? Могу быстро взглянуть и посмотреть, есть ли что-нибудь странное, что я замечаю - person Nick Craver; 12.08.2010
comment
На самом деле не публично, у вас есть адрес электронной почты, на который я мог бы отправить его? - person Moo; 12.08.2010