Một số Tips đơn giản cải thiện performance cho Asp.net webform

1/ Đo lường perfomance

Việc đầu tiên khi phát triển một ứng dụng. điều cần quan tâm là performance. Vậy làm sao để phát hiện được vấn đề nằm ở đâu. Đơn giản chỉ cần đo lường mọi thứ. Từ việc chịu tải của server, loading css, js file... cho đến time cost execute của sql queries. Vấn đề là làm sao để detect. Có 1 số công cụ sẽ hổ trợ bạn trong việc này điển hình như là Prefix, Profiling.

2/ Nén lại nội dung

Giao thức HTTP sẽ không nén lại một số nội dung trước khi trả về clients. Nội dung HTML, CSS và javascript sẽ được trả về ở dạng text. Chúng ta có thể enable http Compression để giải quyết vấn đề này bằng cách sử dụng gzip để nén nội dung.

3/ Giảm lượng request http

Như chúng ta đã biết. Client chỉ cho phép gửi một số request cùng 1 lúc đến server. Việc request từ clients đến server để loading quá nhiều file sẽ dẫn đến tình trạng low perfomance loading. Phụ thuộc vào loại resource sẽ request đến servers. Chúng ta sẽ có nhiều các để cắt giảm lượng request. Về Javascript, Css chúng ta có thể minification và bundle. Các tools hỗ trợ việc này khá tốt như webpack, gulp hoặc có thể là grunt. Về các file hình ảnh thì gộp nhiều file ảnh vào cùng 1 file. Ở đây có thể áp dụng CSS Spriting.

4/ Loading Css trước

Khi lập trình 1 website ASP.NET hãy đặt tất cả các file CSS lên đầu site,bên trong head section. Giải thích vấn đề này chúng ta có thể tóm gọn như sau. Khi browser loading 1 website thì nó sẽ render tất cả mọi thứ mà nó có. Nếu không đặt css lên trên cùng thứ mà chúng ta thấy đôi lúc chỉ là 1 trang html mà css chưa được apply.

5/ Loading Js sau cùng

Khi render page. Nếu gặp Javascript, client ngay lập tức stop việc render các DOM để render các file js này. Nếu các file js này thực sự chưa cần thiết loading ngay từ đầu thì hãy đặt dưới cùng.

6/ Shrink Images

Đối với các file hình ảnh hãy resize smaller nhất có thể mà vẫn giữ được độ phân giải tốt 1 số tool có thể làm tốt việc này như https://tinypng.com/.

7/ Kiểm tra câu queries tới database

Thông thường khi lập trình với ASP.NET để communicaton đến database chúng ta sẽ xử dụng đến ADO.NET hoặc là EF Hãy cân nhắc đến việc sử dụng 2 loại này. Về perfomance ADO.NET đem lại perfomance tốt hơn. và việc turning sql khi sử dụng ADO.NET cũng dễ dàng hơn. 1 số tool có thể kiểm tra queries đến database. Prefix là 1 trong số làm khác tốt. Nó sẽ phân tích 1 số vấn đề gặp phải cũng như cách fix. Một số các vấn đề thường gặp khi application thao tác đến DB điển hình nhất là n+1 queries. Việc này dẫn đến việc tiêu tốn rất nhiều tài nguyên của DB Server.

8/ Deploy website ở Mode Release

Khi bạn deploy ở dạng Debud sẽ tạo ra các file holds debugging (PDBs). Còn realease sẽ không

9/ Disable view State trên page nếu có thể

Việc quản lý quá nhiều viewstate trên page sẽ tăng lượng tương tác giữa client và servers và làm chậm đáng kể khí load page.

10/ Sử dụng Page.ISPostBack

Sử dụng Page.ISPostBack để đảm bảo rằng bạn chỉ thực hiện logic khởi tạo trang khi một trang được tải lần đầu tiên.

11/ Sử dụng Ajax thay vì xử lý ở code behind

Như đã biết Asp.net Webform là 1 nền tảng hướng sự kiện. Có nghĩa là nó sẽ quản lý tất cả control thông qua server 'run at server' bằng các ViewState. Hãy thử tưởng tượng rằng khi xử lý bất cứ sự kiện nào tất cả các page đó đều được load lại cộng thêm việc pushing tất cả các ViewState này. Hãy cân nhắc sử dụng Ajax cho các sự kiện có thể.

12/ Caching page

Có nhiều loại cache. Ở đây mình sẽ giới thiệu 2 loại: Output cache và Redis. Redis thì mạnh mẽ hơn hỗ trợ remote server. Các bạn có thể tìm hiểu hơn ở đây: https://redis.io/clients#c.

13/ Giảm thiểu lượng control run at server

Việc giao tiếp giữa các control ở phía client site và server trong asp.net được thực hiện bằng runat= "server" Việc này sẽ tạo ra các hidden viewstate để communication giữa client và server Giảm thiểu các control này nếu không cần thiết.

14/ Sử dụng CDN

Với hệ thống máy chủ CDN phân phối khắp thế giới. Thay vì phải load resource từ host của bạn. CDN cung cấp tính năng xác định vị trí người dùng để gửi phản hồi từ máy chủ gần người dùng đó nhất, giúp giảm thời gian chờ đợi của người dùng. Mặt khác việc này giảm tải cho server 1 cách đáng kể.