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.InvokeUnmarshalle
dauern 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.
Zulassen, dass WebAssembly DOM direkt verarbeitet.
https://github.com/WebAssembly/proposals/issues/8
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/