Hiệu suất Blazor


84

Tôi muốn bắt đầu sử dụng Blazor, mặc dù thực tế là nó vẫn đang ở cấp độ alpha.

Theo tôi hiểu, Blazor sử dụng WebAssembly để biên dịch C # ở phía máy khách.

Và tôi có những câu hỏi sau:

Cách tiếp cận này có chạy nhanh hơn, chẳng hạn như React / Vue, được biên dịch bằng JavaScript?

Có đúng là trình duyệt sẽ cần tải xuống thư viện WebAssembly mỗi khi tải trang không?

Trên Internet không có so sánh về hiệu suất của các khuôn khổ JS phổ biến. Vì vậy, tôi muốn biết hiệu suất lý thuyết của khuôn khổ mới từ Microsoft. Cảm ơn bạn trước.


Tôi bài viết này @chris Holyy giải thích nó độc đáo. chrisstain.com/what-is-blazor-and-why-is-it-so-ex Fun
Majedur Rahaman vào

Câu trả lời:


146

Có đúng là trình duyệt sẽ cần tải xuống thư viện Webassembly mỗi khi tải trang không?

Không, trình duyệt có thể lưu vào bộ đệm các tệp. CDN chung cho các ứng dụng Blazor sẽ thực hiện thủ thuật.

Hệ thống này hoạt động nhanh hơn, chẳng hạn như React / Vue, được biên dịch bằng JavaScript?

Blazor sử dụng trình lắp ráp web, lắp ráp web trên giấy sẽ nhanh hơn bất kỳ thư viện js nào, tuy nhiên không phải tất cả các trình duyệt đều có trình phân tích cú pháp lắp ráp web hoàn chỉnh. Vì vậy, bạn có thể thấy rằng các trình duyệt sẽ không chạy lắp ráp web với tốc độ tối ưu như bây giờ.

Bạn có thể tạo một ứng dụng blazor nhỏ và chạy nó trong Firefox, chrome hoặc edge. Trong hầu hết các trường hợp, Firefox chạy các ứng dụng nhanh hơn nhiều so với chrome hoặc edge, điều này ngụ ý rằng các nhà sản xuất trình duyệt vẫn cần cải thiện, thậm chí Firefox có thể cải thiện.

Nếu ứng dụng của bạn cần truy cập DOM thường xuyên, thì chắc chắn web assembly / Blazor sẽ chậm hơn so với bất kỳ thư viện JS nào vì web assembly không thể truy cập trực tiếp vào DOM mà không sử dụng Invokes (Hiện tại đang chậm, hãy tham khảo điểm chuẩn blazer của tôi bên dưới) .

Trên Firefox, 10.000 RegisteredFunction.InvokeUnmarshallecuộc gọi đến các phương thức trống mất 250ms trong khi chrome và edge cần hơn 2400ms trong PC của tôi. ' Trong JS thuần túy, mất dưới 10 mili giây cho cùng một kịch bản.

Ngoài ra, Blazor triển khai hiện tại có công cụ MSIL của riêng mình trên đầu trang của Công cụ lắp ráp web của trình duyệt, có nghĩa là có hai thông dịch viên làm việc để chạy một dự án Blazor, giống như hai phiên dịch viên thông dịch một cuộc hội thoại thay vì trên một. Hiện tại Microsoft đang làm việc trên một trình biên dịch AOT, trình biên dịch này vẫn chưa được phát hành. Sau khi phát hành Blazor sẽ nhanh hơn nhiều so với việc triển khai hiện tại.

http://www.mono-project.com/news/2018/01/16/mono-static-webassembly-compilation/

Chúng ta có thể yên tâm cho rằng web assembly là tương lai của phát triển web, nhưng hiện tại chúng ta chưa thể nói gì về tương lai của Blazor. Trên giấy, Blazor có thể nhanh hơn bất kỳ khuôn khổ nào hiện có, tuy nhiên chúng tôi cần sự cam kết từ những người bảo trì lắp ráp web, nhà phát triển Trình duyệt, Microsoft và cộng đồng để làm cho lý thuyết trở nên thực tế.

Cập nhật ngày 10 tháng 7 năm 2018

Có các đề xuất mới trong kho lưu trữ WebAssembly.

  1. Cho phép WebAssembly trực tiếp xử lý DOM. https://github.com/WebAssembly/propestions/issues/8

  2. Các loại tham chiếu cho WebAssembly với GC. https://github.com/WebAssembly/reference-types/blob/master/proposal/reference-types/Overview.md

Hai đề xuất trên sẽ mở đường cho sự tương tác nhanh hơn nhiều giữa DOM và webassembly trong tương lai. IOW Blazor sẽ nhanh hơn nhiều trong tương lai.

Cập nhật ngày 17 tháng 10 năm 2018

Nhóm Firefox có thể tiếp cận cuộc gọi JS -> WASM nhanh như các cuộc gọi phương thức JS -> JS. Hiện tại, FireFox đã vượt xa bất kỳ trình duyệt nào khác khi nói đến hỗ trợ WebAssembly

https://hacks.mozilla.org/2018/10/calls-between-javascript-and-webassembly-are-finally-fast-%F0%9F%8E%89/


2
Sự hiểu biết của tôi là một lý do khiến React và bây giờ là Angular và các framework khác phát triển rất nhanh là khái niệm DOM ảo, so với DOM thực tế và chỉ áp dụng những điểm khác biệt. Đó có phải là điều mà Blazor làm hay dự định làm trong tương lai?
Cleverguy25

1
@ Cleverguy25 góc KHÔNG sử dụng một DOM ảo ... Phản ứng thực hiện, đó là lý do phản ứng sẽ cho hiệu suất tốt hơn trên các ứng dụng lớn
Matte

1
@ Cleverguy25 Blazor sử dụng DOM ảo giống như React có thể làm cho nó khá nhanh. Angular đã thử sử dụng Dom ảo nhưng tôi biết nó đã bị rút tiền.
nzrytmn

3
Blazor có một DOM ảo để chỉ áp dụng các bản cập nhật delta cho html. Nó cũng thông dịch mã, hiện không có biên dịch rác.
Peter Morris

1
Trình biên dịch AOT được đẩy lên Q1 năm 2021.
Rohan Bojja

0

Theo tôi hiểu, Blazor sử dụng WebAssembly để biên dịch C # ở phía máy khách.

Đúng một nửa. Bạn có thể viết mã của mình vào phía máy khách WebAssembly (WASM) (vâng, đó là C # ở phía máy khách), nhưng bạn cũng có thể thực thi phía máy chủ logic. Cả hai đều có lợi ích. Tất cả mã của bạn sẽ hiển thị nếu bạn đi theo lộ trình WASM. Nhưng nó có thể hiển thị lại nhanh hơn nếu logic là tất cả dựa trên máy chủ - nhưng nếu máy chủ của nó dựa trên mã của bạn thì không thể xem được.

Cách tiếp cận này có chạy nhanh hơn, chẳng hạn như React / Vue, được biên dịch bằng JavaScript?

Không. Tôi đã làm rất nhiều Vue và Vue chạy nhanh hơn. NHƯNG tôi có thể viết mã nhanh hơn RẤT NHIỀU bằng Blazor. Và Blazor cung cấp giải pháp cuộn ảo có thể làm cho nó xuất hiện nhanh hơn. Trong trường hợp của tôi, các thành phần vẽ sơ đồ có sẵn quá chậm. Tôi đã viết một thành phần Blazor sử dụng C # và JavaScript hoạt động rất tốt. Hầu hết thời gian tôi không lo lắng về mã WASM chạy quá chậm .... nhưng âm mưu cần phải nhanh hơn nhiều ..... và Blazor đã để tôi có bánh ... Tôi chỉ phải làm một chút công việc cấp trong JavaScript. Quá trình thực thi Blazor đã trở nên nhanh hơn trong 6 tháng qua và nhóm nghiên cứu cho biết còn nhiều hơn thế nữa khi .Net 6 ra mắt. Nhưng nó quá nhanh cho 99% những gì tôi cần làm.

Có đúng là trình duyệt sẽ cần tải xuống thư viện WebAssembly mỗi khi tải trang không?

Không nếu chúng được lưu vào bộ nhớ cache. Và ngay cả lần đầu tiên chúng tải, nó không hề chậm nếu bạn có kết nối tốt. Theo thứ tự 10 meg.

Câu hỏi chưa được đặt ra tuyệt vời - nó có giá trị sử dụng không. Tôi đã sử dụng nó trong 6 tháng. Đối với tôi nó đã được tuyệt vời. C # là một ngôn ngữ rất tốt. Đôi khi tôi bỏ lỡ thêm một thuộc tính động và thường bạn phải bắt đầu vẽ lại theo cách thủ công, nhưng với các tính năng như kiểm tra đối tượng nullable cảnh báo bạn rằng bạn đã không kiểm tra xem mã của mình có thể gây ra kiểm tra tham chiếu rỗng hay không - điều đó tốt hơn nhiều JS. Tôi thường cảm thấy rất khó khăn khi làm việc với "chuỗi công cụ" JavaScript. Thật tuyệt khi có thể chọn không tham gia thư viện JS.

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.