Подтвердить что ты не робот

Неблокирующий Javascript

Мне интересно, можно ли загружать javascript таким образом, чтобы он не блокировал работу пользователя. Я не уверен, как добиться того же, но я ищу кросс-браузерное решение. Мне интересно, может ли кто-нибудь вести меня в правильном направлении. Размещение js в нижней части страницы не работает слишком хорошо.

Спасибо за ваше время.

4b9b3361

Ответ 1

Javascript запускается в одном потоке, поэтому, если у вас есть массовые вызовы Javascript, скажем, с помощью librairies, таких как ExtJS, это нормально, что он может быть медленным. Однако вы можете рассмотреть следующие варианты:

Прежде всего, постарайтесь оптимизировать код как можно больше.

Затем вы можете использовать таймеры в Javascript для имитации асинхронной работы. Вот хороший пример того, как это сделать: http://ejohn.org/blog/how-javascript-timers-work/

Если вам нужна дополнительная информация, вот несколько дополнительных советов о том, как попытаться уменьшить время зависания JavaScript.

http://debuggable.com/posts/run-intense-js-without-freezing-the-browser:480f4dd6-f864-4f72-ae16-41cccbdd56cb

Удачи!

Ответ 2

Цитата этот ответ:

Запросы ресурсов JavaScript действительно блокирует, но есть способы вокруг этого (в том числе: DOM script теги в голове и AJAX запросы), которые, не видя сама страница, вероятно, будет тем, что здесь.

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

В отношении рекомендации yahoo разместите сценарии внизу тела, это улучшает пропущенный ответ времени и может улучшить фактическую загрузку раз до степени (потому что все предыдущие ресурсы разрешены сначала асинхронный), но он никогда не будет таким, как как неблокирующие запросы (хотя они имеют высокий барьер технической возможности).

Вы можете взглянуть на запись блога YUI о Non-Blocking Javascript.

Ответ 4

Когда страница загружается, она может одновременно загружать 2 файла javascript параллельно, поэтому попытка сохранить количество файлов javascript и их размер вниз (с помощью Minification, obsfucation и GZipping) поможет при загрузке.

Использование обратных вызовов в вашем javascript также поможет с тем, что элементы не блокируются при запуске javascript.

Пример в jQuery будет

$('#id').click(function(){
  $.post('url',data,function(callbackdata){//do something
         });

});

Ответ 5

setTimeout с небольшой задержкой позволит продолжить поток управления при планировании другой функции для последующего выполнения. Это особенно полезно для предотвращения блокировки пользовательского интерфейса или непреднамеренной зависимости от успешного выполнения другой функции.

Мне очень полезно предотвращать ошибки javascript, связанные с связанными событиями. Например, чтобы установить обработчик отправки в форме:

$('#form').submit(function() {
  setTimeout(function() {
    // Submit handler function, i.e. do an ajax submission of the form
    $.ajax(...etc...);
  }, 1);
  // Return false before the handler executes, ensuring the form won't manually submit
  // in the event of a js error in the handler
  return false;
});

Ответ 6

Отложить выполнение JavaScript может быть действительно хорошим решением, если у вас есть JavaScript, который не критичен для немедленной загрузки.

Ответ 7

Посмотрите на этот плагин jQuery (http://code.google.com/p/funky-jq-plugins/wiki/неблокирующий).

Он предназначен для использования таймеров для эмуляции многопоточной среды, где поток пользовательского интерфейса не заморожен, требуя таких операций, как итерация по длинным спискам. Очень классный материал... Я написал это:)

Ciao пока