Wie ich an einem Abend ein schnelles CMS für statische Sites nach den Regeln der Geschäftslogik in einer Datei schrieb

Nicht nur Wordpress



Nicht nur Wordpress


Der CMS-Markt ist seit langem ein Ort, an dem Wordpress, Joomla und Drupal die Top Drei sind. Diese wundervollen Zeiten vergehen bereits allmählich, obwohl WP, das die Dynamik der Entstehung neuer Standorte verlangsamt, immer noch führend ist. Kein Wunder: eine aktive Community, eine Vielzahl von Plugins. Dieser Artikel widmet sich jedoch keineswegs den "aufstrebenden Stars" des Marktes für Content-Management-Systeme (Hallo, Lösungen auf Basis von Laravel). Vielmehr wird sogar das Objekt unserer Aufmerksamkeit "schwarze Materie" sein, die etwas abseits liegt. Nämlich - Trommelwirbel ...



Statische Stellen



CMS für statische Sites



Wer braucht Statik in 2k20?



Rationale Frage! Es scheint, dass die Tage des Telefon-Internets und von Windows 95 bereits vorbei sind, aber die Nachfrage nach statischer Erzeugung von HTML-Code beginnt wieder an Fahrt zu gewinnen. Und die gute Gesellschaft ist natürlich schuld. Google PageSpeed ​​ist das sehr große und mächtige Urfi ... Im Allgemeinen ist es dieses Leistungsmessgerät für Webseiten, das sowohl zum Motor des Fortschritts des weltweiten Internets als auch zu den Kopfschmerzen aller Webentwickler geworden ist, insbesondere für Freiberufler. Die Messergebnisse dieses Tools basieren auf Google-Standards, und es ist allgemein bekannt, dass diese die Grundlage für das Ranking bilden. Objektiv gesehen erhöht das Laden einer Seite für mehr als drei Sekunden automatisch die Anzahl der Bounces. Somit wird die Statik zu einer der alternativen Lösungen, um die dynamische Zusammenstellung von Seiten durch die Leistung eines CMS, eines Frameworks oder selbst geschriebener Optionen zu ersetzen oder zu ergänzen.



,



Im Dienst betreue ich viele Projekte, darunter Parser, aber auch Lösungen im Bereich E-Commerce. Ich beschwere mich nicht über das Leben, aber ein Problem ergab sich nicht aus der Kategorie „2. Klasse, Grundschule“. Ich als Entwickler und Manager (und die Verwaltung Ihres kleinen Unternehmens erfordert, wie Sie wissen, auch Fähigkeiten aus diesem Bereich), wie es auf Polnisch „dostałem się do martwego kąta“ (kurz gesagt, in eine abgelegene Ecke geraten) steht. Die Bedingung ist wie folgt: Sie müssen innerhalb weniger Tage eine Lösung schreiben, die einfach zu installieren sein und eine beliebige Anzahl statischer Seiten bereitstellen sollte. Darüber hinaus sollte der Administrator in der Lage sein, eine solche Lösung schnell zu entfernen und jedem Projekt über eine FTP / SFTP-Verbindung hinzuzufügen, oder auch wenn er keinen Zugriff auf FTP / SFTP hat. Andererseits war die Bedingung, dass die Mindestversion PHP 5 ist.6 und sollte wie jede neuere Version ziemlich gut unterstützt werden.



Der Administrator sollte



  1. Löschen / Hinzufügen / Ändern von Seiten über das Admin-Panel;
  2. global und schnell im Inhalt von Seiten suchen (unter Berücksichtigung verschiedener Kodierungen, Sprachen;
  3. Suche nach Dateinamen;
  4. Löschen / Einfügen / Ändern der erforderlichen Elemente auf allen Seiten mit einem Klick im Admin-Bereich.
  5. Die Lösung sollte einfach zu installieren und zu deinstallieren sein.


Die Sicherheit sollte die Verwendung von SQL-Injection oder anderen Versuchen, die Arbeit zu stören, nicht zulassen.



Eine zusätzliche Verpflichtung wäre die Möglichkeit, das Admin-Panel und alle seine Funktionen über die API zu nutzen. Grob gesagt, wenn es solche Admin-Panels in mehr als 50 Domains gibt, sollte es einen Remotezugriff auf diese geben, indem Anfragen gestellt werden können.



Tschechische Republik, Abend, Sommer, Kaffee



Extrem ruhige Abende im Riesengebirge tragen nur zur Faulheit bei. Aber wie das alte Sprichwort sagt, wer nicht arbeitet ...



Nachdem ich meine Gedanken gesammelt und meinen Geist und meine Entschlossenheit gestärkt hatte, begann ich zu entwerfen. Es ist sehr klar, dass die Schaffung einer prozeduralen Lösung in diesem Fall nicht so erfolgreich wie möglich sein kann. Es ist kein Geheimnis, dass die Aussicht besteht, das System in Zukunft zu unterstützen, aber gleichzeitig möchten Sie nicht alles zu sehr ändern.



Und ja, verdammt, ich habe beschlossen, den in den meisten Frameworks bereits etablierten Ansatz - OOP- und MVC-Konzept - in eine Datei zu übertragen.



Unter dem Gesichtspunkt der Leistung könnte Prozeduralismus die beste Option sein, aber:



  • Vergessen wir nicht den Aspekt der wachsenden Kundenanforderungen und die parallele Notwendigkeit, den Schnittstellen unserer Webanwendung neue Funktionen hinzuzufügen.
  • — , , ;
  • — , “ ” , - -, -.


Es wurde beschlossen, die Grundlagen vorerst aufzugeben, da keine Notwendigkeit besteht. Daher ist der Begriff "Modell" in allem, was oben steht, ein nicht realisiertes Konzept in meiner Architektur. Die fehlende Implementierung hat hier gute Arbeit geleistet, da eine SQL-Injection grundsätzlich nicht mehr möglich ist.



Strukturierung



Ausgehend von der Tatsache, dass wir eine Datei haben und es eine Hauptregel gibt - es sollte nur eine Datei hinzugefügt werden. Danach können Sie das Verzeichnis, zu dem Sie es hinzugefügt haben, sofort bearbeiten und verwalten. Es ist klar, dass selbst Klassen Sie nicht vor "Devil's Leg" retten werden.



Was ist die Lösung?



Intuitiv: Wir teilen die Datei in strukturelle Teile der Ansicht auf: Die Basissystemklassen befinden sich ganz oben, die Controller sind niedriger, die Ansichten sind noch niedriger, aber das gesamte Ballett wird durch Routen geschlossen. Jeder Teil erhielt eine Überschrift aus den Kommentaren mit einer Erklärung, um nach einer Weile nicht zu vergessen, dass hier:



/*
* This is the part for routing
*Additional information...
*/


Funktionale Benennung - Klassenmethoden wurden gemäß der Praxis von camelCase benannt und entsprechen einer funktionalen Rolle. Beispielsweise ist „checkAdminCredentials“ eine mehr als verständliche Formulierung für eine Methode.



Ein Versuch, alles zu beschreiben, was möglich ist - ich werde nicht sagen, dass ich dieser Absicht bis zum Ende der Entwicklung entsprach, am Ende habe ich zwischen Geschwindigkeit und Lesbarkeit des Codes manövriert, aber ich habe es geschafft, die wichtigsten Entscheidungen mit Kommentaren wie // zu begleiten, um statisches HTML zu erhalten.



Wie erfolgt das Routing?



Die Notwendigkeit einer mehr oder weniger klaren Trennung der Schnittstellen wurde von mir sofort als Schlüsselbedürfnis akzeptiert. Wenn diese Komponente nicht ordnungsgemäß implementiert wird, kann sie aufgrund der Unklarheit über die Route, die der Controller anruft, zur „Spitze“ der Anwendung werden.



Aufgrund des oben erwähnten Problems habe ich die Klasse für das Routing eher primitiv, aber funktional gemacht. Das Routing funktioniert mit GET-Anforderungen - natürlich nicht ganz ästhetisch, aber die unmittelbare Notwendigkeit einer schnellen Implementierung ist zu 100% gelöst. Der Router ist zum einzigen Einstiegspunkt für eine Webanwendung (d. H. Für das Admin-Panel) geworden, was meiner Meinung nach eine ideale Lösung für eine einfache Entwicklung darstellt. In dieser Klasse werden das Front-End und das Back-End der Webanwendung zusammengestellt und der generierte HTML-Code wird zurückgegeben.



Frage: Habe ich das Fahrrad geschrieben?



Ich neige dazu zu vermuten, dass ähnliche Lösungen bereits in der Vergangenheit geschrieben wurden, aber ab Juli 2020 haben mir weder Englisch noch Polnisch, noch Tschechisch, noch Russisch und Ukrainisch geholfen, etwas Wertvolles und Anwendbares für meinen Fall zu finden. Deshalb hat sich der Schöpfer in mir „eingeschaltet“, und aus tiefstem Herzen habe ich die Lösung für dringende geschäftliche Probleme entworfen. Wenn es ein Problem gibt, muss es schließlich so schnell und wirtschaftlich wie möglich gelöst werden, und außerdem darf die Qualität nicht vergessen werden.



Ein klares Beispiel für Leistung



Ein sehr bekanntes CMS, dessen Name normalerweise nicht genannt wird:







Meine Lösung:







Offensichtlich ist die Geschwindigkeit, mit der das erste Byte abgerufen wird, etwas höher, wie bei allen anderen Indikatoren, die sich auf die Download-Geschwindigkeit beziehen. Ich werde nicht einmal die Anzahl der Anfragen im Front-End im klassischen CMS und in demonstrieren diese Mini-Lösung.



Wird es eine Fortsetzung geben?



Jetzt ist das System größtenteils geschrieben und hat mehrere Updates gesehen. In naher Zukunft plane ich, die Dokumentation in der einen oder anderen Form vorzubereiten, diese Lösung jedoch auf einer offenen Reise freizugeben, obwohl ich sagen muss, dass er interne Probleme jeden Tag perfekt löst. Es gibt einige weitere interessante und unterhaltsame Momente aus dem Bereich der Dateisuche und Inhaltssuche in HTML-Dateien, die unter Umgehung der PHP-Funktionen implementiert wurden und die Ausführung dieser Anforderungen erheblich beschleunigten. Ich verspreche, in naher Zukunft über diese Themen zu schreiben.



All Articles