Bây giờ là phiên bản cuối cùng của MVC 3 đã được phát hành, tôi nghĩ rằng thông tin về các đặc tính hiệu suất của phiên bản mới nhất này sẽ rất hữu ích cho những người có trọng lượng ưu và nhược điểm của việc cập nhật 2 ứng dụng MVC của họ. Trong bài này, tôi sẽ nói về những gì bạn có thể mong đợi khi di chuyển để MVC 3. Câu trả lời ngắn gọn là những điều nên được về cùng.

Tất nhiên ngắn tuyên bố là không chính xác bởi vì câu trả lời đúng các câu hỏi hiệu suất đó là: "nó phụ thuộc". Nó phụ thuộc vào những gì ứng dụng của bạn và các tính năng mà nó được sử dụng: kết nối cơ sở dữ liệu, kinh doanh logic, bộ nhớ đệm đầu ra, người trợ giúp html, vv Tôi nói điều này bởi vì trong một thời điểm tôi sẽ trình bày một số con số và họ có thể không tương ứng với những gì bạn sẽ thấy trong ứng dụng của bạn. Nhưng họ nên cung cấp cho bạn một điểm khởi đầu tốt.

Câu trả lời chi tiết hơn là một số ứng dụng sẽ thực hiện tốt hơn trong khi những người khác sẽ thực hiện tồi tệ hơn. Đó là bởi vì như chúng ta đã thêm tính năng mới (phụ thuộc tiêm, bộ lọc được cải thiện, vv) một số thành phần của MVC 3 chậm hơn so với trong MVC 2 đơn giản chỉ vì họ đang làm công việc nhiều hơn. Đồng thời, chúng tôi đã giới thiệu tối ưu hóa hiệu suất mục tiêu cải thiện các thành phần khác. Xác định cách duy nhất bạn có thể biết được tác động trên ứng dụng của bạn là nếu bạn cẩn thận đo lường hiệu suất chính mình. Vào cuối của bài đăng này, tôi sẽ cung cấp một danh sách sơ bộ một số trong những điều đã nhận được nhanh hơn hoặc chậm hơn.

Setup
Các ứng dụng tôi sẽ sử dụng cho các bài kiểm tra là mặc định "Internet Application" dự án mẫu mà tàu với các cài đặt của MVC. Trong khi khá nhỏ, nó vẫn là một sự lựa chọn khá tốt bởi vì nó sử dụng một loạt các tính năng MVC. Điều này có nghĩa là kiểm tra các bài tập một phần lớn của khuôn khổ này mà không cần tập trung vào bất kỳ tính năng cá nhân.

Đối với thử nghiệm của tôi, tôi có các ứng dụng sau đây:

MVC 2 Aspx dự án ứng dụng Internet chống lại MVC 2 thời gian chạy
MVC 2 Aspx dự án ứng dụng Internet chống lại MVC 3 thời gian chạy
MVC 3 Aspx dự án ứng dụng Internet chống lại MVC 3 thời gian chạy
MVC 3 Razor dự án ứng dụng Internet chống lại MVC 3 thời gian chạy
Tôi sửa đổi các ứng dụng này theo những cách sau đây để đảm bảo tính thống nhất và loại bỏ tiếng ồn không cần thiết từ kết quả:

Thiết lập debug = "false" trong các tập tin Web.config gốc.
Thay đổi ứng dụng để xây dựng trong chế độ phát hành.
Thay đổi các lớp học FormsAuthenticationService và MembershipService để trở về giá trị hardcoded (Tôi không muốn để kiểm tra độ trễ kết nối cơ sở dữ liệu).
Đối với mỗi ứng dụng thực hiện các trình tự của các yêu cầu sau đây và ghi lại thông lượng (số lượng yêu cầu mỗi giây). Trình tự chạy khoảng 1 giờ trong phòng thí nghiệm thử nghiệm hiệu suất của chúng tôi (có nghĩa rằng kết quả sẽ được phân bổ đối với bất kỳ công việc hệ điều hành khác có thể xảy ra trên máy chủ).

GET / Trang chủ / Index (đến trang web)
GET / Tài khoản / Đăng nhập (click vào "đăng nhập" liên kết)
POST / Tài khoản / Logon (cố gắng để đăng nhập vào với các thông tin không hợp lệ)
GET / Tài khoản / Đăng ký (nhấp vào liên kết "đăng ký")
POST / Tài khoản / Đăng ký (nộp đơn đăng ký)
Kết quả
Ứng dụng Yêu cầu / giây (cao hơn là tốt) % Thay đổi (wrt cơ bản)
1. MVC 2 aspx trên v2 8135 (cơ bản) n / a
2. MVC 2 aspx trên v3 7987 -1,82%
3. MVC 3 aspx trên v3 7457 -8,33%
4. MVC 3 Razor trên v3 7136 -12,28%
Lưu ý: Các kết quả trên đã bị bắt giữ trên một máy chủ 12 lõi và chỉ nên được sử dụng cho các mục đích so sánh. RPS giá trị tuyệt đối trên máy tính của riêng bạn có thể de bao la khác nhau, nhưng phân bố tương đối của họ vẫn như cũ.

Ứng dụng: 1 so với 2
Như bạn có thể nhìn thấy từ so sánh các kết quả cho ứng dụng 1 và Ứng dụng 2 sự khác biệt là khá nhỏ. Trong thực tế -1,82% nằm trong biên độ lỗi. Ứng dụng 1 và Ứng dụng 2 là ứng dụng tương tự giống nhau, ngoại trừ 1. tài liệu tham khảo System.Web.Mvc.dll phiên bản 2.0 và 2. tài liệu tham khảo System.Web.Mvc.dll phiên bản 3.0 Những kết quả này là lý do tại sao chúng ta nói rằng MVC 3 là ngang hàng với các đặc điểm hiệu suất của MVC 2.

Tất nhiên theo của Scott Guthrie sẽ chỉ ra rằng với việc phát hành RC2, ông tuyên bố rằng MVC 3 là nhanh hơn so với MVC 2 . Trong khi đó là sự thật vào thời điểm đó là không chính xác nữa cho RTM. Chúng tôi đã phải lùi lại một hiệu suất khá đáng kể sửa chữa liên quan đến siêu dữ liệu mô hình bộ nhớ đệm vì nó gây ra một số lỗi chức năng (sau khi tất cả nó không có vấn đề làm thế nào nhanh chóng ứng dụng của bạn nếu nó không thực sự làm việc một cách chính xác). Tuy nhiên, chúng tôi sẽ có mà cải tiến có sẵn như là một add-on trong tương lai MVC và chúng tôi sẽ cuộn nó vào MVC 4.

Ứng dụng 2 so với 3
So sánh Ứng dụng 2 với các ứng dụng 3 cho thấy rằng 3. -6,64% chậm hơn. Tuy nhiên, trong trường hợp này runtimes đều giống nhau. Sự khác biệt là trong các mẫu dự án được sử dụng. Các mẫu dự án mà tàu với MVC 3 có chức năng kích hoạt mặc định. Đáng chú ý nhất đã xác nhận phía máy khách không phô trương được kích hoạt; MVC 2 mẫu dự án không có xác nhận phía máy khách cho phép. Thêm thời gian thực hiện kiểm tra các siêu dữ liệu mô hình và phát ra đánh dấu bổ sung và mã javascript. Tất nhiên trong khi dựng hình trang sẽ chậm hơn, kết quả xác nhận phía máy khách cho phép nên được giảm tải trên máy chủ như phần lớn các đầu vào không hợp lệ sẽ bị bắt trên máy khách do đó tránh sự cần thiết cho roundtrips không cần thiết.

Các ứng dụng 3 so với 4
So sánh các ứng dụng 3 và 4 ứng dụng sẽ được quan tâm cho những người tìm kiếm thông qua công cụ Razor xem mới. Ứng dụng 4 là -4,3% chậm hơn so với ứng dụng 3. Điều này cho thấy rằng việc sử dụng Razor có một chi phí thực hiện. Tuy nhiên, sự khác biệt đó không phải là lớn và nặng hơn bởi sự sang trọng và dễ đọc tăng lên của các công cụ xem mới. Razor cũng là một công nghệ mới và tôi chắc chắn rằng khi trưởng thành chúng tôi sẽ có thể để tối ưu hóa hơn nữa.

Các thay đổi
Vào lúc bắt đầu của bài đăng này, tôi hứa rằng tôi sẽ liệt kê các tính năng khác nhau hoặc các thành phần của MVC thay đổi trong các đặc điểm hiệu suất của chúng. Danh sách này được biên soạn từ các bài kiểm tra nội bộ của chúng tôi cũng như các bản ghi thay đổi. Nó có nghĩa là để được thực hiện như thông tin chỉ. Kết quả của bạn có thể khác nhau và phụ thuộc vào cách bạn thực sự sử dụng từng tính năng và những gì khác mà bạn đã xảy ra trong ứng dụng của bạn

Những điều đó đã nhanh hơn (không theo thứ tự cụ thể):

Biểu hiện bộ nhớ đệm (nội bộ hệ thống phụ giúp trong việc thực hiện của phương pháp chấp nhận lambdas)
URL thế hệ
Hành động tra cứu
Bộ lọc gọi
TagBuilder
Những điều mà có chậm hơn (không theo thứ tự cụ thể):

Những điều Dependency Injection điểm vào đã được tiếp xúc
Tự động tạo ra biên tập và hiển thị những người giúp đỡ
Mô hình liên kết
Tất nhiên tôi sẽ không để cho bạn biết bao nhiêu điều đã thay đổi bởi vì nó phụ thuộc ... bạn sẽ cần phải đo bản thân.