ASP.NET Core 2.0 Razor vs Angular / React / etc


101

Nhóm của tôi và tôi đã nhận được tài trợ để bắt đầu phát triển một ứng dụng web cấp Doanh nghiệp (sẽ không đi sâu vào chi tiết của nó). Ứng dụng sẽ có nhiều trang web riêng biệt nhưng hai trong số đó tập trung hơn và rất nặng - nặng như trong tương tác nhiều của người dùng, các phương thức hiển thị dữ liệu lớn, kết nối websocket, trò chuyện, v.v.

Tôi đã được giao cho Kiến trúc sư trưởng trong dự án, vì vậy tôi đang thực hiện một số nghiên cứu về các khung web mới nhất. Đối với phần cuối, chúng tôi đã thực hiện một số thử nghiệm và quyết định sử dụng nền tảng Azure SQL. Cho đến nay, tôi thích những cải tiến đã và đang được thực hiện cho ASP.NET với Core 2.0. Cụ thể là công cụ Razor, so với các phiên bản trước của ASP.NET MVC.

Tôi muốn nhận một số ý kiến ​​chuyên gia về Razor "mới" so với Angular / React và những thứ tương tự. Tôi đặc biệt quan tâm hơn đến hiệu suất. Làm thế nào để Core 2.0 Razor nắm giữ các khung kết xuất phía máy khách? Sự khác biệt có đáng kể không? Ứng dụng của chúng tôi đang nhắm mục tiêu 1.000.000 người dùng tiềm năng (khoảng 100.000 đồng thời).

Cảm ơn trước!


4
Với " new Razor ", bạn có nghĩa là các trang Razor?
Werner

36
Vậy cuối cùng bạn đã chọn cái nào và diễn biến như thế nào?
stt106 18/02/18

5
Làm thế nào bạn bắt đầu (hoặc bạn đang tham gia) với dự án này? Tôi đang ở trong một tình huống gần như giống hệt bạn bây giờ và rất thích được cập nhật!
JLo

10
Chào JLo và stt106. Xin lỗi đã mất quá nhiều thời gian để trả lời. Chúng tôi đã kết thúc với giao diện người dùng Angular và phụ trợ API ASP.NET Core, sử dụng Azure SQL. Nó đã làm việc rất tốt cho chúng tôi cho đến nay! Tôi sẽ tưởng tượng React sẽ là một sự thay thế tương tự cho Angular nếu bạn cảm thấy thoải mái hơn với nó. Tôi đã phải học Angular, một quá trình chuyển đổi rất dễ dàng, và tôi yêu nó ngay bây giờ!
TchPowDog

So sánh tốc độ của ASP.Net Core và Angular / React là lạc đề? Có thể có câu trả lời kinh điển cho nó. Còn hôm nay chúng ta có Core 2.2 và sắp tới là 3.0.
MikroDel

Câu trả lời:


73

Chúng tôi đã kết thúc với giao diện người dùng Angular và phụ trợ API ASP.NET Core, sử dụng Azure SQL. Chúng tôi đã thử nghiệm Core Razor và, mặc dù tốt hơn Razor cũ, Angular cuối cùng lại nhanh hơn nhiều đối với chúng tôi. Theo trải nghiệm người dùng, Angular (hoặc React) vượt trội hơn nhiều về hiệu suất. Các khía cạnh ràng buộc mô hình của Angular mà chúng tôi nhận thấy là một lợi thế to lớn của kết xuất phía máy chủ. Tuy nhiên, việc sử dụng Razor (hoặc kết xuất phía máy chủ nói chung) cho phép bản thân nó mang lại tính toàn vẹn tổng thể tốt hơn cho đến khi có dữ liệu và nó giúp cho việc chuyển đổi dữ liệu từ front-end sang back-end tốt hơn. Có một sự ngắt kết nối thực sự giữa khuôn khổ giao diện người dùng và một API. Tất cả dữ liệu được chuyển đến máy chủ phải được truyền vào các đối tượng đã nhập - điều này có nghĩa là bạn phải quản lý hai bộ mô hình POCO riêng biệt. Điều này có thể gây ra sự cố nếu đối tượng máy chủ và đối tượng giao diện người dùng không căn chỉnh. Hiện tại, Entity Framework Core chưa hoàn thiện lắm nên chúng tôi gặp vấn đề với việc cập nhật đối tượng, truy vấn đối tượng, bao gồm cả đối tượng con, v.v.

Nhìn chung, thiết lập này đã hoạt động tuyệt vời cho chúng tôi cho đến nay! Tôi sẽ tưởng tượng React sẽ là một sự thay thế tương tự cho Angular nếu bạn cảm thấy thoải mái hơn với nó. Tôi đã phải học Angular, một quá trình chuyển đổi rất dễ dàng, và tôi yêu nó ngay bây giờ!


5
Theo như giữ hai bộ mô hình POCO đồng bộ sau đó là một phần mở rộng thực sự hữu ích cho VS tạo ra các giao diện góc từ các mô hình MVC, hãy kiểm tra Máy đánh chữ chữ
Andy Braham

cá nhân tôi, nếu tôi phải sử dụng Angular, tôi sẽ sử dụng NoSql cho phần DB.
Venzentx

2
Tôi không thể tưởng tượng việc chọn dao cạo ASP.NET trên Angular. Trước đây ASP.NET đã đưa ra một số mã quen thuộc cho các nhà phát triển .NET, nhưng với RAZOR, đường cong học tập cao hơn khi sử dụng Angular. MVC tách logic khỏi HTML.
Đánh dấu

1
@Mark Tôi không tin điều đó. Razor Pages là hoàn hảo, cụ thể là cách chúng xử lý liên kết dữ liệu. Họ quá GOod. Nhưng ofcource cho góc kịch bản của anh ấy là hoàn toàn phù hợp.
Mosia Thabo

2
@MosiaThabo, Mark không nói về Razor Pages, anh ấy đang nói về Razor. Đó là những gì OP của tôi đề cập đến. Trong bài đăng ban đầu của tôi, tôi không đề cập đến Trang Dao cạo (hoặc bây giờ được gọi là Blazor, tôi nghĩ vậy). Tôi đã nói cụ thể về kết xuất phía máy khách và kết xuất phía máy chủ. Razor Pages là phiên bản Angular / React của Microsoft, mà tôi nghĩ họ thấy là cần thiết vì những lợi thế bạn có với Angular và React.
TchPowDog

49

Bằng cách sử dụng Angular / React với api ở phía máy chủ:

  • bạn loại bỏ quá trình tạo HTML ở phía máy chủ và bạn tiết kiệm cpu
  • api tạo ra tải trọng nhỏ (json) và Razor (html) tất nhiên sẽ có kích thước lớn hơn nhiều, tải lại toàn trang liên tục và đăng lại khứ hồi. vì vậy api và spa tiết kiệm băng thông
  • api và spa có thể có các kịch bản lập phiên bản, mở rộng và triển khai khác nhau
  • Bằng cách sử dụng api, bạn cũng có thể hỗ trợ ứng dụng di động và nếu bạn bắt đầu bằng Razor, bạn có thể cần api trong tương lai

nhưng bằng cách sử dụng Angular / React, bạn sẽ phải lo lắng về khách hàng.

  • khách hàng phải kích hoạt javascript
  • khách hàng phải có trình duyệt hiện đại
  • khách hàng phải có đủ phần cứng mạnh mẽ
  • SEO

1
Tôi hiểu sự khác biệt trong hai khuôn khổ, tôi quan tâm hơn đến hiệu suất.
TchPowDog

Cùng một đường ống dẫn tồn tại cho cả hai nhưng tôi không biết bất kỳ điểm chuẩn nào tồn tại cho các trang dao cạo. liên kết này có thể hữu ích - ASP.NET Razor Pages vs MVC: Làm thế nào để các trang dao cạo phù hợp trong hộp công cụ của bạn?
Mohsen Esmailpour

1
Razor hỗ trợ di động, những nhược điểm không thực sự quan trọng đã được liệt kê. Cả hai đều nhanh theo cách riêng của họ. Tôi thích Angular hơn, nhưng cả hai đều được tối ưu hóa. Razor tối ưu hóa mã bằng cách không sử dụng một cây như MVC. Angular là phía máy khách nên nó không thực sự sử dụng cây mà còn tối ưu hóa dữ liệu trong HTML ở một mức độ nào đó.
Nick Turner

@NickTurner Tôi hiểu nó không chỉ là xem trang web trên điện thoại thông minh của bạn mà là một ứng dụng hoàn chỉnh của riêng bạn. Ví dụ: một ứng dụng Android, có thể lấy dữ liệu từ API máy chủ không thay đổi, trong khi mặt khác sử dụng chức năng mà Android cung cấp - hỗ trợ hoạt ảnh tốt hơn, thông báo, tin nhắn bánh mì nướng, v.v.
Raphael Schmitz

23

Tôi không có điểm chuẩn. Tuy nhiên, tôi có một số dự án chạy JQuery, Razor, .NET MVC (C #), AJAX. Không phải quy mô bạn đang giải quyết.

Lời khuyên .. Hãy đảm bảo suy nghĩ thấu đáo và tuân theo các phương pháp hay nhất. Để duy trì mọi thứ, hãy chắc chắn chia bộ điều khiển, khung nhìn, mô hình thành các nhóm nhỏ hơn và có ý nghĩa. Khi tôi bắt đầu, tôi đã mắc sai lầm khi đặt mọi thứ vào một Bộ điều khiển gia đình và rất nhiều chế độ xem trong thư mục chia sẻ. Lúc đầu thì ổn nhưng khi tính năng creep bắt đầu, nó trở nên lộn xộn và khó quay lại và thiết kế lại.

Tôi cũng sử dụng Linq2SQL. Tôi đã mắc sai lầm khi tạo mô hình cho mọi thứ và sau đó nhận ra rằng tôi chỉ có thể trả về tập hợp kết quả từ các truy vấn của mình dưới dạng mô hình. tât nhiên.

Nếu bạn sử dụng .NET MVC và lo lắng về hiệu suất, đây là những điều tôi gặp phải:

ĐỪNG trả lại các chế độ xem từng phần tạo ra các khối HTML lớn! Hãy chắc chắn để giảm thiểu mọi thứ. Loại bỏ tất cả các khoảng trắng. Sử dụng tên ID nhỏ hơn. Dành thời gian để tạo html nhẹ nhất có thể. Trả lại JSON và yêu cầu khách hàng thực hiện một số công việc.

Hãy cẩn thận về cách bạn phát triển CSS của mình. Đừng sử dụng một loạt các kiểu nội tuyến, hãy dành thời gian để kết hợp vào các tệp CSS mà sau này bạn có thể thu nhỏ.

Tương tự với JS phía khách hàng của bạn. Thật hấp dẫn khi đặt JS bên trong các khung nhìn một phần. Giữ mọi thứ ngăn nắp.

Kết xuất trên IE thật kinh khủng. Đặc biệt nếu có rất nhiều hình ảnh. Đảm bảo nén hình ảnh nhiều nhất có thể, tất nhiên là không làm giảm chất lượng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.