Cấp bậc tác giả:

TRAINING

[ASP.NET MVC]Bài 6: Quản lý và Tối ưu trạng thái

Được viết bởi webmaster ngày 12/03/2023 lúc 05:32 PM
State management (quản lý trạng thái) là quá trình lưu trữ và truy xuất thông tin giữa các yêu cầu của người dùng trong một ứng dụng web. Trong môi trường web, trạng thái của một ứng dụng là thông tin về các biến, giá trị và trạng thái của các đối tượng được lưu trữ và truyền giữa các yêu cầu.
  • 0
  • 2479

[ASP.NET MVC]Bài 6: Quản lý và Tối ưu trạng thái

1. Mô tả quản lý trạng thái - State Management
State management (quản lý trạng thái) là quá trình lưu trữ và truy xuất thông tin giữa các yêu cầu của người dùng trong một ứng dụng web. Trong môi trường web, trạng thái của một ứng dụng là thông tin về các biến, giá trị và trạng thái của các đối tượng được lưu trữ và truyền giữa các yêu cầu. Khi người dùng hoạt động trên trình duyệt web, các yêu cầu được gửi đến server, server xử lý và gửi lại kết quả cho trình duyệt. Trong quá trình này, thông tin trạng thái của ứng dụng cần được lưu trữ và truy xuất để đảm bảo hoạt động đúng và nhất quán.
ASP.NET MVC cung cấp một số cơ chế để quản lý trạng thái trong ứng dụng web, giúp lưu trữ và truy xuất thông tin giữa các yêu cầu của người dùng. Các cơ chế này bao gồm:
  • Cookie
  • Session
  • Application
  • TempData
Quản lý trạng thái trong ASP.NET MVC là một chủ đề rất quan trọng và phức tạp, và cách thức sử dụng các cơ chế này sẽ phụ thuộc vào các yêu cầu và tính năng của ứng dụng web cụ thể.

1.1. Cookie: 
Cookie là một tập tin nhỏ được lưu trữ trên máy tính của người dùng, và được sử dụng để lưu trữ thông tin giữa các yêu cầu của người dùng. Ta có thể thêm cookie bằng cách sử dụng đối tượng HttpCookie và ghi nó vào response của server. Để truy xuất thông tin từ cookie, ta có thể sử dụng đối tượng HttpRequest.Cookies.

Hai loại cookie phổ biến nhất trong web development là session cookie và persistent cookie.
  • Session cookie: Session cookie được tạo ra và lưu trữ trên máy tính của người dùng trong phiên làm việc (session) khi người dùng truy cập vào một trang web. Session cookie chỉ tồn tại trong thời gian phiên làm việc của người dùng và sẽ bị xóa khi người dùng đóng trình duyệt hoặc khi phiên làm việc kết thúc. Session cookie thường được sử dụng để lưu trữ các thông tin tạm thời như giỏ hàng của người dùng hoặc thông tin đăng nhập.

Để sử dụng session cookie trong ASP.NET MVC, bạn có thể sử dụng đối tượng Session được cung cấp bởi lớp ControllerBase. Ví dụ sau đây lưu trữ thông tin giỏ hàng của khách hàng trong session cookie:
public class ShoppingCartController : ControllerBase
{
    public ActionResult AddToCart(int productId, int quantity)
    {
        // Lấy thông tin sản phẩm từ CSDL
        Product product = GetProductById(productId);

        // Lấy thông tin giỏ hàng từ session cookie
        List<CartItem> cartItems = (List<CartItem>)Session["CartItems"];

        // Nếu giỏ hàng chưa được khởi tạo, khởi tạo nó
        if (cartItems == null)
        {
            cartItems = new List<CartItem>();
        }

        // Thêm sản phẩm vào giỏ hàng
        cartItems.Add(new CartItem { Product = product, Quantity = quantity });

        // Lưu thông tin giỏ hàng vào session cookie
        Session["CartItems"] = cartItems;

        return RedirectToAction("ViewCart");
    }

    public ActionResult ViewCart()
    {
        // Lấy thông tin giỏ hàng từ session cookie
        List<CartItem> cartItems = (List<CartItem>)Session["CartItems"];

        // Hiển thị thông tin giỏ hàng trên trang web
        return View(cartItems);
    }
}
  • Persistent cookie: Persistent cookie được tạo ra và lưu trữ trên máy tính của người dùng trong một khoảng thời gian được xác định trước (ví dụ: một tuần, một tháng, một năm). Persistent cookie được sử dụng để lưu trữ các thông tin cố định như tên đăng nhập, mật khẩu hoặc các thông tin tùy chỉnh của người dùng. Khi một người dùng truy cập lại trang web, các persistent cookie sẽ được gửi đến máy chủ và được sử dụng để đăng nhập người dùng hoặc phục hồi các thiết lập tùy chỉnh của người dùng.
Để sử dụng persistent cookie trong ASP.NET MVC, bạn có thể sử dụng đối tượng HttpCookie để lưu trữ thông tin đăng nhập của người dùng. Ví dụ sau đây lưu trữ thông tin đăng nhập của người dùng trong persistent cookie:
public class AccountController : ControllerBase
{
    public ActionResult Login(string username, string password, bool rememberMe)
    {
        // Kiểm tra thông tin đăng nhập của người dùng
        bool isAuthenticated = AuthenticateUser(username, password);

        if (isAuthenticated)
        {
            // Lưu thông tin đăng nhập của người dùng vào persistent cookie
            if (rememberMe)
            {
                HttpCookie cookie = new HttpCookie("UserInfo");
                cookie.Values["Username"] = username;
                cookie.Values["Password"] = password;
                cookie.Expires = DateTime.Now.AddDays(7);
                Response.Cookies.Add(cookie);
            }

            // Đăng nhập thành công, chuyển hướng đến trang chủ
            return RedirectToAction("Index", "Home");
        }
        else
        {
            // Đăng nhập thất bại, hiển thị thông báo lỗi
            ModelState.AddModelError("", "Invalid username or password.");
            return View();
        }
    }

    public ActionResult Logout()
    {
        // Xóa persistent cookie chứa thông tin đăng nhập của người dùng
        HttpCookie cookie = new HttpCookie("UserInfo");
        cookie.Expires = DateTime.Now.AddDays(-1);
        Response.Cookies.Add(cookie);

        // Đăng xuất người dùng, chuyển hướng đến trang đăng nhập
        return RedirectToAction("Login");
    }
}
Lưu ý rằng để sử dụng session cookie và persistent cookie trong ASP.NET MVC, bạn cần bật tính năng phiên (session) và cookie trong tệp web.config của ứng dụng.
Cả hai loại cookie đều có thể được sử dụng để lưu trữ thông tin trên máy tính của người dùng và được sử dụng rộng rãi trong các ứng dụng web để cải thiện trải nghiệm người dùng và lưu trữ thông tin trạng thái. Tuy nhiên, cần lưu ý rằng việc sử dụng cookie cần được thực hiện cẩn thận để tránh lỗi bảo mật hoặc vi phạm quyền riêng tư của người dùng.

1.2. TempData 
Là một cơ chế quản lý trạng thái trong ASP.NET MVC để lưu trữ các thông tin tạm thời (temporary data) giữa các yêu cầu (request) và phản hồi (response) của người dùng. TempData thường được sử dụng để chuyển dữ liệu giữa các action method trong cùng một controller hoặc giữa các controller khác nhau trong một ứng dụng web. TempData lưu trữ các thông tin tạm thời trong một phiên làm việc (session) và được xóa sau khi người dùng kết thúc phiên hoặc khi nó được đọc trong yêu cầu tiếp theo. TempData có thể lưu trữ bất kỳ đối tượng nào, bao gồm các kiểu dữ liệu nguyên thủy (primitive data types) và các đối tượng phức tạp.
Dưới đây là một ví dụ cụ thể về cách sử dụng TempData trong ASP.NET MVC:
public class HomeController : Controller
{
    public ActionResult Index()
    {
        // Lưu thông báo thành công vào TempData
        TempData["SuccessMessage"] = "Đăng nhập thành công!";

        return RedirectToAction("Welcome");
    }

    public ActionResult Welcome()
    {
        // Lấy thông báo thành công từ TempData và hiển thị lên view
        ViewBag.SuccessMessage = TempData["SuccessMessage"];

        return View();
    }
}
Trong ví dụ trên, phương thức Index của lớp HomeController sử dụng TempData để lưu thông báo thành công vào TempData, sau đó chuyển hướng yêu cầu đến phương thức Welcome. Trong phương thức Welcome, thông báo thành công được lấy từ TempData và gán cho thuộc tính ViewBag để hiển thị trên view.
Lưu ý rằng TempData chỉ lưu trữ dữ liệu giữa các yêu cầu, nghĩa là nó chỉ tồn tại trong một yêu cầu và được xóa đi khi yêu cầu đó được hoàn thành. Nếu bạn muốn lưu trữ dữ liệu cho nhiều yêu cầu, hãy sử dụng Session hoặc Cache.

1.3. Application State 
Là một cơ chế quản lý trạng thái trong ASP.NET để lưu trữ các thông tin trạng thái cho toàn bộ ứng dụng web (global state). Application State là một đối tượng được lưu trữ trên server và có thể được truy xuất từ bất kỳ đối tượng nào trong ứng dụng web. Application State có thể lưu trữ bất kỳ kiểu dữ liệu nào, bao gồm các kiểu dữ liệu nguyên thủy (primitive data types) và các đối tượng phức tạp. Các giá trị được lưu trữ trong Application State có thể được truy xuất và sửa đổi từ bất kỳ trang hoặc component nào trong ứng dụng web.
Dưới đây là một ví dụ cụ thể về cách sử dụng Application state trong ASP.NET MVC:
public class HomeController : Controller
{
    public ActionResult Index()
    {
        // Lưu số lượt truy cập vào ứng dụng trong Application state
        Application.Lock();
        Application["VisitorsCount"] = (int)Application["VisitorsCount"] + 1;
        Application.UnLock();

        return View();
    }

    public ActionResult About()
    {
        // Lấy số lượt truy cập từ Application state và hiển thị lên view
        ViewBag.VisitorsCount = Application["VisitorsCount"];

        return View();
    }
}
Trong ví dụ trên, trong phương thức Index của lớp HomeController, số lượt truy cập vào ứng dụng được lưu trữ trong Application state. Để truy cập Application state, ta cần sử dụng phương thức Lock để đồng bộ hóa truy cập và phương thức UnLock để giải phóng khóa. Sau đó, số lượt truy cập được tăng lên một và lưu trữ lại trong Application state.
Trong phương thức About của lớp HomeController, số lượt truy cập được lấy ra từ Application state và gán cho thuộc tính ViewBag để hiển thị lên view.
Lưu ý rằng Application state là toàn cục và có thể được truy cập từ bất kỳ đối tượng nào trong ứng dụng, do đó, khi sử dụng Application state, ta cần đảm bảo rằng không có xung đột dữ liệu xảy ra và không gây tốn tài nguyên của máy chủ quá nhiều.

Trong ASP.NET MVC, có 3 sự kiện quan trọng được xử lý trong Application:
  • Application_Start: Sự kiện này xảy ra khi ứng dụng được khởi động lần đầu tiên. Trong sự kiện này, ta có thể thực hiện các tác vụ khởi tạo ứng dụng, chẳng hạn như cấu hình định tuyến, đăng ký các bộ lọc, và thiết lập các giá trị toàn cục.
  • Application_End: Sự kiện này xảy ra khi ứng dụng được tắt hoặc dừng hoạt động. Trong sự kiện này, ta có thể thực hiện các tác vụ dọn dẹp và giải phóng tài nguyên, chẳng hạn như đóng kết nối cơ sở dữ liệu, giải phóng bộ nhớ đệm, và các tác vụ khác.
  • Application_Error: Sự kiện này xảy ra khi có lỗi xảy ra trong ứng dụng. Trong sự kiện này, ta có thể xử lý các ngoại lệ và hiển thị thông báo lỗi cho người dùng, chẳng hạn như gửi email thông báo lỗi đến quản trị viên, ghi log lỗi, và chuyển hướng đến trang lỗi tùy chỉnh.
Các sự kiện này được quản lý bởi lớp Global.asax trong ASP.NET MVC. Ta có thể override các phương thức tương ứng để xử lý các sự kiện này theo nhu cầu của ứng dụng.
Dưới đây là một ví dụ cụ thể về cách sử dụng các sự kiện trong Application trong ASP.NET MVC:
public class MvcApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        // Cấu hình định tuyến
        RouteConfig.RegisterRoutes(RouteTable.Routes);

        // Đăng ký các bộ lọc
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);

        // Thiết lập giá trị toàn cục
        Application["VisitorsCount"] = 0;
    }

    protected void Application_End()
    {
        // Đóng kết nối cơ sở dữ liệu
        DbContext.Dispose();

        // Giải phóng bộ nhớ đệm
        Cache.Clear();
    }

    protected void Application_Error()
    {
        // Lấy thông tin về lỗi
        Exception ex = Server.GetLastError();

        // Ghi log lỗi
        Log.Error(ex);

        // Gửi email thông báo lỗi đến quản trị viên
        Email.SendErrorNotification(ex);

        // Chuyển hướng đến trang lỗi tùy chỉnh
        Response.Redirect("~/Error/Index");
    }
}
Trong ví dụ trên, lớp MvcApplication kế thừa từ lớp System.Web.HttpApplication và override các phương thức tương ứng để xử lý các sự kiện trong Application. Cụ thể:
Trong phương thức Application_Start, ta cấu hình định tuyến, đăng ký các bộ lọc, và thiết lập giá trị toàn cục "VisitorsCount" bằng 0.
Trong phương thức Application_End, ta đóng kết nối cơ sở dữ liệu và giải phóng bộ nhớ đệm.
Trong phương thức Application_Error, ta lấy thông tin về lỗi, ghi log lỗi, gửi email thông báo lỗi đến quản trị viên, và chuyển hướng đến trang lỗi tùy chỉnh.
Với các sự kiện này, ta có thể thực hiện các tác vụ quan trọng như cấu hình ứng dụng, giải phóng tài nguyên, và xử lý các lỗi xảy ra trong ứng dụng.

1.4. Session state: 
Session state là một tính năng quan trọng trong ASP.NET MVC, cho phép lưu trữ các thông tin phiên làm việc của người dùng trên máy chủ. Session state được lưu trữ dưới dạng biến toàn cục trên máy chủ và có thể được truy cập và chỉnh sửa từ bất kỳ đối tượng nào trong ứng dụng.
Để sử dụng Session state trong ASP.NET MVC, ta cần làm như sau:
Kích hoạt Session state trong ứng dụng bằng cách thêm đoạn mã sau vào file Web.config:
<system.web>
  <sessionState mode="InProc" cookieless="false" timeout="20" />
</system.web>
Trong đó:
  • mode: Chỉ định cách lưu trữ Session state. "InProc" là lưu trữ trên bộ nhớ của máy chủ, "StateServer" là lưu trữ trên một máy chủ riêng biệt, "SQLServer" là lưu trữ trên cơ sở dữ liệu SQL Server, và "Custom" là lưu trữ theo cách tùy chỉnh.
  • cookieless: Chỉ định cách sử dụng cookie để lưu trữ Session ID. "true" là sử dụng URL, "false" là sử dụng cookie.
  • timeout: Chỉ định thời gian số giây cho một phiên làm việc trước khi hết hạn.
Sử dụng đối tượng Session để lưu trữ và truy cập các giá trị trong Session state. Ví dụ:
// Lưu trữ giá trị trong Session state
Session["UserName"] = "John";

// Truy cập giá trị trong Session state
string userName = (string)Session["UserName"];
Lưu ý rằng, các giá trị trong Session state chỉ tồn tại trong suốt thời gian phiên làm việc của người dùng trên ứng dụng, và sẽ bị xoá khi phiên làm việc kết thúc hoặc hết hạn.
Tuy nhiên, sử dụng Session state cũng có những hạn chế và ảnh hưởng đến hiệu suất ứng dụng. Do đó, ta nên sử dụng Session state một cách hợp lý và tránh lưu trữ quá nhiều thông tin trong Session state.

2. Tối ưu hóa hiệu suất ứng dụng web(Optimizing Web Application Performance) là gì?
Là quá trình tìm kiếm và giải quyết các vấn đề liên quan đến hiệu suất của ứng dụng web, nhằm tăng cường trải nghiệm người dùng và giảm chi phí vận hành ứng dụng. Tối ưu hóa hiệu suất ứng dụng web là một quá trình liên tục và có thể được thực hiện ở các giai đoạn khác nhau của quá trình phát triển ứng dụng, bao gồm thiết kế kiến trúc, triển khai, và chạy thử nghiệm.
Các kỹ thuật và công cụ tối ưu hóa hiệu suất ứng dụng web có thể bao gồm:
  • Tối ưu hóa mã nguồn: Đảm bảo mã nguồn được tối ưu hóa và tối đa hóa hiệu suất, bao gồm sử dụng các kỹ thuật tối ưu hóa mã, loại bỏ mã không sử dụng, và tối ưu hóa cấu trúc mã.
  • Tối ưu hóa cơ sở dữ liệu: Đảm bảo cơ sở dữ liệu được tối ưu hóa và tối đa hóa hiệu suất, bao gồm sử dụng các kỹ thuật tối ưu hóa cơ sở dữ liệu, tối ưu hóa truy vấn và chỉnh sửa cấu trúc cơ sở dữ liệu.
  • Tối ưu hóa hình ảnh và tài nguyên: Sử dụng các công cụ để tối ưu hóa kích thước hình ảnh và tài nguyên để giảm thời gian tải và tăng tốc độ trang web.
  • Tối ưu hóa định tuyến và bộ đệm: Sử dụng các kỹ thuật tối ưu hóa định tuyến và bộ đệm để giảm thời gian tải trang và tăng tốc độ trang web.
  • Sử dụng các công cụ kiểm tra hiệu suất: Sử dụng các công cụ kiểm tra hiệu suất để đo lường và phân tích hiệu suất ứng dụng web, bao gồm các công cụ như Google PageSpeed Insights và WebPageTest.
  • Sử dụng các dịch vụ CDN: Sử dụng các dịch vụ CDN (Content Delivery Network) để tăng tốc độ trang web và giảm thời gian tải.
Tối ưu hóa hiệu suất ứng dụng web là quá trình quan trọng để đảm bảo trải nghiệm người dùng tốt nhất và giảm chi phí vận hành ứng dụng. Tuy nhiên, cũng cần lưu ý rằng tối ưu hóa hiệu suất không phải là mục tiêu cuối cùng của một ứng dụng web, mà cần đảm bảo tính bảo mật, tính ổn định và tính tin cậy của ứng dụng.

3. Kỹ thuật caching, bundling và minification là gì
  • Caching (Bộ nhớ đệm):
Caching là kỹ thuật lưu trữ tạm thời dữ liệu được truy cập thường xuyên từ máy chủ trên trình duyệt của người dùng. Nếu người dùng truy cập lại cùng một trang web, trình duyệt sẽ sử dụng dữ liệu được lưu trữ trong bộ nhớ đệm thay vì phải tải lại từ máy chủ. Điều này giúp giảm thời gian tải trang và tăng tốc độ trang web. Caching có thể được thực hiện trên máy chủ hoặc trên trình duyệt, hoặc cả hai.
  • Bundling (Gói hóa):
Bundling là kỹ thuật tập hợp các tài nguyên (file CSS, JavaScript, hình ảnh) thành một tài nguyên duy nhất để giảm số lượng yêu cầu tải trang và giảm thời gian tải. Bằng cách sử dụng bundling, các tài nguyên có thể được tải cùng một lúc, giảm thời gian chờ đợi cho các yêu cầu tải trang.
  • Minification (Tối tiểu hóa):
Minification là kỹ thuật loại bỏ các ký tự không cần thiết (dấu cách, dòng mới, khoảng trắng) và nén mã nguồn (CSS, JavaScript) để giảm kích thước tệp. Khi các tệp được tối tiểu hóa, chúng sẽ tải nhanh hơn và giảm băng thông mạng. Điều này giúp giảm thời gian tải trang và tăng tốc độ trang web.

Các kỹ thuật này có thể được sử dụng độc lập hoặc kết hợp để tăng hiệu suất và tốc độ của ứng dụng web. Tuy nhiên, cần phải lưu ý rằng khi sử dụng các kỹ thuật này, cần đảm bảo tính đúng đắn và tính ổn định của ứng dụng web.

3.1. Output Caching
Là kỹ thuật caching mà nó lưu trữ tạm thời các kết quả của một hoạt động hoặc một trang web cụ thể, như là một kết quả của một hành động hoặc một yêu cầu truy cập trang web. Các kết quả được lưu trữ trong bộ nhớ đệm để tránh việc tính toán lại hoặc truy cập lại cơ sở dữ liệu hoặc các tài nguyên khác của máy chủ. Kỹ thuật này giúp giảm thời gian phản hồi của trang web và tăng tốc độ trang web.

Có hai loại Output Caching trong ASP.NET MVC: Output Caching tại cấp hành động (Action-level Output Caching) và Output Caching tại cấp trang (Page-level Output Caching).

  • Output Caching tại cấp hành động (Action-level Output Caching):
Output Caching tại cấp hành động cho phép lưu trữ tạm thời kết quả của một hành động hoặc một phương thức trong một khoảng thời gian xác định. Output Caching tại cấp hành động có thể được cấu hình để lưu trữ tạm thời kết quả trả về của một hành động dựa trên các tham số đầu vào của nó (nếu có), hoặc trên các điều kiện khác nhau như ngôn ngữ của người dùng, kiểu trình duyệt và các yêu cầu HTTP khác.
Giả sử bạn có một trang web hiển thị danh sách sản phẩm và bạn muốn cải thiện hiệu suất của trang web bằng cách sử dụng Output Caching. Bạn có thể sử dụng Output Caching tại cấp hành động để lưu trữ tạm thời các kết quả trả về của hành động hiển thị danh sách sản phẩm.
Để cấu hình Output Caching tại cấp hành động, bạn có thể sử dụng thuộc tính OutputCache của hành động trong Controller. Ví dụ:
[OutputCache(Duration = 3600, VaryByParam = "none")]
public ActionResult ProductsList()
{
    // Lấy danh sách sản phẩm từ cơ sở dữ liệu
    var products = db.Products.ToList();
    return View(products); // hiển thị danh sách sản phẩm
}
Trong ví dụ trên, thuộc tính OutputCache được cấu hình để lưu trữ tạm thời kết quả trả về của hành động "ProductsList" trong 1 giờ (3600 giây). Ngoài ra, "VaryByParam" được cấu hình để không phụ thuộc vào bất kỳ tham số nào của hành động.
Khi một người dùng truy cập trang web để xem danh sách sản phẩm, ASP.NET MVC sẽ lưu trữ tạm thời kết quả trả về của hành động trong bộ nhớ đệm. Nếu một người dùng khác truy cập trang web để xem danh sách sản phẩm trong vòng 1 giờ sau đó, ASP.NET MVC sẽ trả về kết quả đã lưu trữ trong bộ nhớ đệm thay vì phải truy vấn cơ sở dữ liệu và tính toán lại kết quả.
Tuy nhiên, cần lưu ý rằng nếu có bất kỳ sự thay đổi nào trong danh sách sản phẩm, Output Caching sẽ không cập nhật kết quả mới và vẫn trả về kết quả đã lưu trữ trước đó. Do đó, Output Caching cần được sử dụng thận trọng để đảm bảo tính toàn vẹn của dữ liệu và sự cập nhật của dữ liệu mới nhất.
  • Output Caching tại cấp trang (Page-level Output Caching):
Output Caching tại cấp trang cho phép lưu trữ tạm thời toàn bộ trang web hoặc một phần của trang web, chẳng hạn như một khu vực hoặc một phần của trang web. Output Caching tại cấp trang có thể được cấu hình để lưu trữ tạm thời các trang web dựa trên các điều kiện như các tham số truy vấn, ngôn ngữ của người dùng, kiểu trình duyệt và các yêu cầu HTTP khác.
Khi cấu hình đúng, Output Caching có thể là một kỹ thuật tuyệt vời để cải thiện hiệu suất của ứng dụng web của bạn. Tuy nhiên, cần lưu ý rằng việc sử dụng Output Caching có thể gây ra các vấn đề về tính toàn vẹn của dữ liệu hoặc sự cập nhật của dữ liệu mới nhất. Do đó, cần cân nhắc kỹ trước khi sử dụng kỹ thuật này.

3.2. Data Caching
Là một kỹ thuật caching được sử dụng để lưu trữ tạm thời dữ liệu trong bộ nhớ để tránh truy xuất dữ liệu từ nguồn gốc của nó. Khi một yêu cầu được gửi đến trang web, ứng dụng sẽ truy cập bộ nhớ cache trước để xem liệu dữ liệu đã được lưu trữ trong đó hay không. Nếu có, ứng dụng sẽ sử dụng dữ liệu từ bộ nhớ cache thay vì truy cập nguồn dữ liệu gốc để giảm thời gian truy xuất dữ liệu và tối ưu hóa hiệu suất của ứng dụng.
Data Caching trong ASP.NET MVC có thể được sử dụng để lưu trữ dữ liệu tạm thời trong nhiều trường hợp khác nhau, ví dụ như lưu trữ kết quả của các truy vấn cơ sở dữ liệu phức tạp, lưu trữ các tài nguyên tập tin trên đĩa, lưu trữ các kết quả tính toán và xử lý, và lưu trữ các thông tin phiên như thông tin đăng nhập của người dùng.
Trong ASP.NET MVC, Data Caching có thể được thực hiện bằng cách sử dụng các đối tượng đặc biệt như HttpContext.Cache hoặc MemoryCache. Các đối tượng này cho phép lưu trữ dữ liệu trong bộ nhớ cache và cung cấp các phương thức để thêm, xóa hoặc truy xuất dữ liệu từ bộ nhớ cache.
Tuy nhiên, việc sử dụng Data Caching cần được cân nhắc kỹ, vì nó có thể dẫn đến việc sử dụng bộ nhớ quá nhiều hoặc lưu trữ dữ liệu không chính xác nếu không được cập nhật đúng cách. Do đó, cần có một chiến lược khai thác Data Caching hợp lý để đảm bảo tính toàn vẹn của dữ liệu và hiệu suất của ứng dụng.
Ví dụ cụ thể về việc sử dụng Data Caching trong ASP.NET MVC là lưu trữ kết quả của một truy vấn cơ sở dữ liệu phức tạp để tối ưu hóa hiệu suất của ứng dụng.
Giả sử bạn có một trang web ASP.NET MVC hiển thị danh sách sản phẩm từ cơ sở dữ liệu. Truy vấn cơ sở dữ liệu để lấy danh sách sản phẩm này có thể phức tạp và mất nhiều thời gian để thực hiện. Tuy nhiên, danh sách sản phẩm có thể không thay đổi thường xuyên và có thể được lưu trữ tạm thời trong bộ nhớ cache để giảm thời gian truy xuất dữ liệu.
Bạn có thể sử dụng HttpContext.Cache để lưu trữ danh sách sản phẩm trong bộ nhớ cache. Khi một yêu cầu được gửi đến trang web, ứng dụng sẽ kiểm tra xem danh sách sản phẩm đã được lưu trữ trong bộ nhớ cache hay chưa. Nếu có, ứng dụng sẽ sử dụng danh sách sản phẩm từ bộ nhớ cache thay vì truy xuất cơ sở dữ liệu.
Dưới đây là mã ví dụ để lưu trữ danh sách sản phẩm trong bộ nhớ cache:
public ActionResult Index()
{
    var cacheKey = "productList";
    var cacheItem = HttpContext.Cache[cacheKey] as List<Product>;

    if (cacheItem == null)
    {
        // Nếu danh sách sản phẩm chưa được lưu trữ trong bộ nhớ cache, 
        // thực hiện truy vấn cơ sở dữ liệu để lấy danh sách sản phẩm
        var productList = _productRepository.GetProducts();

        // Lưu trữ danh sách sản phẩm trong bộ nhớ cache trong 30 phút
        HttpContext.Cache.Insert(cacheKey, productList, null, DateTime.Now.AddMinutes(30), TimeSpan.Zero);

        return View(productList);
    }
    else
    {
        // Nếu danh sách sản phẩm đã được lưu trữ trong bộ nhớ cache, 
        // sử dụng danh sách sản phẩm từ bộ nhớ cache để hiển thị trang web
        return View(cacheItem);
    }
}
Trong ví dụ này, HttpContext.Cache được sử dụng để lưu trữ danh sách sản phẩm trong bộ nhớ cache. Nếu danh sách sản phẩm đã được lưu trữ trong bộ nhớ cache, ứng dụng sẽ sử dụng danh sách sản phẩm từ bộ nhớ cache để hiển thị trang web. Nếu danh sách sản phẩm chưa được lưu trữ trong bộ nhớ cache, ứng dụng sẽ thực hiện truy vấn cơ sở dữ liệu để lấy danh sách sản phẩm và sau đó lưu trữ danh sách sản phẩm trong bộ nhớ cache trong 30 phút để sử dụng cho các yêu cầu sau này.

3.3. Bundling
Bundling là một kỹ thuật được sử dụng trong ASP.NET MVC để tối ưu hóa tải trang web bằng cách gộp các tệp tài nguyên (CSS, JavaScript) thành một tệp duy nhất. Khi tải trang web, tệp duy nhất này được tải xuống thay vì tải từng tệp tài nguyên riêng lẻ, giảm thời gian tải trang và tăng hiệu suất của trang web.
Để sử dụng Bundling trong ASP.NET MVC, bạn cần thực hiện các bước sau:
  • Bước 1: Cấu hình Bundling
Bạn cần cấu hình Bundling trong tệp App_Start\BundleConfig.cs của ứng dụng. Trong tệp này, bạn có thể định nghĩa các bundle tài nguyên bằng cách sử dụng đối tượng Bundle và phương thức Add. Ví dụ:

bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
            "~/Scripts/jquery-{version}.js"));
Trong ví dụ này, một bundle JavaScript được định nghĩa với tên là "~/bundles/jquery" và chứa tệp jquery-{version}.js.
  • Bước 2: Sử dụng Bundle trong tệp Layout
Sau khi đã định nghĩa các bundle tài nguyên, bạn có thể sử dụng chúng trong tệp Layout của ứng dụng. Ví dụ:
@Scripts.Render("~/bundles/jquery")
Trong ví dụ này, tệp jquery-{version}.js được gọi thông qua bundle có tên là "~/bundles/jquery".
  • Bước 3: Kích hoạt Bundling
Để kích hoạt Bundling trong ứng dụng, bạn cần thêm đoạn mã sau vào tệp Global.asax.cs:
BundleTable.EnableOptimizations = true;
Đoạn mã này sẽ kích hoạt chế độ tối ưu hóa cho Bundling, giúp gộp các tệp tài nguyên thành một tệp duy nhất và tải nhanh hơn.
Bundling cũng hỗ trợ các tính năng như Minification (tối ưu hóa mã) và Conditional bundling (gộp các tệp tài nguyên dựa trên điều kiện). Sử dụng Bundling là một cách tuyệt vời để tối ưu hóa hiệu suất của trang web ASP.NET MVC của bạn.

3.4. Minification
Minification là một kỹ thuật được sử dụng trong ASP.NET MVC để tối ưu hóa kích thước của các tệp tài nguyên (CSS, JavaScript) bằng cách loại bỏ các khoảng trống, dấu tab và các ký tự không cần thiết khác khỏi mã nguồn của tệp. Khi tải trang web, tệp tài nguyên được tải xuống với kích thước nhỏ hơn, giảm thời gian tải trang và tăng hiệu suất của trang web.
Để sử dụng Minification trong ASP.NET MVC, bạn cần thực hiện các bước sau:
  • Bước 1: Cấu hình Minification
Bạn cần cấu hình Minification trong tệp App_Start\BundleConfig.cs của ứng dụng. Trong tệp này, bạn có thể định nghĩa các bundle tài nguyên bằng cách sử dụng đối tượng Bundle và phương thức Include. Ví dụ:
bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
            "~/Scripts/jquery-{version}.js"));
Trong ví dụ này, một bundle JavaScript được định nghĩa với tên là "~/bundles/jquery" và chứa tệp jquery-{version}.js.
  • Bước 2: Kích hoạt Minification
Để kích hoạt Minification cho các tệp tài nguyên được định nghĩa trong các bundle, bạn cần thêm đoạn mã sau vào tệp App_Start\BundleConfig.cs:
BundleTable.EnableOptimizations = true;
Đoạn mã này sẽ kích hoạt chế độ tối ưu hóa cho các tệp tài nguyên trong các bundle, giúp loại bỏ khoảng trống và các ký tự không cần thiết khỏi mã nguồn của tệp.

Minification là một cách tuyệt vời để tối ưu hóa hiệu suất của trang web ASP.NET MVC của bạn. Tuy nhiên, bạn nên kiểm tra kỹ trước khi sử dụng Minification vì nó có thể ảnh hưởng đến mã nguồn và chức năng của tệp tài nguyên nếu không được sử dụng đúng cách.

Nguồn bài viết: DOTNET.VN

BÌNH LUẬN BÀI VIẾT

Bài viết mới nhất

LIKE BOX

Bài viết được xem nhiều nhất

HỌC HTML