вызов ajax как встроенный код javascript вместо document.готов к производительности

#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.Теперь у меня есть следующие вопросы.

  1. Как я могу гарантировать, что jquery будет загружен до запуска этого встроенного кода
  2. Есть ли лучший способ повысить производительность, поскольку это вызов клиент-сервер

Ответ №1:

  1. Браузер будет блокировать и обрабатывать <script> теги в том порядке, в котором он их видит — вот почему люди используют $(document).ready , чтобы остановить это. Если вы убедитесь, что ваш jQuery.js включен на страницу раньше, чем этот код, у вас все должно быть в порядке.

  2. Если вместо того, чтобы включать этот блок скрипта в свой элемент управления .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, я добавил еще несколько пояснений.