Blazor Leistung

79

Ich würde gerne Blazor verwenden, obwohl es immer noch auf Alpha-Niveau ist.

Soweit ich weiß, verwendet Blazor WebAssembly, um C # auf der Clientseite zu kompilieren.

Und ich habe diese Fragen:

Läuft dieser Ansatz schneller als beispielsweise React / Vue, das in JavaScript kompiliert wurde?

Stimmt es, dass der Browser die WebAssembly-Bibliothek jedes Mal herunterladen muss, wenn die Seite geladen wird?

Im Internet gibt es keine Vergleiche der Leistung beliebter JS-Frameworks. Daher möchte ich die theoretische Leistung des neuen Frameworks von Microsoft erfahren. Danke im Voraus.

FoxPro
quelle
Ich erkläre diesen Artikel @chris sainty schön. chrissainty.com/what-is-blazor-and-why-is-it-so-exciting
Majedur Rahaman

Antworten:

137

Stimmt es, dass der Browser die Webassembly-Bibliothek jedes Mal herunterladen muss, wenn die Seite geladen wird?

Nein, Browser können die Dateien zwischenspeichern. Gemeinsame CDN für Blazor-Apps reichen aus.

Funktioniert dieses System schneller als beispielsweise React / Vue, das in JavaScript kompiliert wurde?

Blazor verwendet Webassemblierung . Auf Papier sollte die Webassemblierung schneller sein als jede js-Bibliothek. Allerdings verfügen noch nicht alle Browser über einen ausgereiften Webassembler-Parser. Daher stellen Sie möglicherweise fest, dass Browser die Webassemblierung derzeit nicht mit optimaler Geschwindigkeit ausführen.

Sie können eine kleine Blazor-App erstellen und in Firefox, Chrome oder Edge ausführen. In den meisten Fällen führt Firefox Blazor-Apps viel schneller aus als Chrome oder Edge, was bedeutet, dass sich die Browserhersteller noch verbessern müssen, selbst Firefox kann sich verbessern.

Wenn Ihre App häufig auf DOM zugreifen muss, ist Web Assembly / Blazor im Vergleich zu JS-Bibliotheken definitiv langsamer, da Web Assembly ohne Verwendung von Invokes nicht direkt auf DOM zugreifen kann (was im Moment langsam ist, beziehen Sie sich bitte auf meinen Blazer-Benchmark unten). .

Unter Firefox RegisteredFunction.InvokeUnmarshalledauern 10.000 Aufrufe leerer Methoden 250 ms, während Chrome und Edge auf meinem PC mehr als 2400 ms benötigen. ' In reinem JS dauert es für dasselbe Szenario weniger als 10 Millisonds.

Darüber hinaus verfügt die aktuelle Implementierung von Blazor über eine eigene MSIL-Engine über der Webassembly-Engine des Browsers. Dies bedeutet, dass zwei Dolmetscher arbeiten, um ein Blazor-Projekt auszuführen, wie zwei Übersetzer, die stattdessen eine Konversation in einem interpretieren. Derzeit arbeitet Microsoft an einem AOT-Compiler, der noch nicht veröffentlicht wurde. Sobald es veröffentlicht ist, wird Blazor viel schneller sein als die aktuelle Implementierung.

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

Wir können davon ausgehen, dass die Webassemblierung die Zukunft der Webentwicklung ist, aber im Moment können wir nichts über Blazors Zukunft sagen. Auf dem Papier kann Blazor schneller sein als jedes andere Framework, wir brauchen jedoch das Engagement von Web Assembly-Betreuern, Browser-Entwicklern, Microsoft und den Communities, um die Theorien praktisch umzusetzen.

Update 10. Juli 2018

Es gibt neue Vorschläge in den WebAssembly-Repos.

  1. Zulassen, dass WebAssembly DOM direkt verarbeitet. https://github.com/WebAssembly/proposals/issues/8

  2. Referenztypen für WebAssembly mit GC. https://github.com/WebAssembly/reference-types/blob/master/proposals/reference-types/Overview.md

Die beiden oben genannten Vorschläge werden in Zukunft den Weg für eine viel schnellere Interaktion zwischen DOM und Webassembly ebnen. IOW Blazor wird in Zukunft viel schneller sein.

Update 17. Oktober 2018

Das Firefox-Team konnte JS -> WASM-Aufruf genauso schnell erreichen wie JS -> JS-Methodenaufrufe. Ab sofort ist FireFox in Bezug auf die WebAssembly-Unterstützung allen anderen Browsern weit voraus

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

VibeeshanRC
quelle
2
Mein Verständnis ist ein Grund dafür, dass React und jetzt Angular und andere Frameworks sehr schnell sind. Dies ist das virtuelle DOM-Konzept, das mit dem tatsächlichen DOM verglichen wird und nur die Unterschiede anwendet. Ist das etwas, was Blazor in Zukunft tut oder plant?
Cleverguy25
1
@ Cleverguy25 Angular verwendet KEIN virtuelles DOM ... React funktioniert, weshalb React bei großen Apps eine bessere Leistung
bietet
1
@ Cleverguy25 Blazor verwendet virtuelles DOM wie React, was es ziemlich schnell machen könnte. Angular hatte versucht, den virtuellen Dom zu verwenden, aber wie ich weiß, wurde er zurückgezogen.
29.
3
Blazor verfügt über ein virtuelles DOM, um Delta-Updates nur auf HTML anzuwenden. Es interpretiert auch Code, derzeit keine Wasm-Kompilierung.
Peter Morris
1
AOT-Konformist auf Q1 von 2021
verschoben.