#jquery #asp.net #html #dom
#jquery #asp.net #HTML #dom
Вопрос:
Для повышения производительности я выполняю вызов ajax, как только сервер начнет выдавать ответ. У меня вызов ajax как встроенный в один из пользовательских элементов управления dotnet.
<script type="text/javascript">
// make ajax call here
$.ajax({
url: '/test.aspx',
success: function(data) {
// store the data in a global variable
}
});
</script>
Я завершу вызов ajax и сохраню значение в глобальной переменной.Я включаю
jquery на главной странице. Я не хочу выполнять вызов в document.ready, поскольку он ожидает готовности dom.Теперь у меня есть следующие вопросы.
- Как я могу гарантировать, что jquery будет загружен до запуска этого встроенного кода
- Есть ли лучший способ повысить производительность, поскольку это вызов клиент-сервер
Ответ №1:
-
Браузер будет блокировать и обрабатывать
<script>
теги в том порядке, в котором он их видит — вот почему люди используют$(document).ready
, чтобы остановить это. Если вы убедитесь, что ваш jQuery.js включен на страницу раньше, чем этот код, у вас все должно быть в порядке. -
Если вместо того, чтобы включать этот блок скрипта в свой элемент управления .ascx, вы вызываете
ClientScriptManager.RegisterClientScriptBlock()
для его регистрации, вы можете запустить этот скрипт в верхней части страницы, а не в точке, где включен элемент управления, что потенциально может привести к незначительному увеличению производительности.
Редактировать: некоторые дополнительные пояснения.
При обработке страницы браузер будет использовать <script>
теги в том порядке, в котором они существуют в HTML. Когда это произойдет, ему нужно либо загрузить скрипт, а затем запустить его, если у тега есть src
атрибут — как ваш jQuery.js будет — или просто запустите скрипт, если это встроенный JavaScript. Но он должен выполнять их по одному за раз, в том порядке, в котором они обслуживаются. Взгляните на это видео для визуализации этого.
Вот почему, если ваш jQuery.js включение выполняется перед вашим встроенным вызовом ajax, вам не нужно беспокоиться о загрузке jQuery до запуска вашего встроенного кода. Так что не беспокойтесь о первой части вашего вопроса.
Что касается второй части вашего вопроса, если вызов ajax является встроенным JavaScript в вашем пользовательском элементе управления, он будет где-то в середине вашего HTML (в зависимости от того, где на вашей странице включен элемент управления). Если вы используете ClientScriptManager.RegisterClientScriptBlock()
, ASP.NET будет внедрен скрипт в верхней части страницы (довольно близко к началу <body>
, хотя после viewstate и некоторых других ASP.NET шаблонный), поэтому он будет обработан немного раньше. Я подозреваю, что разница вряд ли будет существенной, если только ваша страница не очень большая, а элемент управления находится ближе к ее концу.
Помогает ли это?
Комментарии:
1. Спасибо, Карсон, позволь мне пройти через это и сделать так, как ты предложил.
2. не могли бы вы еще раз объяснить мне разницу между 1 и 2.
3. @kobe, я добавил еще несколько пояснений.