1. 程式人生 > >ASP.NET 4.0 Webform傳統開發模式下如何壓縮css, js

ASP.NET 4.0 Webform傳統開發模式下如何壓縮css, js

網上查了很多壓縮css/js的方法,感覺還是用ms自己的簡便,其他的雖然功能強大,但是比較複雜,要簡單化...

在ASP.NET MVC中新建一個Web工程後,那些Bundle功能已經寫在程式碼中了,但是傳統的webform工程中怎樣使用這個Bundle壓縮功能呢?實現步驟如下:

1. 新建工程,並且為了演示,我把工程初始化成如下結構

2. 通過NuGet安裝擴充套件"Microsoft ASP.NET Web Optimization Framework"

尋找到“Microsoft ASP.NET Web Optimization Framework”的擴充套件

安裝此擴充套件,關閉此視窗
此時,解決方案中,會多出一個叫"System.Web.Optimization"的引用



3. 修改Global檔案,加入Bundle資源的程式碼

void Application_Start(object sender, EventArgs e)
        {
            // 在應用程式啟動時執行的程式碼
            BundleTable.Bundles.Add(new ScriptBundle("~/resource/jquery").Include("~/Scripts/jquery-1.4.1.js"));       //1個虛擬路徑對應了1個js檔案
            BundleTable.Bundles.Add(new StyleBundle("
~/resource/site").Include("~/Styles/Site.css")); //1個虛擬路徑對應了1個css檔案 BundleTable.Bundles.Add(new StyleBundle("~/resource/easyUITheme_default").IncludeDirectory("~/Styles/EasyuiThemes/default", "*.css", false)); //1個虛擬路徑對應了多個css檔案 BundleTable.Bundles.Add(new StyleBundle("
~/resource/easyUITheme_gray").IncludeDirectory("~/Styles/EasyuiThemes/gray", "*.css", false)); //1個虛擬路徑對應了多個css檔案 BundleTable.Bundles.Add(new StyleBundle("~/resource/easyUITheme_metro").IncludeDirectory("~/Styles/EasyuiThemes/metro", "*.css", false)); //1個虛擬路徑對應了多個css檔案 }

上面分別定義了ScriptBundle和StyleBundle,分別是定義js和css資源的,每行的程式碼中,前面的路徑是個虛擬路徑,必須"~/"開頭,後面的路徑是真實路徑。

4. 增加test.aspx頁面

<script language="javascript" type="text/javascript" src="<%: System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl("~/resource/jquery")%>"></script>
    <link href="<%: System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl("~/resource/site")%>" rel="stylesheet" type="text/css" />
    <link href="<%: System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl("~/resource/easyUITheme_default")%>" rel="stylesheet" type="text/css" />

上面3行程式碼中,ResolveBundleUrl中的引數就是在Global中寫的虛擬路徑


5. 執行效果
執行後的html程式碼:

<script language="javascript" type="text/javascript" src="/resource/jquery?v=Uhq_EnoqEUkRtNpKy2esjMsMXymBWYnOuOXfeQL60QE1"></script>
    <link href="/resource/site?v=FL58Z5KGNr5NRUTNQUr7njMc88BYdCiwMZKbAGeiiUE1" rel="stylesheet" type="text/css" />
    <link href="/resource/easyUITheme_default?v=X93-Lv0WiNBjfikEUpcvXzoKPbscp6dDibQHhy9TV4I1" rel="stylesheet" type="text/css" />

jQuery檔案壓縮後真正傳輸到客戶端的樣子如下(引數都已經被替換成一個字元了,空格等也刪除了):

(function(n,t){function yi(){if(!i.isReady){try{r.documentElement.doScroll("left")}catch(n){setTimeout(yi,1);return}i.ready()}}function ki(n,t){t.src?i.ajax({url:t.src,async:!1,dataType:"script"}):i.globalEval(t.text||t.textContent||t.innerHTML||""),

6. 有個不方便的地方就是除錯不方便,假如要除錯js就非常不方便,因為js被壓縮了,所以需要換個方法來實現,如下
在test.aspx檔案中,用下面的程式碼替換剛才那些程式碼

<%:System.Web.Optimization.Scripts.Render("~/resource/jquery")%>
    <%:System.Web.Optimization.Styles.Render("~/resource/site")%>
    <%:System.Web.Optimization.Styles.Render("~/resource/easyUITheme_default")%>

然後更改web.config引數,debug為false:

<compilation debug="false" targetFramework="4.0" />

執行,也能實現壓縮js和css的目的,當我們需要除錯js, css時,把配置修改成這樣compilation debug="true",就不會壓縮js和css了,很方便

壓縮前後對比



未解決的問題,相應的注意事項

 壓縮後的虛擬路徑,css中的相應圖片引用會導致問題,除了手工改動外,還不知道怎麼自動的來解決(指在使用MS Bundle技術的情況下)。

相關推薦

ASP.NET 4.0 Webform傳統開發模式如何壓縮css, js

網上查了很多壓縮css/js的方法,感覺還是用ms自己的簡便,其他的雖然功能強大,但是比較複雜,要簡單化... 在ASP.NET MVC中新建一個Web工程後,那些Bundle功能已經寫在程式碼中了,但是傳統的webform工程中怎樣使用這個Bundle壓縮功能呢?實現步驟如下: 1. 新建工程,並且

基於ASP.NET 4.0開發的微商城系統OdnShop,開源發布

如果 支付 程序 TP 選項 虛擬 字符串 如果能 均可 基於ASP.NET 4.0開發的開源微商城系統,我們的目標是構建一個核心完善而又輕量級的微商城平臺,目前基本的核心功能,包括微信登陸/支付,產品管理,購物車與訂單管理等,輕量級是為了更加便於理解源碼和二次開發。 使

ASP.NET 4.0驗證請求 System.Web.HttpRequestValidationException: A potentially dangerous Request.F

asp.net oss 程序 sys validate time 拷貝 bsp 包括 System.Web.HttpRequestValidationException: A potentially dangerous Request.F 在使用類似eWebedtior

ASP.NET 4.0配置檔案中的ClientIDMode屬性

ASP.NET 4.0配置檔案中的ClientIDMode屬性來自森大科技官方部落格 http://www.cnsendblog.com/index.php/?p=99時光流逝,我們心愛的ASP.NET也步入了4.0的時代,微軟在ASP.NET 4.0中對很多特性做了修改。比如我將要討論的控制元件ID機制就是

ASP.NET 4.0配置文件中的ClientIDMode屬性

ont .cn 微軟 tex left 現在 判斷 mode name ASP.NET 4.0配置文件中的ClientIDMode屬性 來自森大科技官方博客 http://www.cnsendblog.com/index.php/?p=99 時光流逝,我們心愛的ASP.N

ASP.NET 4.0尚未在 Web 伺服器上註冊 ASP.NET 4.0尚未在 Web 伺服器上註冊 解決方法

ASP.NET 4.0尚未在 Web 伺服器上註冊 解決方法 使用VS2010建立web應用程式時出現如下提示ASP.NET 4.0尚未在 Web 伺服器上註冊。為了使網站正確執行,可能需要手動將 Web 伺服器配置為使用 ASP.NET 4.0,按 F1 可瞭解更多詳細資訊  

ASP.NET 4.0 安裝在 IIS6 最常遇到的四個問題

昨天同事將一個 ASP.NET 4.0 的網站安裝到客戶的 IIS6 主機上 (測試環境),結果過程非常不順利,他們曾經一度覺得客戶的主機不知道經過幾隻手蹂躪過了(因為有好多人在共用 Administrator 帳號)進而產生排斥安裝在客戶主機以及 “為什麼我們要用 ASP.NET 4” 的感覺,不

VS2012 開啟專案提示asp.net 4.0尚未在web伺服器上註冊

問題起因          重灌系統後安裝VS2012,然後開啟專案的時候,提示asp.net 4.0尚未在web伺服器上註冊,如圖:             解決辦法          1.首先I

解決ASP.NET 4.0尚未在Web伺服器上註冊問題

剛在vs2012中建立一個ASP.NET MVC 4.0專案遇到以下問題: 解決方法:手動 step1 手動註冊.net 4.0,用管理員許可權開啟cmd,然後跳到c:\windows\micros

Win10 相容性 Visual studio web應用程式 ASP.NET 4.0 尚未在 Web 伺服器上註冊

系統升級到windows10 ,Visual studio 建立web應用程式時出現如下提示ASP.NET 4.0尚未在 Web 伺服器上註冊。為了使網站正確執行,可能需要手動將 Web 伺服器配置為使用 ASP.NET 4.0,按 F1 可瞭解更多詳細資訊 嘗

Windows2008 iis ASP.net 4.0 配置

1.安裝web 伺服器(IIS)全部安裝,不在敘述 2.安裝Microsoft.NET4.0 不在敘述 3. 新增網站 4. 新增路徑,設定IP地址 5.設定ISAPTI和 CGI 6.允許4.0 7.應用程式池設定 8.改為 4.0 --經典

win7 2008 尚未在 Web 伺服器上註冊ASP.NET 4.0。為了使網站正確執行,可能需要手動將 Web 伺服器配置為使用 ASP.NET 4.0,按 F1 可瞭解更多詳細資訊。

win7,vs2010建立.NetFramework 4框架下的Asp.Net空網站。系統提示 “尚未在 Web 伺服器上註冊ASP.NET 4.0。為了使網站正確執行,可能需要手動將 Web 伺服器配置為使用 ASP.NET 4.0,按 F1 可瞭解更多詳細資訊。” 查閱

註冊asp.net 4.0版本到IIS服務器中

註冊 開始菜單 iis服務器 dex 文件夾路徑 ros exe windows系統 windows 在IIS服務器的運維的過程中,有時候部署asp.net網站發現未安裝.net framework對應版本信息,此時就需要重新將.net framework對應的版本註冊到I

[Vue 牛刀小試]:第十五章 - 傳統開發模式的 axios 使用入門

 一、前言   在沒有接觸 React、Angular、Vue 這類 MVVM 的前端框架之前,無法拋棄 Jquery 的重要理由,除了優秀的前端 DOM 元素操作性以外,能夠非常便捷的發起 http 請求也佔有非常重要的地位。   既然我們已經開始使用 Vue 進行前端開發,拋棄了對頁面 DO

用VSCode開發一個asp.net core2.0+angular5項目(5): Angular5+asp.net core 2.0 web api文件上傳

owb bus sed loaded runt ace created one 做了 第一部分: http://www.cnblogs.com/cgzl/p/8478993.html 第二部分: http://www.cnblogs.com/cgzl/p/8481825.

.net 4.0及以下版本,MVVM模式ViewModel基類:使用StackTrace實現INotifyPropertyChanged介面

using System; using System.ComponentModel; namespace SSMart_Model {     public class VModelBase: INotifyPropertyChanged, IDisposable    

ASP.NET MVC3.0+ JqGrid+Unit Of Work+ Repository/ EF 4.1 CRUD應用 (多層結構)

ManageContacts.cs public class ManageContacts { public IEnumerable<Contact> GetContacts() { IEnumerable<Contact&

asp.net網站MVC開發模式實現Sitemap(站點導航)的一些經驗教訓

本來這是一個挺簡單的功能, MVC中雖然已經不再支援原先asp.net的siteMap控制元件,但是已經有開源的專案支援這一功能,那就是---MvcSiteMapProvider,藉助這個專案,我們只需簡單的幾個步驟就可以實現站點導航了。 第二步:解壓這個包,裡面有個sr

ASP.NET 4 和 Visual Studio 2010 Web 開發概述

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="ShowjQuery.aspx.cs" Inherits="ShowjQuery" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML

Asp.Net MVC 插件化開發簡化方案

asp.net 插件化 Web 管理系統可以龐大到不可想像的地方,如果想就在一個 Asp.Net MVC 項目中完成開發,這個工程將會變得非常龐大,協作起來也會比較困難。為了解決這個問題,Asp.Net MVC 引入了 Areas 的概念,將模塊劃分到 Area 中去——然而 Area 仍然是主項目的