Von: Till Schneidereit
Heute freuen wir uns, die Verfügbarkeit unseres brandneuen JavaScript SDK bekannt zu geben. Dieses SDK ist eine komplette Neufassung unseres vorherigen JavaScript SDK mit deutlich verbesserter Ökosystemkompatibilität, Standardkonformität, Robustheit und wichtigen neuen Funktionen.
Diese Version bringt uns auch auf den Weg zu erheblichen Leistungsverbesserungen und fortlaufenden Verbesserungen der Kompatibilität mit vorhandenen JavaScript-Anwendungen.
Gleichzeitig behalten wir ein hohes Maß an Kompatibilität mit dem vorherigen SDK bei, sodass ein Upgrade für die meisten Benutzer unkompliziert sein sollte.
Lassen Sie uns näher darauf eingehen, was an dieser Version neu und anders ist.
Aufbauend auf den robusten Grundlagen von SpiderMonkey, StarlingMonkey und ComponentizeJS
Während das vorherige SDK auf der QuickJS-JavaScript-Engine und der Javy-Laufzeitumgebung basiert, basiert das neue SDK auf der SpiderMonkey-Engine des Firefox-Browsers sowie der StarlingMonkey-Laufzeitumgebung und dem ComponentizeJS WIT-Bindungsgenerator der Bytecode Alliance.
Zusammen bilden diese Projekte eine fantastische Grundlage für unser SDK:
-
SpiderMonkey ist die JavaScript-Engine, die den Firefox-Browser antreibt. Es befindet sich seit über 20 Jahren in der Entwicklung, wird täglich von Millionen von Benutzern verwendet und kann einen Reifegrad vorweisen, den eigentlich nur die großen Browser-Engines erreichen können.
-
StarlingMonkey ist eine JavaScript-Laufzeitumgebung, die wir zusammen mit unseren Freunden bei Fastly erstellt und zur Bytecode Alliance beigetragen haben. Es ist hochgradig modular auf SpiderMonkey aufgebaut und lässt sich daher ganz einfach je nach Bedarf für unseren Anwendungsfall konfigurieren. Entscheidend ist, dass es eine Implementierung wichtiger Web-APIs mit sich bringt, die die Kompatibilität mit dem Web-Ökosystem erheblich verbessern, wie die Fetch-API für die Verarbeitung ausgehender HTTP-Anfragen, wichtige Teile der Service Workers-Spezifikation für die Verarbeitung eingehender Anfragen und die Streaming-Verarbeitung von Anfrage- und Antwortkörpern die Streams-API des Webs streamssetTimeout und setInterval.
- **ComponentizeJS **ist ein Tool, das die Verwendung externer Schnittstellen ermöglicht, die in der Schnittstellenbeschreibungssprache WIT in JavaScript definiert sind. Dadurch ist es einfach, nicht nur die Schnittstellen zu verwenden, die Spin zusätzlich zu dem, was in WASI enthalten ist, bereitstellt, sondern auch die in anderen WebAssembly-Komponenten implementierten Funktionen, einschließlich solcher, die in anderen Sprachen wie Rust, Go, Python oder C/C geschrieben sind.
Radikaler Wandel unter der Haube, kleine Änderungen an der Oberfläche
Wie oben beschrieben, könnte die neue Implementierung unseres JS-Supports kaum unterschiedlicher zur alten sein. Die gute Nachricht ist, dass wir dank der Tatsache, dass JavaScript über eine außergewöhnlich robuste Spezifikation verfügt, all dies tun können, ohne das Risiko einer geringfügigen Beschädigung des vorhandenen Codes einzugehen. Während das neue SDK über eine leicht optimierte API verfügt, die bei der Aktualisierung bestehender Projekte ebenso geringfügige Änderungen erfordert, hat ein vollständiger Austausch der zugrunde liegenden Plattform ansonsten keine Auswirkungen auf die Kompatibilität.
Von dort aus können sie dann damit beginnen, die neuen Funktionen des neuen SDK zu nutzen. Insbesondere haben wir die API optimiert, um die Integration von Streaming-HTTP-Körpern zu vereinfachen, ohne dass vorhandener Code komplett neu geschrieben werden muss.
Neue, standardbasierte APIs
Wir haben zusätzlich zu den Fetch-API- und Service Workers-Spezifikationsstandards Unterstützung für (eine leicht optimierte Version) der vorhandenen APIs implementiert. Entwickler können bei Bedarf direkt mit diesen Standards arbeiten, was ihnen eine wesentlich verbesserte Kompatibilität mit dem breiteren Web- und JS-Ökosystem verleiht.
Standards helfen auch auf ganz andere Weise: Da die gesamte HTTP-Unterstützung jetzt mit wasi-http erstellt wird, können mit dem neuen SDK erstellte Anwendungen ausgeführt werden, die nicht die von uns ebenfalls unterstützten Spin-spezifischen APIs verwenden in jeder Umgebung, die wasi-http unterstützt, wie Wasmtime und Node.js (über JCO).
Nur der Anfang
Mit dieser Version haben wir uns darauf konzentriert, die zugrunde liegende Plattform für unsere JavaScript-Unterstützung in einer Drop-in-kompatiblen Weise zu ändern und gleichzeitig bereits Unterstützung für moderne Webstandards, Komposibilität mit anderen WebAssembly-Komponenten und eine robustere und ausgereiftere Grundlage für die Zukunft zu erhalten Entwicklung.
In Zukunft werden wir schnelle Verbesserungen bei Leistung, Kompatibilität und neuen Funktionen sehen. Als kleiner Vorgeschmack sind einige der aufregendsten Entwicklungen in Arbeit:
-
Leistungsverbesserungen: Das Fastly-Team hat an erheblichen Leistungsverbesserungen für die JavaScript-Ausführung in WebAssembly gearbeitet. Eine erste Iteration dieser Arbeit wurde gerade in StarlingMonkey integriert und beschleunigt die Ausführung bereits um ein Vielfaches, abhängig von der genauen Arbeitslast. Diese Integration ist erst gestern gelandet und daher noch nicht in unser JS SDK integriert, wird es aber bald sein.
-
Verbesserte Kompatibilität mit dem Web- und JavaScript-Ökosystem: Wir stehen kurz vor einer wichtigen Verbesserung von StarlingMonkey: der Möglichkeit, Teile der Laufzeit selbst und der von ihr bereitgestellten Web-APIs in Rust statt in C zu implementieren . Dies wird es viel einfacher machen, mit den neuesten Entwicklungen im Web-Ökosystem Schritt zu halten und eine vollständigere und kompatiblere Implementierung der Web-APIs bereitzustellen, die für die Kompatibilität mit bestehenden JavaScript-Anwendungen entscheidend sind. Nicht jeder JS-Code verwendet (Web-)Standards-basierte APIs: Viele Codes da draußen nutzen Node.js-APIs. Wir arbeiten daran, eine Kompatibilitätsschicht für diese APIs bereitzustellen, damit Entwickler sie in ihren Spin-Anwendungen verwenden können.
-
Unterstützung für mehr Triggertypen: Derzeit unterstützt das neue JavaScript SDK nur HTTP-Trigger. Wir arbeiten daran, Unterstützung für weitere Triggertypen hinzuzufügen, beispielsweise die Cron- und Redis-Trigger.
## Bleiben Sie in Kontakt
Wir freuen uns, dieses neue SDK mit Ihnen teilen zu können, und freuen uns auf Ihr Feedback und Ihre Beiträge, während wir es weiter verbessern. Bitte nehmen Sie am Chat auf dem Fermyon Discord-Server oder an unseren wöchentlichen Projekttreffen teil und folgen Sie uns auf X (ehemals Twitter) @fermyontech und @spinframework!
Das obige ist der detaillierte Inhalt vonWir stellen unser JavaScript SDK der nächsten Generation vor. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!