CDNでMicrosoft Ajax Library 3.5を使用する
マイクロソフトは最近、ASP.NET AJAXを使用するWebアプリケーションのパフォーマンスを大幅に向上できるMicrosoft Ajaxコンテンツ配信ネットワーク(CDN)を発表しました。 この技術が発表されたとき、CDNにはMicrosoft Ajaxライブラリ3.5が含まれておらず、SSLをサポートしていなかったため、CDNは既存のASP.NET 3.5ベースのWebアプリケーションにはほとんど役に立ちませんでした。 ただし、Microoftは短期間でこれらの問題を解消でき、ASP.NET 3.5に基づいて構築されたWebアプリケーションでもMicrosoft Ajax CDNを使用できるようになりました。
サーバー上のDLLリソースに保存されているファイルを使用する代わりに、MicrosoftAjax.jsのCDNへのリンクを作成するにはどうすればよいですか? ScriptManagerの助けを借りて、実際には非常に簡単です。 ScriptManagerコントロールを持つページ(またはマスターページ)に次の定義を追加します。
<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>
この宣言は、System.Web.Extensions dllから読み込むときに常にScriptManagerによって自動的に参照されるMicrosoftAjax.jsと呼ばれるスクリプトが、この場所から読み込まれることを意味します: ajax.microsoft.com/ajax/3.5/MicrosoftAjax.js 。
このリンクはデフォルトで使用されます:
<script src= "/ScriptResource.axd?d=eYUqBJhfSVL41hIDYkBL0tfaps9hoQId_
48PydfbcyWH41vNvL68sk-l7P9FLAPz7b4vtI8WkZ-ezAF0b_ZkyG52wt9oU
taQ5ezFfGBr7LY1&t=ffffffffef976216"
type= "text/javascript" >
</script>
上記の定義をScriptReferenceに追加すると、次のようになります。
<script src= "http://ajax.microsoft.com/ajax/3.5/MicrosoftAjax.js"
type= "text/javascript" >
</script>
さらに、ScriptManagerは、web.configファイルのデバッグモードがオンになっている場合に、CDNからMicrosoftAjax.debug.jsスクリプトのデバッグバージョンを自動的に使用するほどスマートです。
<compilation debug= "true" >
<script src= "http://ajax.microsoft.com/ajax/3.5/MicrosoftAjax.debug.js"
type= "text/javascript" >
</script>
したがって、ここではすべてが明確です.CDNのMicrosoftAjax.jsを使用します。これにより、Webアプリケーションのパフォーマンスが向上し、ブラウザーがすべてのWebアプリケーションにCDNのMicrosoftAjax.jsの同じキャッシュコピーを再利用するため、トラフィックを節約できます。それを参照します。
CDNからの条件付きスクリプトロードの使用
Webアプリケーションが運用サーバーに公開されている場合にのみCDNからMicrosoftAjax.jsを使用し、サイトの開発時に組み込みスクリプトを使用する場合はどうでしょうか。 これは、プログラマーがインターネットに接続せずに開発している場合に意味があります。 このオプションも可能ですが、この場合、コードを記述する必要があります。 web.configファイルのデバッグ変数の値に応じて、MicrosoftAjax.jsへのリンクを動的に追加します。 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" });
}
}
SSLを介したCDNの使用
もう1つの重要なケース-Webアプリケーションには、SSLを使用して機能するページがあります。 この場合、MicrosoftAjax.jsの正しいCDN URLを自動的に選択します。 これを行うには、前のコードをわずかに変更します。
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" } });
* This source code was highlighted with Source Code Highlighter .
これで、正しいバージョンのスクリプトが常にロードされます。
PS当初、私はこの記事を翻訳し、私の個人ブログblog.dvteam.ruに投稿しました 。 (元の記事はこちら: blog.turlov.com/2009/11/using-microsoft-ajax-library-35-with.html )
抵抗できず、ハブで複製しました このトピックは興味深いものであり、あまり知られていないページで情報が失われることは望ましくありません。 これは私の最初のトピックです。私が受け取ったマイナスを入力した場合、コメントを書くのを怠らないようにしてください。 私はテレパスではありません。あなたがそれを表明しない場合、あなたの意見を考慮に入れることはできません。
コードを強調表示するのに役立つPavel_Osipovに感謝します。