Nh?ng đi?m m?i c?a ASP.NET 4.5 Core runtime

ID c?a bài: 2645847 - Xem s?n ph?m mà bài này áp d?ng vào.
Bung t?t c? | Thu g?n t?t c?

? Trang này

V? tác gi?

Thu g?n b?ng nàyBung r?ng b?ng này
Thu g?n h?nh ?nh nàyBung r?ng h?nh ?nh này
2401266
Bài vi?t này đư?c cung c?p b?i MVP Lê Hoàng D?ng. Microsoft chân thành c?m ơn nh?ng MVP đ? chia x? nh?ng kinh nghi?m chuyên môn c?a m?nh v?i nh?ng ngư?i s? d?ng khác. Bài vi?t này s? đư?c đăng trên website ho?c blog c?a MVP sau đây. N?u b?n mu?n xem các bài vi?t khác đư?c chia x? b?i MVP, vui l?ng nháy chu?t vào đây.

Tóm t?t thông tin

1. Đ?c và ghi b?t đ?ng b? các đ?i tư?ng HTTP Request và Response
ASP.NET 4 gi?i thi?u kh? năng đ?c m?t th?c th? HTTP request như là m?t stream b?ng cách s? d?ng phương th?c HttpRequest.GetBufferlessInputStream. Phương th?c này cung c?p kh? năng truy xu?t stream cho th?c th? request, nhưng nó đư?c th?c thi đ?ng b?, và như v?y nó s? làm ngh?n thread v? ph?i th?c thi vi?c đ?c stream.

ASP.NET 4.5 h? tr? kh? năng đ?c stream b?t đ?ng b? trên th?c th? HTTP request, và kh? năng flush b?t đ?ng b?. ASP.NET 4.5 c?ng giúp cho b?n có kh? năng tăng g?p đôi buffer cho m?t th?c th? HTTP request, đi?u đó giúp cho vi?c tích h?p d? dàng v?i các các downstream HTTP handlers như là các trang .aspx và các ASP.NET MVC controllers.

1.1.Các c?i ti?n cho vi?c qu?n l? HttpRequest

Stream đư?c tham chi?u b?i HttpRequest.GetBufferlessInputStream trong ASP.NET 4.5 h? tr? các phương th?c đ?c đ?ng b? và b?t đ?ng b?. Đ?i tư?ng Stream đư?c tr? v? t? phương th?c GetBufferlessInputStream nay đ? cài đ?t cho c? hai phương th?c BeginRead và EndRead. Các phương th?c b?t đ?ng b? c?a Stream giúp b?n đ?c b?t đ?ng b? th?c th? Request theo t?ng chunks (t?ng ph?n nh?), trong khi đó ASP.NET s? gi?i phóng thread hi?n t?i đ?i v?i m?i v?ng l?p c?a vi?c đ?c b?t đ?ng b?.

ASP.NET c?ng thêm vào m?t phương th?c m?i cho vi?c đ?c th?c th? request theo cách đ?c s? d?ng b? đ?m là HttpRequest.GetBufferedInputStream. Phương th?c n?p ch?ng m?i này c?ng gi?ng v?i phương th?c GetBufferlessInputStream, h? tr? các phương th?c đ?c đ?ng b? l?n b?t đ?ng b?. Tuy nhiên, khi GetBufferedInputStream đ?c, nó sao chép tuyên các bytes c?a th?c th? request vào trong b? đ?m n?i vi c?a ASP.NET do đó các downstream modules và các handlers v?n có th? truy xu?t vào đ?i tư?ng request. Ví d?, n?u m?t s? m? upstream đang n?m trong đư?ng ?ng (pipeline) đ? đ?c th?c th? request s? d?ng phương th?c GetBufferedInputStream, b?n v?n có th? s? d?ng HttpRequest.Form ho?c HttpRequest.Files. Đi?u này giúp cho b?n có th? x? l? b?t đ?ng b? đ?n request (ví d? như v?a streaming m?t t?p tin kích thư?c l?n đ?n CSDL), nhưng mà v?n ti?p t?c ch?y đư?c các trang .aspx và controllers.

1.2 Ghi d? li?u b?t đ?ng b? lên đ?i tư?ng response
G?i các response đ?n tr?nh HTTP khách có th? làm t?n kém th?i gian khi client ? quá xa ho?c có k?t n?i băng thông h?p. B?nh thư?ng th? ASP.NET s? truy?n các bytes tr? v? sau đó g?i l?nh g?i b? đ?m nói trên vào th?i đi?m k?t thúc x? l? request.

N?u n?i dung tr? v? (đư?c buffer) là l?n (ví d? như g?i v? m?t t?p tin l?n cho client), b?n ph?i l?p l?i vi?c g?i HttpResponse.Fush đ? g?i v? client và gi? m?c s? d?ng b? nh? n?m trong t?m ki?m soát. Tuy nhiên, Flush là m?t l?i g?i đ?ng b?, nên vi?c g?i đi g?i l?i Flush s? tiêu t?n nhi?u th?i gian.

ASP.NET 4.5 đ? có thêm s? h? tr? cho vi?c ghi d? li?u b?t đ?ng b? b?ng các phương th?c BeginFlush và EndFlush c?a đ?i tư?ng HttpResponse. S? d?ng các phương th?c này s? giúp b?n t?o đư?c các module b?t đ?ng b? và các hanlder b?t đ?ng b? mà chúng s? g?i d? li?u liên t?c v? client mà không làm ch?m các thread c?a h? đi?u hành. Gi?a các l?i g?i BeginFlush và EndFlush, ASP.NET gi?i phóng thread hi?n t?i. Khi sđó nó s? gi?m b?t lư?ng các thread c?n ph?i ch? h? tr? các lư?t t?i v? t?n nhi?u th?i gian.

2. H? tr? cho các các module và handler b?t đ?ng b? d?ng await và task-based (Support for await and Task-Based Asynchronous Modules and Handlers)
N?n t?ng .NET 4 đ? gi?i thi?u đ?n khái ni?m l?p tr?nh b?t đ?ng b? g?i là task. Các task đư?c đ?i di?n b?i ki?u d? li?u Task và các ki?u liên quan có trong namespace System.Threading.Tasks. N?n t?ng .NET 4.5 ti?p t?c c?i ti?n và giúp cho vi?c làm vi?c v?i các đ?i tư?ng Task tr? nên đơn gi?n hơn. V?i .NET 4.5, tr?nh biên d?ch h? tr? hai t? khóa m?i đó là await và async. T? khóa await giúp xác đ?nh m?t đo?n m? l?nh ph?i ch? đ?i b?t đ?ng b? đ?n khi m?t đo?n code khác th?c thi xong. C?n t? khóa async th? l?i là ch? d?n r?ng b?n có th? s? d?ng các phương th?c có t? khóa đó như là các phương th?c b?t đ?ng b? d?ng task-based.

S? k?t h?p gi?a hai t? khóa await, async và đ?i tư?ng Task giúp cho b?n có th? d? dàng vi?t m? b?t đ?ng b? trong .NET 4.5. ASP.NET 4.5 h? tr? b?ng các APIs giúp cho b?n có th? vi?t các HTTP modules và các HTTP handlers b?t đ?ng b? s? d?ng các c?i ti?n c?a tr?nh biên d?ch.


2.1. Các module HTTP b?t đ?ng b?
Gi? s? b?n mu?n th?c hi?n công vi?c b?t đ?ng b? v?i m?t phương th?c tr? v? đ?i tư?ng Task. M? ví d? sau đây đ?nh m?t phương th?c b?t đ?ng b? mà nó th?c hi?n m?t l?i g?i b?t đ?ng b? đ? t?i v? trang nhà c?a Microsoft.

private async
Task ScrapeHtmlPage(object caller, EventArgs e)
 {
    WebClient wc = new WebClient();
    var result = await wc.DownloadStringTaskAsync("http://www.microsoft.com");
    // Do something with the result
}
Đó là t?t c? nh?ng g? b?n c?n vi?t và n?n t?ng .NET s? t? đ?ng qu?n l? call stack trong khi ch? đ?i vi?c download th?c hi?n xong, c?ng như ph?c h?i call stack khi vi?c download hoàn thành.

Bây gi? gi? như b?n mu?n s? d?ng phương th?c b?t đ?ng b? trong m?t ASP.NET HTTP module. ASP.NET 4.5 có m?t phương th?c tr? giúp (EventHandlerTaskAsyncHelper) và m?t ki?u d? li?u delegate m?i (TaskEventHandler) mà nh? đó b?n có th? d? dàng tích h?p các phương th?c b?t đ?ng b? d?ng task-based v?i mô th?c l?p tr?nh b?t đ?ng b? đư?c th?c thi b?i ASP.NET pipeline. Ví d? dư?i đây cho th?y cách th?c hi?n:

public void Init(HttpApplication context)
 {
   // B?c l?i phương th?c d?ng Task-based đ? có th? dùng đư?c v?i
   // cách th?c l?p tr?nh b?t đ?ng b? c?.
   EventHandlerTaskAsyncHelper helper =
        new EventHandlerTaskAsyncHelper(ScrapeHtmlPage);
 
        // Đ?i tư?ng helper giúp tách d? hai phương th?c Begin/End ra kh?i
        // phương th?c tr? v? đ?i tư?ng Task. ASP.NET pipeline g?i 
        // các phương th?c Begin và End đ? b?t đ?u và k?t thúc các l?i g?i đ?n
        // các module HTTP b?t đ?ng b?.
        context.AddOnPostAuthorizeRequestAsync(
            helper.BeginEventHandler, helper.EndEventHandler);
    }
2.2. Các Http handler b?t đ?ng b?

Cách ti?p c?n truy?n th?ng đ? vi?t các handler b?t đ?ng b? trong ASP.NET chính là cài đ?t interface IHttpAsyncHandler. ASP.NET 4.5 gi?i thi?u ki?u b?t đ?ng b? HttpTaskAsyncHandler mà b?n có th? k? th?a, và s? giúp vi?c xây d?ng các handler b?t đ?ng b? d? dàng hơn.

Ki?u HttpTaskAsyncHandler là tr?u tư?ng và yêu c?u b?n ph?i quá t?i phương th?c ProcessRequestAsync. ASP.NET s? ch?u trách nhi?m v? vi?c tích h?p d?u hi?u d?ng Task-based đư?c ProcessRequestAsync v?i mô h?nh l?p tr?nh b?t đ?ng b? c? đư?c s? d?ng b?i ASP.NET pipeline.

Ví d? dư?i đây ch? d?n cho b?n cách s? d?ng Task và t? khóa await như là m?t ph?n c?a vi?c cài đ?t m?t HTTP handler b?t đ?ng b?

public class MyAsyncHandler : HttpTaskAsyncHandler
{
    // ...
 
    // ASP.NET t? đ?ng qu?n qu?n l? vi?c tích h?p phương th?c này
    // v?i ASP.NET pipeline.
    public override async Task ProcessRequestAsync(HttpContext context)
    {
        WebClient wc = new WebClient();
        var result = 
            await wc.DownloadStringTaskAsync("http://www.microsoft.com");
        // Do something with the result
    }
}
3. Các tính năng m?i ki?m tra tính h?p l? đ?i v?i Request
ASP.NET m?c đ?nh th?c hi?n vi?c ki?m tra tính h?p l? đ?i v?i request, nó s? ki?m tra các request đ? t?m các th? ho?c script trong các trư?ng, header, cookies… N?u như nó phát hi?n đư?c đi?u g? b?t h?p l?, ASP.NET s? ném ngo?i l?. Hành vi này là tuy?n ph?ng ng?a đ?u tiên ddooois v?i l?i t?n công cross-site scripting attack.

ASP.NET 4.5 giúp cho vi?c đ?c các d? li?u chưa đư?c ki?m tra d? dàng hơn. ASP.NET 4.5 c?ng m?c đ?nh tích h?p thư vi?n AntiXSS.

Các l?p tr?nh viên thư?ng yêu c?u cho phép đư?c tuyef ch?n t?t vi?c ki?m tra h?p l? đ?i v?i request trong các ?ng d?ng c?a h?. Ví d? như, n?u ?ng d?ng c?a b?n là m?t di?n đàn, b?n s? mu?n cho phép ngư?i dùng g?i lên các bài vi?t theo đ?nh d?ng HTML nhưng v?n đ?m b?o r?ng vi?c ki?m tra tính h?p l? s? đư?c th?c hi?n ? nh?ng nơi c?n l?i.

ASP.NET 4.5 gi?i thi?u hai tính năng cho phép b?n d? dàng làm vi?c v?i các d? li?u nh?p không đư?c ki?m tra: làm ch?m vi?c ki?m tra tính h?p l? c?a request và truy xu?t vào d? li?u chưa đư?c ki?m tra c?a request.

2.1 Làm ch?m (“lazy”) vi?c ki?m tra tính h?p l? c?a request
Trong ASP.NET 4.5, t?t c? các d? li?u request đ?u ph?i đư?c ki?m tra tính h?p l?. Tuy nhiên b?n có th? c?u h?nh ?ng d?ng cho phép ho?n ki?m tra tính h?p l? cho đ?n khi b?n truy xu?t xong d? li?u c?a request. B?n có th? c?u h?nh ?ng d?ng đ? s? d?ng ki?m tra h?p l? ch?m (deferred validation) trong Web.config b?ng cách gán giá tr? cho thu?c tính requestValidationMode trong th? httpRuntime là 4.5 như dư?i đây:

<httpRuntime requestValidationMode="4.5" ... />
Khi requestValidationMode đư?c quy đ?nh là 4.5, vi?c ki?m tra tính h?p l? cho request ch? th?c hi?n cho t?ng giá tr? c? th? khi và ch? khi m? l?nh c?a b?n truy xu?t giá tr? đó. Ví d? như khi b?n l?y giá tr? Request.Form["forum_post"], ch? có ph?n t? đó đư?c ki?m tra tính h?p l? mà thôi. Các ph?n t? khác trong t?p h?p Form s? không đư?c ki?m tra. Trong phiên b?n trư?c c?a ASP.NET, ki?m tra h?p l? cho request s? đư?c th?c hi?n đ?i v?i c? t?p h?p Form khi có b?t k? ph?n t? nào c?a t?p h?p Form đư?c truy xu?t. Tính năng m?i này giúp cho các thành ph?n c?a ?ng d?ng ch? khi truy xu?t ph?n t? nó c?n s? không kích ho?t vi?c ki?m tra tính h?p l? d? li?u c?a các ph?n t? khác.

2.2 H? tr? có các request chưa đư?c ki?m tra tính h?p l?
Ki?m tra h?p l? d? li?u cho request “tr?” th?c ra chưa gi?i quy?t đư?c nhu c?u c?n b? qua vi?c ki?m tra h?p l? d? li?u cho m?t ph?n t? nào đó c?a request. L?i g?i Request.Form[“forum_post”] v?n kích ho?t vi?c ki?m tra h?p l? cho giá tr? c?a ph?n t? đó. Tuy nhiên, th?c ra b?n v?n c?n đ?c đư?c ph?n t? này mà không kích ho?t vi?c ki?m tra tính h?p l?, b?i v? b?n mu?n ch?p nh?n m? đánh d?u đư?c lưu trong trư?ng đó.

Đ? ch?p nh?n vi?c b? qua ki?m tra tính h?p l?, ASP.NET 4.5 bây gi? đ? h? tr? cho vi?c b? qua ki?m tra h?p l? b?ng cách cung c?p m?t thu?c t?p h?p có tên là Unvalidated trong l?p HttpRequest. Chúng ta có th? s? d?ng t?p h?p này đ? truy xu?t đ?n t?t c? các giá tr? thông d? như Form, QueryString, Cookies, và Url.

S? d?ng cùng v?i ví d? trên, đ? có th? đ?c d? li?u chưa đư?c ki?m tra h?p l?, b?n c?n ph?i c?u h?nh ?ng d?ng đ? s? d?ng cơ ch? ki?m tra tính h?p l? c?a request m?i:

<httpRuntime requestValidationMode="4.5" ... />
B?n có th? s? d?ng thu?c tính HttpRequest.Unvalidated đ? đ?c các giá tr? chưa ki?m tra h?p l? c?a form:

var s = context.Request.Unvalidated.Form["forum_post"];
Lưu ? v? b?o m?t: M?c dù ASP.NET 4.5 cho phép b?n truy xu?t vào d? li?u chưa đư?c ki?m tra tính h?p l? c?a request, nhưng b?n v?n c?n ph?i t? m?nh ki?m tra đ?i v?i d? li?u thô l?y t? request đ? đ?m b?o b?n không g?i m? đ?c tr? l?i cho khách hàng.

4. Thư vi?n Anti-XSS

B?i v? thư vi?n Microsoft AntiXSS đư?c s? d?ng r?t ph? bi?n, ASP.NET 4.5 đ? tích h?p tính năng chính c?a thư vi?n này (phiên b?n 4.0) vào chính nó.

Các k? thu?t m? hóa đư?c cài đ?t b?i ki?u AntiXssEncoder trong namespace m?i là System.Web.Security.AntiXss. B?n có th? d?ng ki?u AntiXssEncoder tr?c ti?p b?ng cách g?i b?t k? phương th?c m? hóa t?nh nào đư?c cài đ?t trong ki?u này. Tuy nhiên, phương th?c ti?p c?n d? nh?t đó là c?u h?nh ?ng d?ng ASP.NET đ? ?ng d?ng m?c đ?nh s? d?ng AntiXssEncoder. Đ? làm đư?c đi?u đó, b?n c?n thêm thu?c tính sau vào t?p tin Web.config:

<httpRuntime ...
  encoderType="System.Web.Security.AntiXss.AntiXssEncoder, System.Web,
    Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
Dư?i đây là các thành ph?n c?a thư vi?n AntiXSS đư?c tích h?p vào ASP.NET 4.5:

  • HtmlEncode, HtmlFormUrlEncode, and HtmlAttributeEncode
  • XmlAttributeEncode and XmlEncode
  • UrlEncode và UrlPathEncode
  • CssEncode
5. H? tr? cho giao th?c WebSockets
Giao th?c WebSockets là m?t giao th?c m?ng chu?n nh?m đ?nh ngh?a cách thi?t l?p các k?t n?i hai chi?u th?i gian th?c gi?a client và server thông qua giao th?c HTTP. Microsoft đ? làm vi?c v?i các chu?n IETF và W3C đ? giúp đ?nh ngh?a giao th?c này. Giao th?c WebSocket đư?c h? tr? b?i b?t k? client nào (không ch? là browsers).

Giao th?c WebSockets giúp cho vi?c g?i nh?n d? li?u trong th?i gian dài gi?a client và server d? dàng hơn. Ví d?, vi?c xây d?ng m?t ?ng d?ng chat s? d? dàng hơn nhi?u b?i v? b?n có th? thi?p l?p m?t k?t n?i “th?i gian dài” gi?a client và server mà không ph?i m?t công gi? l?p các tính năng c?a m?t socker như trư?c đây n?a.

ASP.NET 4.5 và IIS 8 bây gi? đ? h? tr? WebSockets, cho phép các l?p tr?nh viên có th? s? d?ng APIs đ? đ?c và ghi b?t đ?ng b? chu?i và d? li?u nh? phân trên m?t đ?i tư?ng WebSockets. ASP.NET 4.5 đ? có m?t namespace m?i là System.Web.WebSockets ch?a các ki?u dành cho vi?c l?p tr?nh v?i giao th?c WebSockets.

Tr?nh duy?t s? thi?t l?p m?t k?t n?i WebSockets đ? t?o m?t đ?i tư?ng DOM là WebSocket mà đ?i tư?ng này tr? đ?n m?t URL c?a ?ng d?ng ASP.NET, như dư?i đây:

socket = new WebSocket("ws://contoso.com/MyWebSocketApplication.ashx");
B?n có th? t?o các endpoint trong ASP.NET b?ng b?t c? module ho?c handler nào. V?i ví d? trên th? chúng ta s? d?ng t?p tin .ashx, b?i v? t?p tin .ashx là cách đ? có th? thi?t l?p m?t hanlder nhanh chóng.

Đ? áp d?ng giao th?c WebSockets, ?ng d?ng ASP.NET ch?p nh?n m?t request d?ng WebSockets b?ng cách xác đ?nh r?ng request đó nên đư?c nâng c?p t? m?t request d?ng HTTP GET thành request d?ng WebSockets. Xem ví d? dư?i:

HttpContext.Current.AcceptWebSocketRequest(// WebSocket delegate ? đây)
Phương th?c AcceptWebSocketRequest ch?p nh?t tham s? là m?t delegate b?i v? ASP.NET s? bung HTTP request và chuy?n quy?n đi?u khi?n đ?n delegate đó. Cách ti?p c?n này khá gi?ng v?i cách b?n dùng System.Threading.Thread, ? đó b?n s? đ?nh ngh?a m?t thread-start delegate mà m?i công vi?c s? đư?c th?c hi?n bên trong delegate đó.

Sau khi ASP.NET và client đ? hoàn thành xong vi?c thi?t l?p k?t n?i thông qua giao th?c WebSockets, ASP.NET g?i delegate c?a b?n và ?ng d?ng WebSockets s? b?t đ?u ch?y. M? l?nh dư?i đây mih ho?t m? c?a m?t ?ng d?ng s? d?ng tính năng h? tr? WebSockets c?a ASP.NET

public async Task MyWebSocket(AspNetWebSocketContext context)
 {
    WebSocket socket = context.WebSocket;
    while (true)
    {
        ArraySegment<byte> buffer = new ArraySegment<byte>(new byte[1024]);
 
        // Asynchronously wait for a message to arrive from a client
        WebSocketReceiveResult result =
            await socket.ReceiveAsync(buffer, CancellationToken.None);
 
        // If the socket is still open, echo the message back to the client
        if (socket.State == WebSocketState.Open)
        {
            string userMessage = Encoding.UTF8.GetString(buffer.Array, 0,
                result.Count);
            userMessage = "You sent: " + userMessage + " at " +
                DateTime.Now.ToLongTimeString();
            buffer = new ArraySegment<byte>(Encoding.UTF8.GetBytes(userMessage));
 
            // Asynchronously send a message to the client
            await socket.SendAsync(buffer, WebSocketMessageType.Text,
                true, CancellationToken.None);
        }
        else { break; }
    }
}
T? khóa await và các thao tác d?ng task-based hoàn toàn phù h?p đ? xây d?ng các ?ng d?ng WebSockets. M? l?nh dư?i đây cho th?y m?t request d?ng WebSockets ch?y hoàn toàn b?t đ?ng b? bên trong Asp.NET. ?ng d?ng này ch? đ?i thông đi?p m?t cách b?t đ?ng b? t? client b?ng cách g?i phương th?c socket.ReceiveAsync. Tương t?, b?n có th? g?i thông đi?p b?t đ?ng b? đ?n client b?ng cách g?i await socket.SendAsync.

? tr?nh duy?t, ?ng d?ng khách nh?n đư?c các thông đi?p WebSockets ? hàm onmesssage. Đ? g?i m?t thông đi?p t? tr?nh duy?t, b?n có th? g?i phương thưng th?c send c?a đ?i tư?ng DOM WebSocktet như dư?i đây:

// Receive a string message from the server.
 socket.onmessage = function(msg)
 {
    document.getElementById("serverData").innerHTML = msg.data; 
 };
 
// Send a string message from the browser.
 socket.send(document.getElementById("msgText"));
6. Bundling và Minification

Bundling (gói, bó l?i) cho phép b?n g?p nhi?u t?p tin JavaScript và CSS thành m?t gói và có th? xem như là m?t t?p tin duy nh?t. Minification là vi?c làm gi?m kích thư?c các t?p tin JavaScript và CSS b?ng cách xóa các k? t? tr?ng th?a và các k? t? không c?n thi?t. Các tính năng này ho?t đ?ng v?i các ?ng d?ng Web Forms, ASP.NET MVC, và Web Pages.

Tính năng bundling can thi?p vào k? thu?t đ?nh tuy?n c?a ASP.NET và nh? v?y có kh? năng tham chi?u đ?n c? m?t thư m?c hơn là ch? tham chi?u đ?n t?ng t?p tin riêng r?. Gi? th? b?n có c?u trúc t?p tin như sau:

Thu g?n h?nh ?nh nàyBung r?ng h?nh ?nh này
image001


B?n mu?n gói t?t c? các t?p tin .js trong thư m?c Scripts. Đ? làm đi?u đó, b?n có th? tham chi?u đ?n thư m?c và n?i /js đ?n đư?ng d?n như dư?i đây:

Thu g?n h?nh ?nh nàyBung r?ng h?nh ?nh này
image002


B?n c?ng có th? gói t?t c? các t?p tin .css trong thư m?c Styles, nhưng thay v? thêm /js, b?n s? thêm /css vào đư?ng d?n:

Thu g?n h?nh ?nh nàyBung r?ng h?nh ?nh này
image003


Khi các t?p tin đ? đư?c gói l?i, chúng đư?c s?p x?p theo th? t? alphabe (theo cách mà chúng đư?c hi?n th? ? Solution Explorer). Sau đó chúng đư?c t? ch?c làm sao đ? các thư vi?n đ? bi?t và các m? r?ng c?a chúng (như jQuery, MooTools và Dojo) đư?c n?p trư?c. Ví d?, th? t? các t?p tin trong thư m?c Script đư?c s?p x?p thành gói theo th? t?:

  1. jquery-1.6.2.js
  2. jquery-ui.js
  3. jquery.tools.js
  4. a.js
Các t?p tin CSS c?ng đư?c s?p x?p theo th? t? anphabe và sau đó đư?c t? ch?c l?i đ? reset.css và normalize.css đư?c x?p trư?c. K?t qu? s?p x?p cu?i cùng c?a thư m?c Styles như dư?i đây:

  1. reset.css
  2. content.css
  3. forms.css
  4. globals.css
  5. menu.css
  6. styles.css
Thu?t toán s?p x?p cho các t?p tin này là có th? tùy bi?n.

B?n có th? đăng k? gói c?a b?n trong thư m?c Global.asax đ? quy đ?nh nh?ng t?p tinnaof s? n?m trong gói và đư?ng d?n URL chính xác như th? nào. M? dư?i dây s? cho th?y cách th?c hi?n:

Thu g?n h?nh ?nh nàyBung r?ng h?nh ?nh này
image004


Và gói tùy bi?n customscript trong ví d? có th? đư?c tham chi?u như dư?i đây:

Thu g?n h?nh ?nh nàyBung r?ng h?nh ?nh này
image005

B?n th?m chí có th? thay đ?i các th?c làm g?n có s?n b?ng các phương th?c tùy ch?n c?a b?n. Trong ví d? dư?i đây, các cách làm g?n đ?ng s?n đư?c thay th? b?i hai ki?u tùy ch?n MyJsTransform và MyCssTransform.

Thu g?n h?nh ?nh nàyBung r?ng h?nh ?nh này
image006


Tính năng gói và làm g?n đư?c xây d?ng v?i m?c tiêu là d? dàng m? r?ng, và v? v?y m?i ph?n c?a ti?n tr?nh đ?u có th? m? r?ng và thay th?.

7. C?i thi?n t?c đ? cho Web Hosting

.NET Framework 4.5 và Windows 8 gi?i thi?u các tính năng cho phép b?n tăng t?c r? r?t đ?i v?i website. Trong đó th?i gian kh?i đ?ng và dung lư?ng b? nh? s? d?ng c?a các web hosting s? d?ng ASP.NET đư?c gi?m đ?n 35%.

7.1 Các y?u t? ch? y?u ?nh hư?ng đ?n t?c đ?

L? tư?ng nh?t đ? ?ng d?ng có t?c đ? cao là chúng đ? có m?t s?ng sàng trên b? nh? đ? đ?m b?o tr? l?i nhanh chóng cho request ti?p theo khi chúng t?i. Các y?u t? làm ?nh hư?ng kh? năng đáp tr? c?a site g?m:

  • Th?i gian c?n đ? site kh?i đ?ng l?i sau khi app pool b? xóa. Đây là th?i gian c?n đ? n?p l?i m?t ti?n tr?nh c?a web server dành cho các h?p t?p (assemblies) c?a site mà chúng đ? không c?n trong b? nh?. (Các h?p t?p (assemblies) c?a n?n t?ng v?n c?n trong b? nh? v? chúng v?n đư?c s? d?ng b?i các site khác). T?nh hu?ng này thư?ng đư?c g?i là “cold site, warm framework startup” ho?c ch? là “cold site startup”.
  • S? lư?ng b? nh? mà site chi?m d?ng. Thu?t ng? tương ?ng là “per-site memory consumption” ho?c “unshared working set”
Các c?i ti?n m?i s? t?p trung vào các y?u t? trên.

7.2. Yêu c?u dành cho các tính năng c?i thi?n t?c đ?
Các yêu c?u dành cho các tính năng có th? phân làm ba nhóm:

  • Các c?i ti?n ch?y trên .NET Framework 4
  • Các c?i ti?n yêu c?u .NET Framework 4.5 và có th? ch?y trên m?i phiên b?n c?a Windows
  • Các y?u t? ch? có m?t trên .NET Framework 4.5 và Windows 8
T?c đ? c?a ?ng d?ng s? đư?c c?i thi?n theo m?c tăng d?n đ?i v?i m?i m?c (t? trên xu?ng) mà b?n có th? áp d?ng đư?c.

7.3. Chia s? các h?p t?p dùng chung

Yêu c?u: .NET Framework 4 và Visual Studio 11 Developer Preview SDK

Các site khác nhau trên cùng m?t server thư?ng dùng chung m?t s? h?p t?p. M?i site đ?u có b?n sao c?a các h?p t?p trong thư m?c Bin. M?c dù chúng gi?ng nhau, nhưng m?i h?p t?p như v?y v?n ph?i đư?c đ?c trong quá tr?nh site kh?i đ?ng và đư?c lưu riêng bi?t trong b? nh?.

Tính năng interning m?i c?a s? gi?i quy?t s? thi?u hi?u qu? này và s? gi?m yêu c?u v? RAM và th?i gian n?p site. Tính năng interning giúp Windows ch? gi? m?t b?n sao c?a m?i assembly trong h? th?ng t?p tin, và các h?p t?p riêng bi? trong các thư m?c Bin s? đư?c thay th? b?i các liên k?t đ?n b?n sao duy nh?t đó. N?u như m?t site nào đó c?n m?t phiên b?n riêng bi?t c?a h?p t?p, link tư?ng trưng đó s? đư?c thay th? b?ng m?t phiên b?n m?i c?a h?p t?p và ch? site đó b? tác đ?ng mà thôi.

Đ? các h?p t?p dùng chung s? d?ng các liên k?t tư?ng trưng c?n ph?i s? d?ng m?t công c? m?i có tên là aspnet_intent.exe, công c? này giúp cho b?n t?o và qu?n l? kho các h?p t?p dùng chúng. Nó đư?c cung c?p như là m?t ph?n c?a Visual Studio 11 Developer Preview SDK.

Đ? đ?m b?o t?t c? các h?p t?p h?p l? đư?c qu?n l?, b?n ch?y aspnet_intent.exe theo chu k? (ví d? như 1 tu?n 1 l?n). Cách dùng c? th? như sau:

aspnet_intern -mode exec -sourcedir
"C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET
Files" -interndir C:\ASPNETCommonAssemblies
Đ? th?y m?i tùy ch?n, h?y ch?y công c? mà không có tham s?.

7.4 S? d?ng JIT đa l?i (multi-Core JIT) đ? biên d?ch

Yêu c?u: .NET Framework 4.5

Đ?i v?i site đư?c kh?i đ?ng l?nh, ngoài vi?c đ?c t? đ?a các h?p t?p, th? c? site c?ng ph?i đư?c biên d?ch (JIT-compiled). Đ?i v?i các site ph?c t?p th? s? khá t?n kém th?i gian. .NET Framework 4.5 v?i m?t k? thu?t m?i s? giúp gi?m th?i gian biên d?ch b?ng cách t?n d?ng t?t c? cá l?i x? l? r?i đ? biên d?ch. Nó s? làm càng s?m càng t?t b?ng cách s? d?ng thông tin thu th?p đư?c trong nh?ng l?n n?p site trư?c. Ch?c năng này đư?c thi?t l?p b?i phương th?c System.Runtime.ProfileOptimization.StartProfile. Vi?c biên d?ch s? d?ng nhi?u l?i x? l? đư?c kích ho?t m?c đ?nh nên b?n không c?n thao tác g? thêm. Tuy nhiên n?u b?n mu?n vô hi?u hóa tính năng này th? c?n thêm tùy ch?nh này vào t?p tin Web.config:

<configuration>
  <!-- ... -->
  <system.web>
    <compilation profileGuidedOptimizations="None"  />
  <!-- ... -->  
7.5 T?i ưu garbage collection đ? t?i ưu b? nh?

Yêu c?u: .NET Framework 4.5

M?t khi site đang ch?y, vi?c nó s? s? d?ng b? nh? heap c?a b? thu gom rác (GC) như th? nào là m?t nhân t? quan quan tr?ng đ?i v?i t?ng b? nh? mà nó chi?m d?ng. C?ng gi?ng như các b? thu rom rác khác, .NET Framework GC ph?i cân b?ng gi?a CPU s? d?ng và dung lư?ng b? nh? chi?m d?ng (không gian nh? m? r?ng đư?c dùng cho đ?i tư?ng m?i đư?c gi?i phóng, ho?c các đ?i tư?ng có th? b? gi?i phóng). V?i các phiên b?n trư?c c?a ASP.NET, Microsoft đ? có hư?ng d?n cách c?u h?nh GC đ? đ?t đư?c m?c cân b?ng t?t.

Đ?i v?i .NET Framework 4.5, thay v? s? d?ng nhi?u c?u h?nh riêng bi?t, có m?t tùy ch?nh c?u h?nh đư?c s? d?ng đ? h?u hi?u t?t c? các c?u h?nh GC khuy?n dùng trư?c đó c?ng như các c?u h?nh dùng đ? tăng t?c tùy theo site.

Đ? h?u hi?u hóa vi?c t?i ưu b? nh? GC, thêm tùy ch?n sau vào t?p tin Windows\Microsoft.NET\Framework\v4.0.30319\aspnet.config:

<configuration>
  <!-- ... -->
  <runtime>
    <performanceScenario value="HighDensityWebHosting"  />
  <!-- ... -->  
(N?u b?n quen thu?c v?i các hư?ng d?n trư?c đ? tùy ch?nh aspnet.config, lưu ? r?ng tùy ch?nh này s? thay th? các tùy ch?nh c? – ví d? như không c?n ph?i đi?u ch?nh gcServer, gcConcurrent,v.v. B?n không c?n ph?i b? đi nh?ng tùy ch?nh c?).

7.6 N?p trư?c ?ng d?ng web

Yêu c?u: .NET Framework 4.5 ch?y trên Windows 8

V?i m?t s? b?n phát hành, Windows đư?c đính kèm m?t công ngh? đư?c g?i là prefetcher giúp gi?m th?i lư?ng đ?c ? c?ng khi kh?i ch?y m?t ?ng d?ng. B?i v? cold startup là v?n đ? thư?ng x?y ra ? các ?ng d?ng khách, nên công ngh? này không đư?c tích h?p vào Windows Server, mà Windows Server ch? tích h?p m?t s? thành ph?n c?n thi?t mà thôi. Prefeching đ? có m?t trên phiên b?n m?i nh?t c?a Windows Server, và nó s? giúp cho t?i ưu hóa th?i gian kh?i ch?y các website.

Đ?i v?i Windows Server, prefercher b? m?c đ?nh vô hi?u. Đ? h?u hi?u hóa và c?u h?nh nó, ch?y các câu l?nh sau t? command line:

sc config sysmain start=auto
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters" /v EnablePrefetcher /t REG_DWORD /d 2 /f
reg add "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Prefetcher" /v MaxPrefetchFiles /t REG_DWORD /d 8192 /f
net start sysmain
Sau đó tích h?p prefetcher v?i các ?ng d?ng ASP.NET b?ng cách thêm n?i dung dư?i đây vào tâp tin Web.config:

<configuration>
  <!-- ... -->
  <system.web>
    <compilation enablePrefetchOptimization="true" />
  <!-- ... -->  
TÓM L?I:
ASP.NET 4.5 h? tr? m?nh cho l?p tr?nh b?t đ?ng b?, h? tr? ki?m tra tính h?p d? li?u cho trư?ng riêng bi?t c?a request, cho phép chúng ta truy xu?t đư?c d? li?u chưa đư?c ki?m ính h?p l? c?a c?a request, h? tr? thư vi?n Anti-XSS, h? tr? l?p tr?nh v?i giao th?c WebSockets, h? tr? đóng gói và nén các t?p tin javascript và css, và cu?i cùng là m?t lo?t các c?i ti?n nh?m tăng t?c ?ng d?ng web. Ch? v?i bao nhiêu cái ti?n đó thôi c?ng đ? cho chúng ta th?y c?n thi?t ph?i s?n sàng đ? xây d?ng ?ng d?ng web trên n?n t?ng này.


Tuyên b? Không ch?u trách nhi?m N?i dung Gi?i pháp C?ng đ?ng

CÔNG TY MICROSOFT VÀ/HO?C CÁC NHÀ CUNG C?P C?A H? KHÔNG B?O Đ?M V? TÍNH PHÙ H?P, Đ? TIN C?Y HO?C TÍNH CHÍNH XÁC C?A THÔNG TIN VÀ H?NH ?NH LIÊN QUAN ? ĐÂY. M?I THÔNG TIN VÀ H?NH ?NH NHƯ V?Y ĐƯ?C CUNG C?P “NHƯ NGUYÊN M?U” MÀ KHÔNG CÓ B?T K? B?O Đ?M NÀO. MICROSOFT VÀ/HO?C CÁC NHÀ CUNG C?P C?A H? KHÔNG CH?U TRÁCH NHI?M Đ?I V?I M?I B?O Đ?M VÀ ĐI?U KI?N V? THÔNG TIN VÀ H?NH ?NH LIÊN QUAN NÀY, BAO G?M C? M?I B?O Đ?M VÀ ĐI?U KI?N LIÊN QUAN V? TÍNH THƯƠNG M?I, PHÙ H?P CHO M?T M?C ĐÍCH Đ?C BI?T, N? L?C C?A CÔNG VI?C, TƯ CÁCH VÀ CAM K?T KHÔNG VI PH?M. B?N Đ?NG ? M?T CÁCH C? TH? LÀ KHÔNG CÓ TRƯ?NG H?P NÀO MÀ MICROSOFT VÀ/HO?C CÁC NHÀ CUNG C?P C?A H? B? RÀNG BU?C VÀO B?T K? THI?T H?I TR?C TI?P, GIÁN TI?P, TR?NG PH?T, T?NH C?, Đ?C BI?T, H? QU? HO?C B?T K? THI?T H?I D?NG NÀO, BAO G?M NHƯNG KHÔNG GI?I H?N THI?T H?I DO M?T MÁT, D? LI?U HO?C L?I ÍCH, X?Y RA HO?C TRONG M?I CÁCH LIÊN QUAN Đ?N VI?C S? D?NG HO?C KHÔNG TH? S? D?NG THÔNG TIN VÀ H?NH ?NH LIÊN QUAN CÓ ? ĐÂY, DÙ LÀ D?A VÀO H?P Đ?NG, L?I GÂY THI?T H?I, SƠ SU?T, NGH?A V? PHÁP L? HO?C B?T K? CƠ S? NÀO KHÁC, NGAY C? N?U MICROSOFT HO?C B?T K? NHÀ CUNG C?P NÀO C?A H? Đ? ĐƯ?C TƯ V?N V? KH? NĂNG B? THI?T H?I.

Thu?c tính

ID c?a bài: 2645847 - L?n xem xét sau cùng: 14 Tháng Mười Hai 2011 - Xem xét l?i: 2.0
Áp d?ng
  • Microsoft ASP.NET 4.0
T? khóa: 
kbprb kbtshoot kbstepbystep kbgraphxlink kbmvp KB2645847

Cung cấp Phản hồi

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com