2010-07-13 33 views
8

Có rất nhiều hype về ASP.NET MVC những ngày này, nhưng sự thật là ASP.NET webforms sẽ không đi bất cứ nơi nào trong một thời gian. Có cách nào cho các nhà phát triển hiện tại để tối ưu hóa ASP.NET webforms để thực hiện nhanh như ASP.NET MVC?Có thể tối ưu hóa ASP.NET WebForms để thực hiện nhanh như ASP.NET MVC không?

Tôi đã nhận thấy sự khác biệt đáng kể về tốc độ giữa ASP.NET MVC và ASP.NET webforms. MVC là rất nhiều snappier và tải trang nhanh hơn so với webforms. Tôi có thể đạt được điều tương tự với ASP.NET webforms bằng cách tối ưu hóa nó? Nếu có, bạn sẽ đề xuất điều gì?

+1

Trích dẫn cần thiết? "khá dễ nhận biết" không phải là một dấu hiệu mạnh cần phải được tối ưu hóa. – jfar

Trả lời

6

Trong chỉ thị trang của bạn làm như sau:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" 
    Inherits="TestApp._Default" EnableViewState="false" %> 

Chủ yếu tắt ViewState sẽ tạo nên một phần lớn của sự khác biệt trong hiệu suất trang. Đồng thời, việc hạn chế việc sử dụng các điều khiển WebForm cũng sẽ làm cho HTML của bạn được phân phối nhiều hơn một chút vì chúng có khuynh hướng tạo ra HTML rất chi tiết.

Mặt khác làm như vậy là gần giống như cắt bỏ một số lợi thế lớn cho WebForms. Các điều khiển và abstracting của nhà nước bằng cách sử dụng ViewState là một số lý do chính tại sao WebForms là rất phổ biến ngày hôm nay.

Tôi vẫn phát triển rất nhiều WebForms và cũng làm MVC. Có kiến ​​thức về cả hai và điểm mạnh của họ sẽ giúp bạn tạo ra một ứng dụng biểu diễn trong cả hai khung công tác. Khi tôi tạo bất kỳ ứng dụng WebForms mới nào, điều đầu tiên tôi làm là quấn các trang trong một Panel đảm bảo tắt ViewState cho toàn bộ bảng điều khiển. Khi tôi phát triển và tôi tìm thấy một cách sử dụng cho ViewState (ví dụ: để tiết kiệm thời gian hoặc đơn giản hóa mọi thứ), tôi bật nó theo từng trường hợp, vì vậy tôi hiểu tại sao tôi sử dụng nó và đưa ra quyết định thận trọng để bổ sung chi phí cho trang của mình . Web2 có thể nhanh như MVC nếu bạn tiếp cận ứng dụng web của mình với hiệu suất trong đầu nhưng nó rất dễ làm cho nó chậm hơn nhiều nếu bạn chỉ muốn bỏ qua hiệu suất và hoàn thành ứng dụng.

5

Một lý do cho điều đó là do ViewState, trong số các mã bloated khác được hiển thị như một phần của <ASP:TextBox>, v.v. Bạn nên tập trung vào trọng lượng trang.

Mọi thứ khác bằng nhau, đó là sự khác biệt hiệu suất chính mà tôi biết.

+4

Bạn không cần phải sử dụng các điều khiển ViewState hoặc ASP.NET, chi tiết triển khai. –

+2

Có, nhưng hầu hết mọi người làm, và đó là lý do tại sao MVC có vẻ nhanh hơn, bởi vì nó thậm chí không phải là một lựa chọn. – Nate

+1

@rick - Nếu bạn không sử dụng điều khiển ASP.NET hoặc ViewState, bạn không sử dụng WebForms. OP không hỏi về MVC vs làm việc trên mức tối thiểu của ASP.NET. –

3

tôi đã nhận thấy một sự khác biệt khá nhận biết được về tốc độ

Có lẽ bạn đúng cách nên đo lường hiệu quả một cách định nghĩa đầu tiên. Sau đó, nếu bạn làm trong thực tế có một sự khác biệt nó sẽ được nhiều hơn nữa rõ ràng, nơi mà sự khác biệt đến từ và làm thế nào để cầu khác biệt hiệu suất.

1

Đây có phải là trường hợp của hai công cụ khác nhau cho hai cách tiếp cận khác nhau để giải quyết các vấn đề và cố gắng so sánh giữa chúng?

+0

a.k.a. táo để cam – msarchet

8

Công nghệ không quan trọng, cách bạn triển khai ứng dụng của mình. Người ta có thể tranh luận ViewState sẽ tạo ra sự khác biệt nhưng đó cũng là một chi tiết thực hiện. ViewState là không cần thiết và bạn cũng có thể để nó trên máy chủ. Vào cuối ngày, cả hai công nghệ này đều cung cấp HTML qua HTTP.

+4

... ở các tốc độ khác nhau. ;) –

+2

.... hiển thị cho tôi bằng chứng với cùng một đầu ra –

+2

Mỗi khung công tác giới thiệu một số chi phí đường ống dẫn (MVC phải phân tích các tuyến, v.v. trong khi WebForms phải nối dây/nghe sự kiện, điều khiển phân tích cú pháp, v.v.). Câu hỏi thực sự là, liệu có sự khác biệt có thể đo lường được giữa chi phí của hai Khung? Nếu có, sau đó không có số lượng người dùng tinh chỉnh có thể nhận được một nhanh như khác. –

3

Có một điều có thể làm cho ASP.NET chậm mà những người khác đã đề cập: Viewstate. Điều này đặc biệt đúng với các cuộc gọi ajax. Viewstate hoàn chỉnh được đăng khi sử dụng UpdatePanels.

Điều đó nói rằng có một điều này sẽ làm cho trang ASP.NET của bạn hoạt động tốt hơn trang ASP.NET MVC của bạn: Caching. ASP.NET cho phép lưu bộ nhớ đệm donut: bạn có thể định nghĩa các quy tắc lưu bộ nhớ đệm trên cơ sở WebControll. Bạn không thể làm điều này trong ASP.NET MVC.

Nếu bạn thực sự thấy mình gặp vấn đề về tốc độ, hãy thử tìm các nút cổ chai. Nó có thể là các cuộc gọi cơ sở dữ liệu (sử dụng sql-profiler để kiểm tra), nó có thể liên quan đến html (sử dụng yslow) hoặc nó có thể là ứng dụng liên quan (thử một profiler như một từ redgate).

+0

Bạn có thể lưu trữ ở cấp độ xem một phần trong MVC và không có gì ngăn bạn viết bộ nhớ cache của riêng bạn ở các cấp khác của khung công tác. +1 để đề cập đến các cuộc gọi cơ sở dữ liệu dưới dạng nút cổ chai hiệu suất. – Ryan

+0

Tôi không thấy cách bạn có thể lưu vào bộ nhớ cache ở mức một phần. Kiểm tra http://haacked.com/archive/2008/11/05/donut-caching-in-asp.net-mvc.aspx Nhưng offcourse bạn có thể (và nên) bộ nhớ cache cuộc gọi đến cơ sở dữ liệu. –

Các vấn đề liên quan