Как и во всех новых функциях HTML5, я думаю, что лучший способ найти ответы - это протестировать их на максимально возможном количестве браузеров.Как правило, старые браузеры должны полностью игнорировать асинхронный флаг, поэтому код должен работать должным образом, анализируемый сверху вниз по порядку.
Пока браузеры не работают с ними, вы должны избегать их использованияв производственном коде, если вы не уверены, что они будут работать.
Основной вопрос с этой функцией: браузеры, которые ее поддерживают, в каком порядке запускаются события, например, если вы определяете функцию готовности jQueryв асинхронном загруженном скрипте это будет запущено?Ваше готовое событие запускается до или после загрузки асинхронных сценариев?
Я создал пару тестовых файлов, вы можете поиграть с ними в разных браузерах, чтобы увидеть, как они ведут себя.
Краткий ответ
О предположении @ Дейва:
Для любого кода в блоке $(document).ready(function(){}
я могу быть уверен, что все асинхронные сценарии уже загружены.
Пока это не похоже, это довольно противоречиво.В Chrome главное событие готовности запускается до загрузки асинхронного файла, но в Firefox оно запускается после него.
Разработчики jQuery должны принять решение об этом, если они будут (и могут) поддерживать его вбудущее или нет.
Тестовая страница
Мой тестовый скрипт выдает строку, которая показывает вам, в каком порядке выполнялись различные его части.Он может быть построен следующим образом:
D: Это означает, что был выполнен блок скрипта в основном файле.За ним может следовать :ok
, если функция в загруженном асинхронном скрипте определена, или :undefined
, если это не так.
R: Это означает, чтоСобытие готовности jQuery в основном файле выполнено.За ним может следовать :ok
, если функция в асинхронном загруженном скрипте, если определено, или :undefined
, если это не так.
L: Асинхронный загруженный скриптфайл был выполнен.
AR: Выполнено событие готовности jQuery в загруженном асинхронном скрипте.
Результаты теста
Браузеры, поддерживающие асинхронность:
Браузеры, поддерживающие асинхронную работуно проверено без асинхронности (ожидая тех же результатов):
Браузеры, НЕ поддерживающие асинхронность (ожидая таких же результатов):
Тестовый скрипт
test.html
<!DOCTYPE HTML>
<head>
<title>Async Test</title>
<script type="text/javascript">
var result = "";
</script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"></script>
<script type="text/javascript" src="test.js" async></script>
<script type="text/javascript">
try{
myFunc();
result += "D:ok ";
} catch(ex) { result += "D:undefined "; }
$(function(){
try{
myFunc();
result += "R:ok ";
} catch(ex) { result += "R:undefined "; }
$('body').text(result);
});
</script>
</head>
<body>
</body>
</html>
test.js
// Fires straight away when this file is loaded.
result += "L ";
$('body').text(result);
// A test function to see if it's defined in certain parts of the main file.
function myFunc(){
return;
}
// A ready function to see if it fires when loaded async.
$(function(){
result += "AR ";
$('body').text(result);
});