Das Web-Framework Pusa wurde veröffentlicht, das ein Konzept implementiert, welches die Logik des Frontends, die im Browser mit JavaScript ausgeführt wird, auf die Backend-Seite verlagert – die Steuerung des Browsers und der DOM-Elemente sowie die Geschäftslogik werden im Backend ausgeführt. Der im Browser ausgeführte JavaScript-Code wird durch eine universelle Schnittstelle ersetzt, die Handler auf der Backend-Seite aufruft. Eine Entwicklung mit JavaScript für das Frontend ist nicht mehr erforderlich. Die Referenzimplementierung von Pusa wurde in PHP geschrieben und steht unter der GPLv3-Lizenz. Neben PHP kann die Technologie auch in jeder anderen Sprache implementiert werden, einschließlich JavaScript/Node.js, Java, Python, Go und Ruby.
Pusa definiert ein Austauschprotokoll auf der Grundlage eines minimalistischen Befehlssatzes. Beim Laden der Seite lädt der Browser den Basisinhalt des DOM und den JavaScript-Kern von Pusa-Front. Pusa-Front sendet über Ajax-Requests die Ereignisse des Browsers (wie Klick, Verlassen, Fokus und Tastendruck) und die Anfrageparameter (das auslösende Element, seine Attribute, URL usw.) an den Server-Handler Pusa-Back. Aufgrund der erhaltenen Daten bestimmt Pusa-Back den Controller, führt die Nutzlast aus und erstellt einen Antwortbefehlssatz. Nach Erhalt der Anfrageantwort führt Pusa-Front die Befehle aus, um den DOM-Inhalt und die Browserumgebung zu ändern.
Der Zustand des Frontends wird kreiert, aber nicht vom Backend kontrolliert, was die Entwicklung für Pusa ähnlich macht wie den Code für eine Grafikkarte oder Canvas, wo das Ergebnis der Ausführung nicht vom Entwickler kontrolliert wird. Um interaktive Anwendungen auf Basis von Canvas und onmousemove zu erstellen, besteht die Möglichkeit, zusätzliche JavaScript-Skripte auf der Client-Seite zu laden und zu verwenden. Zu den Nachteilen dieser Methode gehört auch, dass ein Teil der Last vom Frontend auf das Backend verlagert wird und die Datenübertragungsfrequenz erhöht wird. Server.
Zu den Vorteilen zählen: der Ausschluss der Notwendigkeit, Frontend-JavaScript-Entwickler zu beteiligen, stabiler und kompakter Client-Code (11kB), Unzugänglichkeit des Hauptcodes von der Frontend-Seite, keine Notwendigkeit zur Serialisierung von REST und zu Tools wie gRPC sowie der Ausschluss von Problemen der Koordination der Routenanfragen zwischen Frontend und Backend.
Quelle: opennet.ru
