- Các bạn truy cập website sau : LapTrinhViet
- Xem mã nguồn website ( nhấn phím F12) ta thấy mã html được nén lại ( các khoảng trắng , commenr được xóa bỏ ) như hình sau :
- Trong các phiên bản IIS6 , IIS 8 , IIS 8 ... có các tính năng Compress nén html rồi mới trả lại cho Browser .Và các trình duyệt hiện đại cũng hỗ trợ nội dung nén
- Một vấn đề được đặt ra để dùng các tính năng Compress thì cần bật tính năng này trong IIS ( mà không phải nhà cung cấp hosting nào cũng bật tính năng này )
- Ngoài ra với các trình duyệt không hỗ trợ nội dung nén thì vẫn sẽ hiển thị nội dung chưa được nén
- Đồng thời chúng ta không quản lý được mã cũng như nội dung được nén
- Vì thế chúng ta tìm tới giải pháp là viết 1 đoạn code nhỏ dùng để xóa các commnet , khoảng trẳng ngay trong mã nguồn của chúng ta hơn là sử dụng tính năng nén của IIS
- Dưới đây chúng tôi hướng dẫn cách xóa khoảng trắng , commnet trong Webform và MVC
2. Nén nội dung trong ứng dụng MVC
2.1 Nén toàn bộ website
- Đây thực chất là thêm 1 tính năng xóa comment , khoảng trắng cho RazorViewEngine
- Tạo class nén file html như sau :
Visual C# Code:
- {
- // System.Web.WebPages.dll
- {
- {
- {
- html = REGEX_TAGS.Replace(html, "> <");
- html = REGEX_ALL.Replace(html, " ");
- {
- }
- }
- }
- {
- {
- html = REGEX_TAGS.Replace(html, "> <");
- html = REGEX_ALL.Replace(html, " ");
- {
- }
- }
- }
- }
- }
- Tại file cấu hình web.config của View ( View/web.config)
Ta đổi đoạn mã sau :
XML Code:
- <system.web.webPages.razor>
- <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
- <!--<pages pageBaseType="System.Web.Mvc.WebViewPage">
- <namespaces>
- <add namespace="System.Web.Mvc" />
- <add namespace="System.Web.Mvc.Ajax" />
- <add namespace="System.Web.Mvc.Html" />
- <add namespace="System.Web.Optimization"/>
- <add namespace="System.Web.Routing" />
- </namespaces>
- </pages>-->
- <pages pageBaseType="VinaWebBase.Optimization.MinifyZipHtml">
- <namespaces>
- <add namespace="System.Web.Mvc" />
- <add namespace="System.Web.Mvc.Ajax" />
- <add namespace="System.Web.Mvc.Html" />
- <add namespace="System.Web.Optimization"/>
- <add namespace="System.Web.Routing" />
- </namespaces>
- </pages>
- </system.web.webPages.razor>
- Chú ý cần khai báo chính xác cả namespace lớp MinifyZipHtml
- Khi sử dụng tính năng bundled của MVC 4 thì cần tham chiếu tới file css , script ảo như file vật lý thông thường , không dùng được các khái báo : @Styles.Render , @Scripts.Render
- Ta có thể khai báo trực tiếp các file CSS , Script ảo như nhứng file css , script thật như sau :
<link href="~/Content/css" rel="stylesheet" />
<script src="~/bundles/modernizr"></script>
<script src="~/bundles/jquery"></script>
- Khi chạy ứng dụng các mã html được zip lại như hình sau :
Download mã nguồn cho MVC chạy Project được kết quả như hình sau :
Kiểm tra mã nguồn ta được kết quả như hình sau :
2.2 Tạo Attribute nén nội dung cho Action của Controller bất kỳ
- Với việc tạo thêm tính năng cho Razor View ở trên thì toàn bộ website sẽ bị nén
- Ta có thể khai báo tính năng nén cho 1 Action cần thiết nào đó như sau :
Tạo lớp Attribute :
Visual C# Code:
- {
- //using System.Web.Mvc;
- {
- {
- }
- }
- {
- {
- _output = stream;
- }
- {
- html = html.Trim();
- _output.Write(Encoding.UTF8.GetBytes(html), offset, Encoding.UTF8.GetByteCount(html));
- }
- }
- }
Khai báo sử dụng Attribute trong Controller :
Visual C# Code:
- Có thể khai báo sử dụng cho từng Action như sau :
Visual C# Code:
3. Nén nội dung trong WebForm
- Đơn giản hơn trong MVC , trong webform các bạn chỉ cần khai báo phương thức sau trong code behind
// Khai báo phương thức sau trong code behind
Visual C# Code:
- {
- {
- System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex(@"<script[^>]*>[\w|\t|\r|\W]*?</script>");
- System.Text.RegularExpressions.MatchCollection mymatch = reg.Matches(html);
- reg = new System.Text.RegularExpressions.Regex(@"(?<=[^])\t{2,}|(?<=[>])\s{2,}(?=[<])|(?<=[>])\s{2,11}(?=[<])|(?=[\n])\s{2,}|(?=[\r])\s{2,}");
- {
- str += match.ToString();
- }
- html = reg.Replace(html, str + "</body>");
- writer.Write(html);
- }
- }
Không có nhận xét nào:
Đăng nhận xét