Das Web-Framework Pusa wurde veröffentlicht und implementiert ein Konzept, das die im Browser durch JavaScript ausgeführte Frontend-Logik auf die Serverseite überträgt. Die Steuerung des Browsers und der DOM-Elemente sowie die Geschäftslogik werden auf dem Backend ausgeführt. Der im Browser ausgeführte JavaScript-Code wird durch eine universelle Schicht ersetzt, die Handler auf der Serverseite aufruft. Die Notwendigkeit, JavaScript für das Frontend zu verwenden, entfällt. Die Referenzimplementierung von Pusa ist in PHP geschrieben und unter der GPLv3-Lizenz lizenziert. Neben PHP kann die Technologie auch in anderen Programmiersprachen wie JavaScript/Node.js, Java, Python, Go und Ruby umgesetzt werden.
Pusа definiert ein Protokoll für den Austausch auf Basis eines minimalistischen Befehlssatzes. Beim Laden der Seite lädt der Browser den grundlegenden Inhalt des DOM und das JavaScript-Kern von Pusa-Front. Pusa-Front sendet über Ajax-Anfragen Ereignisse des Browsers (wie Klick, Verlassen, Fokussieren und Tastendruck) sowie Anforderungsparameter (das auslösende Element, seine Attribute, URL usw.) an den Serverprozessor Pusa-Back. Basierend auf den erhaltenen Daten bestimmt Pusa-Back den Controller, führt die Nutzlast aus und erstellt eine Antwortreihe von Befehlen. Nach Erhalt der Anfrageantwort führt Pusa-Front die Befehle aus und ändert den Inhalt des DOM sowie die Umgebung des Browsers.
Der Zustand des Frontends wird zwar gebildet, aber nicht vom Backend kontrolliert, was die Entwicklung für Pusa ähnlich macht wie den Code für Grafikkarten oder Canvas, wobei das Ergebnis der Ausführung nicht vom Entwickler kontrolliert wird. Für die Erstellung interaktiver Anwendungen basierend auf Canvas und onmousemove besteht die Möglichkeit, zusätzliche JavaScript-Skripte auf der Clientseite zu laden und zu verwenden. Zu den Nachteilen dieser Methode zählt auch die Verlagerung eines Teils der Last vom Frontend auf das Backend sowie die Erhöhung der Datenübertragungsfrequenz. dem Server durch.
Unter den Vorteilen sticht hervor: die Notwendigkeit der Beteiligung von JavaScript-Frontend-Entwicklern entfällt, stabiler und kompakter Client-Code (11 KB), der Hauptcode ist vom Frontend aus nicht zugänglich, es besteht keine Notwendigkeit für REST-Serialisierung und ähnliche Technologien wie gRPC, sowie das Ausschließen von Problemen bei der Synchronisation der Routing-Anfragen zwischen Frontend und Backend.
Quelle: opennet.ru
