12/08/2018, 09:41

Tăng performance cho asp.net

Tối ưu hóa để tăng tốc website luôn là một vấn đề được các lập trình viên quan tâm tới bên cạnh việc tạo ra một website như ý. Hiện nay, có rất nhiều công cụ cũng như phương pháp từ đơn giản đến phức tạp nhất để tối ưu hóa website, đặc biệt là website ASP.Net MVC luôn được các lập trình viên cho là ...

Tối ưu hóa để tăng tốc website luôn là một vấn đề được các lập trình viên quan tâm tới bên cạnh việc tạo ra một website như ý. Hiện nay, có rất nhiều công cụ cũng như phương pháp từ đơn giản đến phức tạp nhất để tối ưu hóa website, đặc biệt là website ASP.Net MVC luôn được các lập trình viên cho là hơi "nặng" vì phải mang theo lượng lớn dll.

alt

Xin giới thiệu một số phương pháp giúp chúng ta tối ưu hóa website ASP.Net MVC:

1. Nén mã CSS và Javascript

Trong ASP.Net MVC có cơ chế bundles (BundleConfig.cs), việc khai báo các file css và javascript trong file này giúp chúng ta nén các mã CSS và Javascript, từ đó giúp giảm thời gian tải trang.

2. Chuyển mã Javascript xuống cuối trang

Đây là một mẹo nhỏ rất hay tăng đáng kể tốc độ tải web. Người xem website không cần thiết phải chờ để tải hết toàn bộ mã javascript đặt ở đầu trang, cái họ cần nhìn thấy trước tiên là bố cụ trang (mã html và css) của bạn, sau đó mới đến các sự kiện phía client của javascript, vì vậy cách tối ưu nhất là hãy để chúng ở cuối trang web của bạn.

3. Chạy Release Mode

Chắc chắn là hệ thống web của bạn đang chạy trong chế độ “Release”

alt

File file web.config:

<compilation debug="false" targetframework="4.0">
    <assemblies>
    </assemblies>
</compilation>

** 4. Sử dụng duy nhất một View Engine **

Mặc định trong file global.asas.cs của chúng ta sẽ như thế này

protected void Application_Start()
{
   AreaRegistration.RegisterAllAreas();
   RegisterGlobalFilters(GlobalFilters.Filters);
   RegisterRoutes(RouteTable.Routes);
}

Mặc định hệ thống sẽ hỗ trợ hai engine: Razor và Aspx. Và không có lý do gì để ta phải trả phí cho cái mà ta không sử dụng, điều này sẽ làm hệ thống của chúng ta chậm, do đó chúng ta cần điều chỉnh lại, chỉ sử dụng một Engine duy nhất. Trong trường hợp này, tôi đang sử dụng Raror nên tôi sẽ add Raror Engine

protected void Application_Start()
{
   AreaRegistration.RegisterAllAreas();
   RegisterGlobalFilters(GlobalFilters.Filters);
   RegisterRoutes(RouteTable.Routes);
   ViewEngines.Engines.Clear();
   ViewEngines.Engines.Add(new RazorViewEngine());
}

** 5. Không chuyển giá trị null ViewModel đến View **

Khi nào vấn đền này xảy ra Bạn chuyển giá trị null ViewModel đến view dùng html helpers giống như View:

@model PawLoyalty.ViewModels.Product

@{
    @Html.TextBoxFor(m => m.ProductName);
}

Thường xảy ra khi Insert dữ liệu Trong trường hợp nếu chúng ta truyền giá trị Null, thì hệ thống sẽ trả về NullReferenceException. Rõ ràng, nếu chúng ta xử lý tốt thì hệ thống sẽ không cần kiểm tra giá trị Null cho các giá trị khởi tạo, điều này gây nên sự lãng phí hệ thống Ví dụ: khai báo này không tốt cho hệ thống

public ActionResult Add() //get empty data for user input operation
{
   return View();  //here the model instance defaults to null
}

Khai báo tốt cho hệ thống

[HttpGet]
public ActionResult Add()//get empty data for user input operation
{
   return View(new Product());//here the ViewModel Product has been sent
}

6. Sử dụng Cache khi có thể

Trong trường hợp giá trị nội dung ít thay đổi, thì việc sử dụng OutputCacheAttribute sẽ giúp các bạn tiết kiệm rất nhiều về số lượng kết nối hệ thống hoặc truy vấn dữ liệu

[OutputCache(VaryByParam = "none", Duration = 3600)]
public ActionResult Categories()
{
    return View(new Categories());
}

Trên là ví dụ mô tả cách sử dụng cache trong ASP.Net MVC. Điều này phù hợp với các ứng dụng nhỏ và sữ liệu ít thay đổi. Tuy nhiên, với các ứng dụng lớn, số lượng truy cập nhiều thì đây không phải là sự lựa chọn tốt. Khi đó các bạn nên nghĩ đến những cache khác như có memcached provider để có thể đáp ứng nhu cầu của bạn

7. Sử dụng HTTP Compression

Các bạn mở file web.config, thêm vào đoạn code sau

<system.webserver>
    <urlcompression dodynamiccompression="true" dostaticcompresion="true" dynamiccompresssionbeforecache="true">
    </urlcompression>
</system.webserver>

** 8. Loại bỏ những modules không sử dụng**

Khi khởi tạo Project mới, khuyên các bạn nên tạo empty project để có thể loại bỏ bớt những modules (là các dll) không cần thiết so với khi tạo project dạng aplication Các bạn khai báo thêm đoạn code sau để loại bỏ các modules không dùng

<httpmodules>
    <remove name="WindowsAuthentication"></remove>
    <remove name="PassportAuthentication"></remove>
    <remove name="Profile"></remove>
    <remove name="AnonymousIdentification"></remove>
</httpmodules>

<pages buffer="true" enableviewstate="false"></pages>

<configuration>
    <system.web>
        <trace enabled="false"></trace>
    </system.web>
</configuration>

<system.web>
    <httpruntime enableversionheader="false"></httpruntime>
</system.web>

<httpprotocol>
    <customheaders>
    <remove name="X-Powered-By"></remove>
    </customheaders>
</httpprotocol>
0