高效管理ASP.NET的JavaScript库
簡(jiǎn)介
對(duì)于ASP.NET開(kāi)發(fā)人員來(lái)說(shuō),管理項(xiàng)目中的JavaScript都很隨意:
我想這很大程度上可能是因?yàn)榫W(wǎng)上沒(méi)有如何妥善處理ASP.NET中JavaScript的可靠信息。此文的目的就是提供一種最佳方案,用于管理ASP.NET中的JavaScript。該方案將能解決以下問(wèn)題:
- 內(nèi)聯(lián)JS:把JS直接放在頁(yè)面中將導(dǎo)致頁(yè)面臃腫不堪。
- 發(fā)布JS:經(jīng)常忘記發(fā)布JS文件。
- 錯(cuò)誤引用:在其它Web程序中引用JS時(shí)經(jīng)常失敗。
- 依賴性:需要記住JS文件中錯(cuò)綜復(fù)雜的依賴關(guān)系。
- 無(wú)效引用:頁(yè)面上引用的JS從來(lái)沒(méi)有被用到。
- HTTP/HTTPS:跨HTTPS頁(yè)面引用HTTP的JS。
- 重構(gòu):重構(gòu)一個(gè)新版本將花費(fèi)大量時(shí)間。
- 冗余:多次引用統(tǒng)一個(gè)JS文件。
預(yù)備知識(shí)
確保已安裝Visual Studio 2010。Express版可能不支持此文涉及到的一些概念。
概述
大部分上述問(wèn)題是由把JS或JS文件引用直接放到ASPX頁(yè)面引起的。對(duì)幾乎所有上述問(wèn)題的解決方法是使用ASP.NET的內(nèi)置功能來(lái)嵌入JS文件到一個(gè)DLL,然后動(dòng)態(tài)引用這些文件。本文將演示這些功能,以及一些充分使用它們的技巧。接下來(lái)我們將逐步介紹該如何實(shí)現(xiàn)。
開(kāi)始
第一步,啟動(dòng)Visual Studio 2010,并新建一個(gè)名為ParchmentPurveyor的空Web程序。
接下來(lái)添加一個(gè)窗體:Default.aspx,并添加一些簡(jiǎn)單的HTML代碼。大致如下:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs"Inherits="ParchmentPurveyor.Default" %>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Parchment Purveyor</title>
</head>
<body>
<form id="form1" runat="server">
<h1>Parchment Purveyor</h1>
<p>Paper for printers, painting, publication,
paper planes, and plenty of other plebeian projects!</p>
</form>
</body>
</html>
添加JS
不同于在站點(diǎn)中添加JS文件,我們新建一個(gè)項(xiàng)目,用于包含我們所有的JS文件。在解決方案中添加一個(gè)新的類庫(kù)項(xiàng)目JavaScriptLibrary:
項(xiàng)目添加后刪除Class1.cs文件,右鍵項(xiàng)目,選擇添加文件夾,并命名為JavaScript,然后在該文件夾中添加兩個(gè)JS文件,分別為ShowMessage.js和GreetUser.js,下一步,在項(xiàng)目中添加一個(gè)類JavaScriptHelper(注意不要放到JavaScript目錄下),現(xiàn)在解決方案目錄結(jié)構(gòu)如下:
接下來(lái)編寫(xiě)JS,在ShowMessage.js中添加如下代碼:
function ShowMessage(msg) {alert("Message From Website: " + msg);
}
在GreetUser.js文件中添加如下代碼:
function GreetUser() {ShowMessage("Greetings and Salutations!");
}
注意,GreetUser()依賴于ShowMessage()。
嵌入JS文件
相比把JS文件發(fā)布到站點(diǎn),我們更樂(lè)于把它們嵌入到DLL。這樣子,如果DLL被發(fā)布到站點(diǎn),那么所有JS文件也被自動(dòng)發(fā)布。做到一點(diǎn)很簡(jiǎn)單,我們只需要右鍵JS文件,打開(kāi)屬性頁(yè),為“生成操作”選擇“嵌入資源”即可,如下:
在確定JS文件嵌入DLL后,你需要使它們能夠被Web用戶訪問(wèn)。為此,需要為項(xiàng)目JavaScriptLibrary添加System.Web的引用:
然后編輯JavaScriptHelper.cs,添加如下代碼:
using System.Web.UI;[assembly: WebResource("JavaScriptLibrary.JavaScript.ShowMessage.js", "application/x-javascript")]
[assembly: WebResource("JavaScriptLibrary.JavaScript.GreetUser.js", "application/x-javascript")]
這樣就能保證Web用戶通過(guò)客戶端訪問(wèn)嵌入式JS文件了。
引用嵌入式JS文件
現(xiàn)在你已嵌入了JS文件,并能通過(guò)客戶端電腦訪問(wèn)它們。在使用的時(shí)候,你必須在頁(yè)面上引用它們。為此,需要對(duì)JavaScriptHelper類做如下修改:
using System;using System.Web.UI;
[assembly: WebResource("JavaScriptLibrary.JavaScript.ShowMessage.js", "application/x-javascript")]
[assembly: WebResource("JavaScriptLibrary.JavaScript.GreetUser.js", "application/x-javascript")]
namespace JavaScriptLibrary
{
/// <summary>
/// 幫助頁(yè)面引用嵌入式JS文件
/// </summary>
public class JavaScriptHelper{
#region 靜態(tài)字段
private const string NAME_SHOW_MESSAGE = "JavaScriptLibrary.JavaScript.ShowMessage.js";
private const string NAME_GREET_USER = "JavaScriptLibrary.JavaScript.GreetUser.js";
#endregion
#region 公共方法
/// <summary>
/// 在頁(yè)面上引用ShowMessage.js文件
/// </summary>
/// <param name="manager">通過(guò)Page.ClientScript訪問(wèn)</param>
public static void Include_ShowMessage(ClientScriptManager manager){
IncludeJavaScript(manager, NAME_SHOW_MESSAGE);
}
/// <summary>
/// 在頁(yè)面上引用GreetUser.js文件 (包括所有依賴文件)
/// </summary>
/// <param name="manager">通過(guò)Page.ClientScript訪問(wèn)</param>
public static void Include_GreetUser(ClientScriptManager manager){
//依賴(ShowMessage.js).
Include_ShowMessage(manager);
//引用 GreetUser.js.
IncludeJavaScript(manager, NAME_GREET_USER);
}
#endregion
#region 私有方法
/// <summary>
/// 在頁(yè)面上引用指定的嵌入式j(luò)s文件
/// </summary>
/// <param name="manager">通過(guò)Page.ClientScript訪問(wèn)</param>
/// <param name="resourceName">用于標(biāo)示嵌入式JS文件的名字</param>
private static void IncludeJavaScript(ClientScriptManager manager, string resourceName){
var type = typeof(JavaScriptLibrary.JavaScriptHelper);
manager.RegisterClientScriptResource(type, resourceName);
}
#endregion
}
}
IncludeJavaScript()是關(guān)鍵所在。它通過(guò)調(diào)用RegisterClientScriptResource()確保為嵌入式JS文件獲取一個(gè)腳本標(biāo)簽。Include_GreetUser()調(diào)用了IncludeJavaScript(),同時(shí)也調(diào)用了Include_ShowMessage()(用于處理依賴關(guān)系)。因此,任何頁(yè)面在引用GreetUser()時(shí)也將引用ShowMessage()。
現(xiàn)在我們有了可用的類,接下在讓我們?cè)贒efault.aspx頁(yè)面中試用它。首先在站點(diǎn)ParchmentPurveyor中添加對(duì)JavaScriptLibrary的引用:
接下來(lái)我們需要修改引用JS頁(yè)面的后臺(tái)代碼。
using System;using System.Web.UI;
namespace ParchmentPurveyor
{
public partial class Default : System.Web.UI.Page{
protected override void OnPreRender(EventArgs e){
base.OnPreRender(e);
JavaScriptLibrary.JavaScriptHelper.Include_GreetUser(Page.ClientScript);
}
}
}
最后,還有一件事要做——從頁(yè)面調(diào)用GreetUser()。為此,我們需要在頁(yè)面中添加如下JS(我選擇把它添加到<head>標(biāo)簽中):
<head runat="server"><title>Parchment Purveyor</title>
<script type="text/javascript">
window.onload = function () { GreetUser(); };
</script>
</head>
好了,除了還有一些瑣碎的事要處理外,我們已基本完成。在處理那些之前,讓讓我們看一下成果。編譯整個(gè)解決方案—〉右鍵在瀏覽器中查看Default.aspx頁(yè)面:
右鍵查看頁(yè)面源碼,你可能看到如下內(nèi)容(src="/WebResource.axd.."部分有刪減):
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>
Parchment Purveyor
</title>
<script type="text/javascript">
window.onload = function () { GreetUser(); };
</script>
</head>
<body>
<form method="post" action="Default.aspx" id="form1">
<div class="aspNetHidden">
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="..." />
</div>
<script src="/WebResource.axd?d=fslk3GLsk3Slek&t=1234" type="text/javascript"></script>
<script src="/WebResource.axd?d=fglk3kSl3LS5&t=5678" type="text/javascript"></script>
<h1>Parchment Purveyor</h1>
<p>Paper for printers, painting, publication,
paper planes, and plenty of other plebeian projects!</p>
</form>
</body>
</html>
請(qǐng)注意引用“WebResource.axd”的兩個(gè)<script>標(biāo)簽。它提供了讓客戶端訪問(wèn)嵌入式信息的基本功能。注意,第一個(gè)<script>標(biāo)簽注冊(cè)了ShowMessage(),第二個(gè)<script>標(biāo)簽注冊(cè)了GreetUser()。在你的JS庫(kù)中調(diào)用Include_GreetUser()時(shí),上面所有標(biāo)簽都會(huì)被引入到頁(yè)面中。
后期引用
有時(shí)上面技術(shù)可能會(huì)引用JS文件失敗。例如當(dāng)我使用第三方工具工作時(shí),就可能在渲染階段阻止調(diào)用.NET代碼。當(dāng)你在渲染階段引用那些函數(shù)時(shí),腳本標(biāo)簽不會(huì)被插入頁(yè)面。這是因?yàn)轫?yè)面一開(kāi)始就已經(jīng)呈現(xiàn)為HTML。對(duì)這個(gè)問(wèn)題的解決方法是構(gòu)造一個(gè)替換函數(shù),并在HTML底部附近插入腳本標(biāo)簽。我稱之為“后期引用”,為此,需要對(duì)JavaScriptHelper做一些修改:
using System;using System.Web;
using System.Web.UI;
[assembly: WebResource("JavaScriptLibrary.JavaScript.ShowMessage.js", "application/x-javascript")]
[assembly: WebResource("JavaScriptLibrary.JavaScript.GreetUser.js", "application/x-javascript")]
namespace JavaScriptLibrary {
/// <summary>
/// 幫助頁(yè)面引用嵌入式JS文件
/// </summary>
public class JavaScriptHelper {
#region Constants
private const string TEMPLATE_SCRIPT = "<script type=\"text/javascript\" src=\"{0}\"></script>\r\n";
private const string NAME_SHOW_MESSAGE = "JavaScriptLibrary.JavaScript.ShowMessage.js";
private const string NAME_GREET_USER = "JavaScriptLibrary.JavaScript.GreetUser.js";
#endregion
#region 公共方法
/// <summary>
/// 頁(yè)面引用ShowMessage.js文件
/// </summary>
/// <param name="manager">通過(guò)Page.ClientScript訪問(wèn)</param>
/// <param name="late">是否在HTML底部引用JS</param>
public static void Include_ShowMessage(ClientScriptManager manager, bool late = false) {
IncludeJavaScript(manager, NAME_SHOW_MESSAGE, late);
}
/// <summary>
/// 頁(yè)面引用GreetUser.js文件(包括所有依賴文件)
/// </summary>
/// <param name="manager">通過(guò)Page.ClientScript訪問(wèn)</param>
/// <param name="late">是否在HTML底部引用JS</param>
public static void Include_GreetUser(ClientScriptManager manager, bool late = false) {
// 依賴 (ShowMessage.js).
Include_ShowMessage(manager, late);
// 引用 GreetUser.js.
IncludeJavaScript(manager, NAME_GREET_USER, late);
}
#endregion
#region 私有方法
/// <summary>
/// 頁(yè)面引用指定的嵌入式JS文件
/// </summary>
/// <param name="manager">通過(guò)Page.ClientScript訪問(wèn)</param>
/// <param name="resourceName">標(biāo)示嵌入式JS文件的名字</param>
/// <param name="late">是否在HTML底部引用JS</param>
private static void IncludeJavaScript(ClientScriptManager manager, string resourceName, bool late) {
var type = typeof(JavaScriptLibrary.JavaScriptHelper);
if (!manager.IsStartupScriptRegistered(type, resourceName)) {
if (late) {
var url = manager.GetWebResourceUrl(type, resourceName);
var scriptBlock = string.Format(TEMPLATE_SCRIPT, HttpUtility.HtmlEncode(url));
manager.RegisterStartupScript(type, resourceName, scriptBlock);
}
else {
manager.RegisterClientScriptResource(type, resourceName);
manager.RegisterStartupScript(type, resourceName, string.Empty);
}
}
}
#endregion
}
}
為每個(gè)方法添加一個(gè)參數(shù)late。該參數(shù)默認(rèn)值為false,因此這些方法依舊可以按照原有方式調(diào)用。該參數(shù)為false表示原有行為不變,為true時(shí)將導(dǎo)致在HTML結(jié)尾部分引用腳本段。可能注意到,在late=false時(shí),我仍然調(diào)用了RegisterStartupScript(),但傳入了一個(gè)空字符串(所以不會(huì)在HTML插入任何內(nèi)容)。完成后IsStartupScriptRegistered()將會(huì)返回正確值。這樣,即使在late被置false后調(diào)用了其中的一個(gè)函數(shù),又把late置為true,JS也不會(huì)被多次引用。如果要看效果,注釋掉后臺(tái)代碼OnPreRender(),并在頁(yè)面中做如下修改:
<body><form id="form1" runat="server">
<h1>Parchment Purveyor</h1>
<p>Paper for printers, painting, publication,
paper planes, and plenty of other plebeian projects!</p>
<% // This gets called during the render stage.
JavaScriptLibrary.JavaScriptHelper.Include_GreetUser(Page.ClientScript, true); %>
</form>
</body>
在運(yùn)行程序時(shí),如果觀察頁(yè)面源碼,你會(huì)發(fā)現(xiàn)這將調(diào)用HTML底部<script>標(biāo)簽引用的函數(shù)。
外部JS
到目前為止,我只是演示了如何引用嵌入式JS。然而,有時(shí)候會(huì)需要聯(lián)接到外部JS文件。為此,需要在JavaScriptHelper添加一個(gè)新函數(shù):
/// <summary>/// 在頁(yè)面里引用指定的外部JavaScript文件
/// </summary>
/// <param name="page">當(dāng)前頁(yè)面</param>
/// <param name="key">唯一標(biāo)示外部JavaScript文件的名字</param>
/// <param name="httpUrl">外部JavaScript文件的URL地址</param>
/// <param name="httpsUrl">啟用SSL時(shí)外部JavaScript文件的URL地址</param>
/// <param name="late">是否需要在HTML下面引用JavaScript</param>
private static void IncludeExternalJavaScript(Page page, string key, string httpUrl, string httpsUrl, bool late) {
var manager = page.ClientScript;
var type = typeof(JavaScriptLibrary.JavaScriptHelper);
bool isStartupRegistered = manager.IsStartupScriptRegistered(type, key);
bool isScriptRegistered = manager.IsClientScriptIncludeRegistered(type, key);
if (!(isStartupRegistered || isScriptRegistered)) {
string url;
if (page.Request.Url.Scheme.ToLower() == "http") {
url = httpUrl;
}
else {
url = httpsUrl;
}
if (late) {
manager.RegisterStartupScript(type, key, string.Format(TEMPLATE_SCRIPT, HttpUtility.HtmlEncode(url)));
}
else {
manager.RegisterClientScriptInclude(type, key, url);
}
}
} 做為常用外部JS文件示例,我將使用微軟CDN上的JS文件。如其它JS文件一樣,首先在JavaScriptHelper 類中添加一個(gè)函數(shù),供頁(yè)面調(diào)用jQuery:
private const string NAME_JQUERY = "jQuery";
private const string URL_JQUERY = "http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.5.1.js";
private const string URL_JQUERY_HTTPS = "https://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.5.1.js";
/// <summary>
/// 頁(yè)面引用jQuery.js
/// </summary>
/// <param name="page">當(dāng)前頁(yè)面.如果傳入為null,則使用HTTP上下文的當(dāng)前</param>
/// <param name="late">是否需要在HTML下面引用JavaScript</param>
public static void Include_jQuery(Page page,bool late=false) {
if (page == null)
page = (Page)HttpContext.Current.Handler;
IncludeExternalJavaScript(page,NAME_JQUERY,URL_JQUERY,URL_JQUERY_HTTPS,late);
} 最后你能后在頁(yè)面里通過(guò)在OnPreRender()里調(diào)用添加的方法實(shí)現(xiàn)對(duì)jQuery的引用。
protected override void OnPreRender(EventArgs e) {
base.OnPreRender(e);
JavaScriptLibrary.JavaScriptHelper.Include_jQuery(Page);
JavaScriptLibrary.JavaScriptHelper.Include_GreetUser(Page.ClientScript);
} 運(yùn)行程序,察看頁(yè)面源碼,你會(huì)看到如下jQuery引用:
<script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.5.1.js" type="text/javascript"></script>
添加新的JS文件
一旦所有內(nèi)容完成部署,在需要添加新的JS文件時(shí),只需要幾步即可完成,如下:
- 在JavaScript目錄中添加js文件。引用外部js文件跳過(guò)該步驟;
- 設(shè)置“生成操作”為“嵌入資源”。引用外部js文件跳過(guò)該步驟;
- 添加assembly屬性表示js文件為Web資源。引用外部js文件跳過(guò)該步驟;
- 在JavaScriptHelper類中添件一個(gè)引用JS文件的函數(shù);
- 從頁(yè)面,控件或母版頁(yè)上調(diào)用你創(chuàng)建的函數(shù);
不引用JS文件
以上所做都是為了引用JS文件,但也有時(shí)候你可能不需要引用JS文件。例如,在使用第三方控件庫(kù)時(shí),它們可能通過(guò)其他方式引用了JS,這時(shí)唯一阻止某一JS文件被兩次引用的方法是通過(guò)你的代碼消除重復(fù)引用(由第三方庫(kù)幫你引用,不需要重復(fù)引用)。這可以通過(guò)在JavaScriptHelper增加額外的函數(shù)實(shí)現(xiàn)。在實(shí)現(xiàn)之前,先讓我們演示一下這些技術(shù)應(yīng)用的場(chǎng)景。假設(shè)你的第三方控件InlineGreeting.ascx引用了jQuery,其內(nèi)容大致如下:
<%@ Control Language="C#" %><%-- This is a bad way to do things, but we can luckily overcome this obstacle. --%>
<script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.5.1.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$("#lblGreeting").text("Hello");
});
</script>
<p>
<label id="lblGreeting"></label>
</p> 現(xiàn)在假設(shè)我們有另一個(gè)自己的控件Hello.ascx,使用了同樣的jQuery文件:
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Hello.ascx.cs" Inherits="ParchmentPurveyor.Hello" %>
<script type="text/javascript">
$(document).ready(GreetUser);
</script> Hello.ascx的后臺(tái)代碼引用了jQuery,如下:
protected override void OnPreRender(EventArgs e) {
base.OnPreRender(e);
JavaScriptLibrary.JavaScriptHelper.Include_GreetUser(Page.ClientScript);
JavaScriptLibrary.JavaScriptHelper.Include_jQuery(Page);
}
現(xiàn)在,如果在Default.aspx中引用上述用戶控件,jQuery將會(huì)被引用兩次(第三方一次,我們一次)。為避免此類情況發(fā)生,我們將在JavaScriptHelper類中添加兩個(gè)方法,ExcludeJavaScript()和Exclude_jQuery():
private const string NAME_DUMMY_FILE = "JavaScriptLibrary.JavaScript.DummyFile.js";
/// <summary>
/// 該頁(yè)面排除jQuery.js
/// </summary>
/// <param name="manager">通過(guò)Page.ClientScript訪問(wèn)</param>
public static void Exclude_jQuery(ClientScriptManager manager) {
ExcludeJavaScript(manager, NAME_JQUERY);
}
/// <summary>
/// 注冊(cè)一個(gè)虛假的腳本來(lái)阻止包含真實(shí)的JavaScript
/// </summary>
/// <param name="manager">通過(guò)Page.ClientScript訪問(wèn)</param>
/// <param name="key">唯一標(biāo)示JavaScript文件的名字</param>
private static void ExcludeJavaScript(ClientScriptManager manager, string key) {
var type = typeof(JavaScriptLibrary.JavaScriptHelper);
var url = manager.GetWebResourceUrl(type, NAME_DUMMY_FILE);
manager.RegisterStartupScript(type, key, string.Empty);
manager.RegisterClientScriptInclude(type, key, url);
}
注意,我們定義了一個(gè)新的常量NAME_DUMMY_FILE。上面函數(shù)假定我們按照上述步驟在JavaScript文件夾里添加了一個(gè)空J(rèn)S文件,并嵌入了它。這個(gè)空虛擬JS文件可以引用在任何我們想不引用JS文件的地方。為阻止我們的庫(kù)引用jQuery只需要調(diào)用在Default.aspx頁(yè)面的Page_Load()中調(diào)用Exclude_jQuery():
protected void Page_Load(object sender, EventArgs e) {//我們通過(guò)第三方控件引用了jQuery,那么將避免再一次引用
JavaScriptLibrary.JavaScriptHelper.Exclude_jQuery(Page.ClientScript);
}
現(xiàn)在我們要做的是修改Default.aspx引用InlineHello.ascx和Hello.ascx,結(jié)果如下:
...<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Parchment Purveyor</title>
<script type="text/javascript">
// window.onload = function () { GreetUser(); };
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<h1>Parchment Purveyor</h1>
<p>Paper for printers, painting, publication,
paper planes, and plenty of other plebeian projects!</p>
<% // 這在渲染階段調(diào)用
JavaScriptLibrary.JavaScriptHelper.Include_GreetUser(Page.ClientScript, true); %>
</div>
<%-- An inline greeting (pretend this comes from a third-party control library. --%>
<greet:InlineHello ID="InlineHello1" runat="server" />
<%-- Our jQuery greeting. --%>
<greet:Hello runat="server" />
</form>
</body>
</html>
現(xiàn)在我們已清楚在調(diào)用Include_jQuery()之前先調(diào)用Exclude_jQuery(),就能夠阻止我們的JS庫(kù)引用jQuery.js文件。這就是說(shuō)jQuery只會(huì)被我們的第三方控件引用。大多數(shù)時(shí)候這種情況可以避免。然而,有時(shí)候不可避免,這時(shí)該技術(shù)也可以讓我們的HTML更加干凈整潔。
你都有哪些收獲?
經(jīng)過(guò)這些工作,依舊有同樣的HTML輸出,你可能會(huì)問(wèn)“通過(guò)添加這些額外的代碼,我獲得了什么?”。那么這里就列出幾點(diǎn):
- 內(nèi)聯(lián)JS:通過(guò)避免把JS直接內(nèi)聯(lián)到頁(yè)面,減小了頁(yè)面尺寸。
- 發(fā)布JS:當(dāng)你發(fā)布Web站點(diǎn)時(shí),你不需要發(fā)布引用的JS文件,只發(fā)布DLL就足夠了。
- 錯(cuò)誤引用:即使改變了程序路徑,你也不用為修改JS路徑擔(dān)憂。
- 依賴性:文件依賴自動(dòng)管理。如果你引用了GreetUser.js文件,那么ShowMessage.js文件會(huì)自動(dòng)被引用。
- 無(wú)效引用:除非你調(diào)用的函數(shù)引用了它,否則不會(huì)有JS加載到頁(yè)面。這將避免頁(yè)面上出現(xiàn)無(wú)用的JS(潛在的加快了頁(yè)面載入時(shí)間)。
- HTTP/HTTPS:腳本標(biāo)記的代碼輸出與協(xié)議無(wú)關(guān),因此協(xié)議對(duì)所有頁(yè)面一樣。
- 重構(gòu):如果你想使用一個(gè)不同版本的腳本,你只需要在一個(gè)地方修改它。例如,如果你決定切換到CDN版本的jQuery,而不是你自己承載,這可能非常有用。更新一個(gè)新版本的jQuery時(shí)也非常有用。
- 冗余:不管你在方法中引用多少次,該腳本標(biāo)簽僅會(huì)在頁(yè)面上本引用一次。
轉(zhuǎn)載于:https://www.cnblogs.com/niyw/archive/2011/06/02/2064937.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的高效管理ASP.NET的JavaScript库的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: ubuntu 下的ftp安装及root身
- 下一篇: .NET Framewrok 4.0新增