Tăng tốc độ và hiệu suất web ASP.NET_Tổng hợp lý thuyết

Endy Hoàng
Đăng bởi
Endy Hoàng
  9,681
Tốc độ là một yếu tố rất quan trọng trong thiết kế website. Website được thiết kế bằng Asp.net thường có tốc độ chậm nhất là những ứng dụng cồng kềnh, bài viết sau IT Express giới thiệu tới bạn những vấn đề để tối ưu được tốc độ tải website

Tốc độ là một yếu tố rất quan trọng trong thiết kế website. Website được thiết kế bằng Asp.net thường có tốc độ chậm nhất là những ứng dụng cồng kềnh, bài viết sau IT Express giới thiệu tới bạn những vấn đề để tối ưu được tốc độ tải website

Hiệu năng ứng dụng phụ thuộc vào rất nhiều yếu tố.Lý thuyết 1_Tăng tốc độ và hiệu suất web ASP.NET

Nhiều bạn cho rằng web aspnet có tốc độ xử lý dữ liệu chậm hơn so với web làm bằng các công nghệ khác như php hay jsp nhưng thực tế không phải hoàn toàn như vậy. Nếu biết cách tối ưu code bạn sẽ thấy điều đó là không chính xác. Mình xin giới thiệu cho các bạn tổng hợp các cách cải thiện tốc độ và hiệu suất cho web aspnet. Đây là những thủ thuật mình học được và tổng hợp từ một số tài liệu và diễn đàn trên mạng.


1. Luôn sử dụng thuộc tính Page.IsValid. Nếu một trang mà bạn sử dụng các input control và cần phải validate các control này, bạn hãy ghi nhớ luôn sử dụng Page.IsValid trước khi cho run 1 đoạn code nào đó liên quan đến dữ liệu trên form như vậy sẽ không phải mất thời gian check lỗi validate tại server.


2. Nên sử dụng các validation controls như RequiredFieldValidator, RegularFieldValidator,... cho các input control. Sử dụng các control này sẽ tiện hơn so với dùng code javascript và có thể truy cập được dữ liệu ở phía server. Nhưng nó vẫn chậm hơn so với việc sử dụng code javascript.


3. Validate form bằng javascript. Cách này khá giống cách trên nhưng chúng ta sẽ sử dụng validate input control bằng javascript( tức là tiến hành kiểm tra ngay trên máy client). Cách này bạn phải bỏ chút công sức ra code. Hiện nay cũng có 1 số plugin jquery hỗ trợ validate form phổ biến nhất đó là plugin validation. Nhưng nó sẽ không hỗ trợ được hết các trường hợp kiểm tra trên form.


4. Sử dụng thuộc tính IsPostBack. Đây là một thuộc tính giúp bạn giảm việc truy xuất và xử lí dữ liệu trên form. Nó sẽ giúp bạn đảm bảo rằng dữ liệu chỉ cần load 1 lần.


5.Chỉ sử dụng ViewState khi cần thiết. ViewState là một điểm mạnh của ASP.NET nhưng mặt khác nó cũng là điểm yếu của nó. ViewState giúp bạn lưu giữ lại trạng thái cũng như dữ liệu trên form nhưng chính vì vậy mà nó sẽ làm chậm tốc độ web lại và tăng thêm dung lượng cho trang được load. Hãy sử dụng thuộc tính EnableViewState="false" khi bạn muốn không sử dụng nó.


6. Xóa bỏ những namespace không cần thiết. Để sử dụng những class cần thiết cho việc code bạn thường khai báo sử dụng bằng từ khóa using. Nhưng khi bạn thay đổi code thì thường không để ý đến việc xóa những câu khai báo thừa đó đi.


7. Chỉ khai báo biến khi cần dùng đến. Nhiều bạn khi lập trình thường khai báo một số các biến để sử dụng nhưng sau một lúc loay hoay lại không sử dụng đến. Như vậy sẽ rất lãng phí bộ nhớ.


8. Sử dụng caching. Việc caching sẽ giúp bạn lưu trữ lại dữ liệu đã được request và sử dụng nó cho lần hiển thị sau thay vì phải request đến server lần nữa để lấy lại cùng dữ liệu này.


9. Buffering Data. Việc truyền tải dữ liệu từ server đến client là rất quan trọng. Việc buffering data là một trong những khâu trong quy trình đó. Bạn có thể sử dụng nó nếu bạn muốn qua thuộc tính Response.Buffer= true -> tiến hành lấy hết dữ liệu và gửi 1 lần, Response.Buffer=false -> lấy được bao nhiêu gửi bấy nhiêu.


10. Hạn chế việc ép kiểu không cần thiết. Khi dữ liệu đã ở loại bạn cần thì việc ép kiểu nó về dạng đó là không cần thiết.

 

11. Sử dụng connection pooling. Khi bạn request data từ server bạn cần phải thiết lập 1 kết nối đến server và điều này sẽ tiêu hao khá nhiều tài nguyên của server. Và điều gì sẽ xảy ra nếu bạn phải request nhiều lần đến server để lấy dữ liệu? Sẽ rất tốn tài nguyên nếu chúng ta làm như vậy. Vì thế connection pooling đã được tạo ra để sử dụng lại những kết nối đã được thiết lập.


12. Luôn nhớ đóng các kết nối server và truy vấn dữ liệu. Đây là điều cực kì quan trọng nếu bạn không muốn web bị crash liên tục vì bị quá tải. Hãy dùng connection.Close() hoặc SqlDataAdapter.Dispose() hoặc các câu lệnh tương tự để ngắt kết nối và truy vấn khi đã thực thi xong.


13. Tối ưu những câu truy vấn. Để lấy được dữ liệu thì điều cần thiết là phải có câu truy vấn. Nhưng truy vấn như thế nào để tránh gây nghẽn database server và tốn tài nguyên. Hãy luôn nhớ chỉ select những gì chúng ta cần. Mọi người thường có thói quen truy vấn tất cả từ bảng hoặc view mà không bao giờ dùng đến một số trường trong đó.


14. Sử dụng thủ tục(Stored Procedure). Stored procedure giúp chúng ta tăng tính bảo mật và tránh bị tấn công kiểu sql injection. Nhưng ngoài ra nếu chúng ta sử dụng nó sẽ giúp tăng tốc thực thi các câu lệnh so với việc dùng câu truy vấn bình thường.


15. Khi nào sử dụng SqlDataReader và SqlDataAdapter. Nhiều người trong chúng ta thường sử dụng 2 lớp này để truy vấn dữ liệu và nghĩ rằng chúng giống nhau nhưng không. Nhìn bề ngoài thì có vẻ chúng khá giống nhau về cách thức hoạt động nhưng SqlDataReader là class được xây dựng để cho việc truy vấn dữ liệu và fill vào DataSet hoặc DataTable. Nó nhanh hơn SqlDataAdapter. Còn SqDatalAdapter dùng để thực thi các câu lệnh updating database sẽ tốt hơn vì nó cho phép bạn đóng kết nối khi bạn muốn hoặc thậm chí là có thể tự động đóng kết nối, nó lưu kết quả vào bộ nhớ và bạn có thể lặp qua các bản ghi bao nhiêu lần tùy ý nhưng cái giá phải trả là bạn sẽ tốn khá nhiều bộ nhớ.


16. Đánh index cho các câu truy vấn được sử dụng trong truy vấn có Where,Order By, Distinct, Group By,...


17. Sử dụng một tập lệnh trong truy vấn. Nếu trong câu truy vấn của bạn có khá nhiều lệnh hãy ghi nhớ sử dụng tập lệnh(batch) với từ khóa go.


18. Sử dụng index trên các khóa ngoại.  Nó sẽ giúp bạn tăng tốc truy vấn cho các câu lệnh.


19.Sử dụng SETNOCOUNT trong câu lệnh sql. Khi bạn thực thi 1 câu lệnh nó luôn hiển thì 1 dòng là X row(s) affected. Để tắt cái này đi bạn hãy dùng SETNOCOUNT. Tuy không giảm được nhiều tài nguyên server nhưng nếu bạn select hoặc update khoảng vài nghìn bản ghi cho đến hàng chục nghìn bản ghi thì nó sẽ giúp bạn khá đáng kể trong việc tiết kiệm tài nguyên.


20. Tránh dùng view lồng nhau. View khá thuận tiện cho việc tạo ra 1 khung nhìn trên nhiều bảng kết hợp với nhau nhưng truy vấn từ view vẫn khá chậm vì thế nếu bạn sử dụng view lồng nhau thì sẽ còn chậm hơn nữa tuy việc này SQL không cấm nhưng bạn không nên sử dụng quá nhiều.

 

21. Sử dụng StringBuilding. Lớp String được tạo ra để thao tác với chuỗi nhưng đối với những chuỗi có độ dài lớn thì StringBuilding sẽ thuận tiện hơn. Nó được tạo ra với rất nhiều những phương thức cho phép bạn thao tác và tăng tốc độ xử lí chuỗi lớn.


22. Giảm tối thiểu số request lúc load trang. Số request được sinh ra trong lúc load trang ảnh hưởng rất lớn đến tốc độ load trang vì thế bạn nên giảm những request không cần thiết như gọi đến 1 file script nào đó mà không dùng hay 1 file css nào đó.


23. Gộp chung các jquery hoặc javascript lại. Việc chia nhỏ các script sẽ giúp bạn quản lí code tốt hơn nhưng nếu chỉ có 1 vài đoạn code nhỏ mà bạn cũng chia file thì là điều không nên. Bạn hãy gộp tất cả các file script lại với nhau nếu có thể còn những file riêng biệt như file script của plugin hay 1 script được code riêng cho một module nào đó.


24. Đặt các file script ở cuối trang. Đặt script ở cuối trang sẽ giúp bạn tăng tốc độ load của trang.


25. Tối ưu hóa css. Tối ưu hóa css vừa giúp bạn quản lí code dễ dàng, seo, và ngoài ra nó còn giúp bạn tăng tốc cho web. Bạn có thể xem thêm bài viết seo-phan-1.html">tối ưu hóa css cho SEO để tìm hiểu thêm. Bạn luôn nhớ đặt CSS ở đầu trang trong phần head.


26.Sử dụng công nghệ Ajax. Đây có thể nói là một công nghệ giúp bạn cải thiện tốc độ web tốt nhất. Với việc chia nhỏ những phần của web ra và bạn chỉ cần load lại những phần cần xử lí mà không phải load lại toàn bộ trang. Với sự linh hoạt này tốc độ web được cải thiện đáng kể. Google chính là trang sử dụng thành công nhất công nghệ Ajax.


27. Hãy đặt các file tài nguyên trên cùng server. Việc đặt các file tài nguyên như ảnh, video, flash, script, css... thì sẽ giúp việc request tốt hơn. Nếu bạn sử dụng 1 file trên một server khác thì nên đảm bảo server đó ổn định.


28. Nén tài nguyên. Các file ảnh chất lượng tốt thì thường có dung lượng lớn vì vậy giảm dung lượng mà vẫn giữ được chất lượng ảnh là rất tốt. Bạn có thể dùng phần mềm Advanced JPEG Compressor. Nén CSS và javacript sẽ giúp bạn Bạn có thể nén css tại đây và javacript tại đây.


29. Tránh sử dụng các aspnet control và html control lồng quá sâu vào nhau. Việc lồng control và các thẻ quá sâu vào nhau sẽ khiến việc xử lý và render html page lâu.


30. Xóa các thành phần thừa trên web. Trong trang của bạn thường thừa khá nhiều các thẻ và control thừa bạn hãy xóa nó đi như space, thẻ br thừa, thẻ div hoặc table thừa....

 

31. Nên sử dụng HttpServerUtility.Transfer(). Phương thức này không liên quan đến việc chuyển hướng trang web(redirection). Thay vì việc gửi một redirect message quay trở lại trình duyệt(browser), ASP.NET chỉ đơn giản là bắt đầu một trang mới. Nên sẽ tiết kiệm được thời gian load.


32. Nên hạn chế việc dùng nhiều biến Session. Session dùng để lưu trữ thông tin của người dùng hoặc phiên làm việc hiện tại. Nó giúp bạn trong việc kiểm tra và lấy thông tin từ người dùng đó. Nhưng nếu lượng truy cập hiện tại của web lớn thì các bộ nhớ dành cho việc lưu trữ thông tin trong session sẽ lớn và dễ gây nghẽn mạng hoặc request time out. Và để lấy được thông tin từ biến session bạn phải convert hoặc tuần tự hóa dữ liệu(serialization) trong các collection được lưu trữ. Điều này sẽ làm giảm hiệu suất thực thi và tăng thời gian load của trang.


33. Vài lưu ý trong việc build ứng dụng web aspnet. Build ứng dụng trong chế độ Release Mode, luôn precompile ứng dụng trước khi chạy, hạn chế hoặc có thể bỏ không dùng chế độ Debug Mode. Với việc build ứng dụng như thế này bạn sẽ có thể kiểm tra lỗi, triển khai ứng dụng nhanh hơn, import đầy đủ các dll ...


34. Hạn chế sử dụng quá nhiều ASP.NET Server controls. Sử dụng nhiều các aspnet server controls sẽ tăng thời gian và bộ nhớ của server để sử lí các controls đó.


35. Hãy sử dụng các transaction hợp lí. Dùng các transaction sẽ giúp bạn giữ vững được tính toàn vẹn của dữ liệu tiết kiệm được thời gian nếu có 1 transaction 1 tập hợp các transaction bị hỏng nó sẽ hủy toàn bộ những transaction đó mà không cần phải thực hiện đến transaction cuối.


36. Luôn sử dụng try-catch-finally. Sử dụng khối bắt lỗi này bạn có thể giảm được các lỗi truy xuất và sử lí dữ liệu cũng như ngắt kết nối và giải phóng dữ liệu sau khi đã sử dụng xong.


37.Sử dụng thuộc tính HttpResponse.IsClientConnected. Thuộc tính này sẽ giúp bạn kiểm tra việc client vẫn còn đang giữ kết nối với server hay không trước khi server xử lí việc truy xuất hoặc thao tác dữ liệu.


38.Tối ưu hóa vòng lặp. Vòng lặp for là vòng lặp được sử dụng nhiều nhất trong các loại vòng lặp. Trong vòng lặp for có hai loại là for và foreach. Nhưng cách sử dụng 2 loại này là khác nhau. Vòng lặp for đối với các Ilist hoặc các mảng có index thì sẽ nhanh hơn foreach. Còn foreach dành cho các IEnumerable hoặc các collections không đánh index.


39. Hãy sử dụng Control.DataBind() thay vì dùng Page.DataBind(). Về lý thuyết thì 2 phương thức này đều Bind dữ liệu vào controls. Chỉ khác Control.DataBind thì sẽ bind dữ liệu và chính control đó còn Page.DataBind là bind dữ liệu vào các controls con nằm trên trang. Và việc dùng Page.DataBind cần phải khai báo rõ ràng. Như vậy với Control.DataBind bạn có thể chủ động hơn trong việc bind data.


40. Sử dung Repeater để hiển thị dữ liệu chỉ đọc. Nếu bạn chỉ hiển thị dữ liệu không thôi mà không thao tác dữ liệu thì nên sử dụng Repeater thay vì dùng Gridview hay DataList.

41. Phân trang cho dữ liệu lớn. Việc phân trang dữ liệu sẽ giúp bạn chia nhỏ các khối dữ liệu cần load mà lại giữ được layout đẹp cho form.


42. Sử dung Eval() thay cho DataBinder.Eval(). Từ ASP.NET 2.0 trở đi .NET framework đã sử dụng Eval() thay cho DataBinder.Eval() bạn nên sử dụng Eval() vì nó được được cải thiện hiệu suất so với DataBinderEval().


43. Không sử dụng Tracing và Debuging. Tracing và Debuging sẽ giúp bạn phát hiện ra những lỗi mà ứng dụng web gặp phải. Nhưng nó sẽ mất khá nhiều thời gian load. Vì bạn hãy hạn chế sử dụng chúng và chỉ sử dụng chúng khi phát triển ứng dụng còn khi triển khai ứng dụng hãy disable chúng đi.


44. Sử dụng HTTP Compression. Sử dụng HTTP compression sẽ giúp bạn giảm bớt dung lượng file. Bạn có thể tham khảo thêm về cách Compression Web ASP.NET tại đây.


45.Chỉ sử dụng giao thức SSL khi cần thiết. Giao thức SSL là giao thức giúp bạn mã hóa và bảo mật các thông tin được truyền đi giữa client và server. Nhưng việc mã hóa sẽ khá tốn tài nguyên và thời gian vì thế chỉ sử dụng trong trường hợp cần thiết như các trang đăng nhập, giao dịch, đặt hàng...


46. Cân nhắc việc dùng ListView thay vì dùng GridView. Nhiều bạn đã quen với việc dùng GridView, nhưng bên cạnh GridView còn một vài control khác cũng có tính năng tương tự. Từ ASP.NET 3.5 đã có thêm một control mới linh hoạt trong việc tùy biến layout hiển thị dữ liệu mà vẫn giữ được các tính năng mạnh giống GridView. Bạn hãy cân nhắc để sử dụng nó.


47. Tránh thực hiện những request lớn và lâu trên cùng 1 trang điều này sẽ làm trang trở lên rất chậm.


48. Xứ lí các ngoại lệ. Luôn bắt ngoại lệ tại những nơi có khả năng xảy ra, không bắt các ngoại lệ mà ta không xử lí được hoặc những ngoại lệ không thể xảy ra, hãy tránh các ngoại lệ có thể tránh được như ngoại lệ logic,..., không hiển thị các ngoại lệ cho người dùng thấy hãy dùng customError.


49. Sử dụng kỹ thuật sprite ảnh và css. Kỹ thuật này giúp bạn giảm bớt số requests bằng cách kết hợp các ảnh lại với nhau và sử dụng css để hiển thị chúng bằng cách đưa ra vị trí toạ độ của chúng


50. Lựa chọn server. Đây cũng là một yếu tố then chốt. Lựa chọn một server ổn định và băng thông hợp lí sẽ giúp web của bạn chạy ổn định và tốt hơn.

Nguồn: VaDesign

Bài viết cùng mục

Những bài viết dưới đây có thể bổ ích cho nội dung bạn vừa đọc ở trên. Hãy khám phá thêm.

Mục lục
Zalo messenger request