Использование Microsoft Ajax Library 3.5 с CDN

Представлю вашему вниманию переводную статью оригинал которой находится тут: http://blog.turlov.com/2009/11/using-microsoft-ajax-library-35-with.html

Использование Microsoft Ajax Library 3.5 с CDN

Недавно Microsoft анонсировала Microsoft Ajax content delivery network (CDN), которая может значительно увеличить производительность любого веб приложения, использующего ASP.NET AJAX. Когда эта технология была анонсирована, CDN была почти бесполезной для существующих веб-приложений основанных на ASP.NET 3.5 так как CDN не содержала Microsoft Ajax library 3.5 и не поддерживала работу через SSL. Однако через небольшой период времени Microoft смогла устранить эти проблемы и теперь веб приложения, построенные на базе ASP.NET 3.5 также могут использовать Microsoft Ajax CDN.

Итак, каким же образом вы можете заставить линк MicrosoftAjax.js ссылаться на CDN вместо того, чтобы использовать файл, хранящийся в ресурсах DLL на вашем сервере? На самом деле очень просто при момощи ScriptManager. Добавьте следущее определение на Page (или Master page) на которой есть ScriptManager control:

<asp:scriptmanager runat=»server» enablepartialrendering=»false»>
<scripts>
<asp:scriptreference
name=»MicrosoftAjax.js»path=»http://ajax.microsoft.com/ajax/3.5/MicrosoftAjax.js» />
</scripts>
</asp:ScriptManager>

Эта декларация означает, что скрипт с именем MicrosoftAjax.js, на который всегда автоматически ссылается ScriptManager загружая его из System.Web.Extensions dll сейчас должен быть загружен с этого местоположения: http://ajax.microsoft.com/ajax/3.5/MicrosoftAjax.js.

Вот такая ссылка будет использована по умолчанию:

<script src=»/ScriptResource.axd?d=eYUqBJhfSVL41hIDYkBL0tfaps9hoQId_48
PydfbcyWH41vNvL68sk-l7P9FLAPz7b4vtI8WkZ-ezAF0b_ZkyG52wt9oUtaQ5ezFfGBr7LY1&
t=ffffffffef976216″

type=»text/javascript»>
</script>

а вот так это будет выглядеть после того, как мы добавим описанные выше определения в ScriptReference:

<script src=»http://ajax.microsoft.com/ajax/3.5/MicrosoftAjax.js»type=»text/javascript»></script>

Более того, ScriptManager даже достаточно умен чтобы автоматически использовать отладочную версию скрипта MicrosoftAjax.debug.js из CDN если включен режим отладки в файле web.config:

<compilation debug=»true»>
<script
src=»http://ajax.microsoft.com/ajax/3.5/MicrosoftAjax.debug.js»
type=»text/javascript»>
</script>


Итак, тут все понятно: мы используем MicrosoftAjax.js из CDN и это улучшает производительность нашего веб приложения и сохраняет нам и нашим посетителям некоторое количество трафика так как браузер будет повторно использовать ту же самую кешированную копию MicrosoftAjax.js из CDN для всех веб приложений, которые на него ссылаются.

Использование условной загрузки скриптов из CDN

Что если мы хотим использовать MicrosoftAjax.js из CDN только когда веб приложение было опубликовано на рабочий сервер и использовать встроенный скрипт когда мы разрабатываем сайт? Это может иметь смысл в случае, когда программисты ведут разработку не имея соединения с Internet. Такой вариант тоже возможен, но в этом случае нам необходимо написать немного кода. Мы собираемся добавить ссылку на MicrosoftAjax.js динамически, в зависимости от значения переменной debug в файое web.config; мы добавляем необходимую ссылку только для случая, когда debug=»false»:

protected void Page_Load(object sender, EventArgs e)
{
if (!Context.IsDebuggingEnabled)
{
ScriptManager sm = ScriptManager.GetCurrent(this);
sm.Scripts.Add(new ScriptReference {Name = «MicrosoftAjax.js»,
Path = «http://ajax.microsoft.com/ajax/3.5/MicrosoftAjax.js»});
}
}

Использование CDN через SSL

Другой важный случай — наше веб приложение имеет страницы, которые должны работать с использованием SSL. В этом случае мы автоматически выбираем корректный CDN URL для MicrosoftAjax.js. Чтобы это сделать мы всего лишь немного модифицируем предыдущий код:

protected void Page_Load(object sender, EventArgs e)
{
if (!Context.IsDebuggingEnabled)
{
ScriptManager sm = ScriptManager.GetCurrent(this);
sm.Scripts.Add(new ScriptReference {Name = «MicrosoftAjax.js»,
Path = Request.Url.Scheme +«://ajax.microsoft.com/ajax/3.5/MicrosoftAjax.js»});
}
}

Проблемы с локализацией

При использовании локализации скриптов, которая может иметь место скажем, если вы используете AJAX Control Toolkit выявилась неприятная проблема: вместо корректного адреса MicrosoftAjax.js ScriptManager пытается загрузить локализованную версию скрипта, которой на сайте нет и приложение падает с ошибкой. Эту проблему можно обойти, если использовать еще один параметр для создания ScriptReference, предназначенный для указания языков, для которых поддерживается локализация данного скрипта. Если язык пользователя, который отдает браузер не содержится в этом списке будет загружена версия скрипта, используемая по умолчанию. В списке языков можно использовать любые строки что в данном случае нам на руку. Модифицируем код примера следующим образом указав в качестве поддерживаемого языка локализации «none»:

sm.Scripts.Add(new ScriptReference {Name = «MicrosoftAjax.js»,
Path = «http://ajax.microsoft.com/ajax/3.5/MicrosoftAjax.js»},
ResourceUICultures = new string[]{ «none» } });

Теперь всегда будет загружаться правильная версия скрипта.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *