Web-framework Pusa er offentliggjort med en implementering af en koncept, der flytter frontend-logik, udført i browseren ved hjælp af JavaScript, til backend-siden — browserstyring og DOM-elementer, samt forretningslogik udføres på backend. JavaScript-koden, der kører i browseren, erstattes med et universelt lag, der kalder håndterere på backend-siden. Der er ikke behov for udvikling ved brug af JavaScript til frontend. Den referenceimplementering af Pusa er skrevet i PHP og distribueres under GPLv3-licensen. Udover PHP kan teknologien implementeres i ethvert andet sprog, inklusive JavaScript/Node.js, Java, Python, Go og Ruby.
Pusa definerer en kommunikationsprotokol baseret på et minimalistisk sæt kommandoer. Når siden indlæses, henter browseren det grundlæggende DOM-indhold og JavaScript-kernen Pusa-Front. Pusa-Front sender via Ajax-anmodninger browserbegivenheder (såsom klik, blur, focus og keypress) og anmodningsparametre (det element, der udløste begivenheden, dets attributter, URL osv.) til serverbehandleren Pusa-Back. Baseret på de modtagne data bestemmer Pusa-Back controlleren, udfører nyttelasten og danner et svar sæt kommandoer. Når Pusa-Front modtager svaret på anmodningen, udfører den kommandoerne, hvilket ændrer DOM-indholdet og browserens miljø.
Frontendens tilstand dannes, men kontrolleres ikke af backend, hvilket gør udviklingen for Pusa lignende koden til et grafikkort eller Canvas, hvor resultatet af udførelsen ikke kontrolleres af udvikleren. For at skabe interaktive applikationer baseret på Canvas og onmousemove er det muligt at indlæse og bruge yderligere JavaScript-scripts på klientens side. Ulemperne ved metoden inkluderer også overførsel af en del af belastningen fra frontend til backend og en stigning i hyppigheden af datakommunikation. serveren.
Blandt fordelene er der: ingen nødvendighed for frontend JavaScript-udviklere, stabil og kompakt klientkode (11kb), hovedkoden er utilgængelig fra frontend, ingen behov for at serialisere REST og midler som gRPC, og der undgås problemer med rutejustering af anmodninger mellem frontend og backend.
Kilde: opennet.ru
