Comment j'ai écrit un CMS rapide pour sites statiques en une soirée selon les règles de la logique métier dans un seul fichier

Pas seulement Wordpress



Pas seulement Wordpress


Le marché des CMS a longtemps été un endroit où Wordpress, Joomla, Drupal sont les trois premiers. Ces temps merveilleux passent déjà progressivement, même si WP, ralentissant dans la dynamique de l'émergence de nouveaux sites, est toujours en tête. Pas étonnant: une communauté active, un grand nombre de plugins. Mais cet article ne sera pas du tout consacré aux «étoiles montantes» du marché des systèmes de gestion de contenu (bonjour, les solutions basées sur Laravel). Au contraire, même l'objet de notre attention sera la «matière noire», qui est quelque peu décalée. À savoir - roulement de tambour ...



Sites statiques



CMS pour sites statiques



Qui a besoin de la statique en 2k20?



Question rationnelle! Il semblerait que l'époque du téléphone Internet et Windows95 soit déjà révolue, mais la demande de génération statique de code html recommence à prendre de l'ampleur. Et la bonne société est à blâmer, bien sûr. Google PageSpeed ​​est le très grand et puissant Urfi ... En général, c'est ce compteur de performance de page Web qui est devenu à la fois le moteur de la progression du monde Internet et le casse-tête de tous les développeurs Web, et plus encore des pigistes. Les résultats de mesure de cet outil sont basés sur les normes de Google, et il est bien connu que celles-ci constituent la base du classement. Et objectivement, charger une page pendant plus de trois secondes augmente automatiquement le nombre de rebonds. Ainsi, la statique devient l'une des solutions alternatives pour remplacer ou en complément de l'assemblage dynamique des pages par la puissance de tout CMS, framework ou options auto-écrites.



,



En service, je m'occupe de nombreux projets, parmi lesquels il y a des analyseurs, mais aussi des solutions dans le domaine du e-commerce. Je ne me plains pas de la vie, mais un problème ne vient pas de la catégorie «2e année, école primaire». Moi, en tant que développeur et gestionnaire (et gérer votre petite entreprise, comme vous le savez, j'ai également besoin de compétences dans ce domaine), comme c'est le cas en polonais «dostałem się do martwego kąta» (dans un coin reculé, en un mot). La condition est la suivante: vous devez rédiger en quelques jours une solution qui devrait être facile à installer et servir n'importe quel nombre de pages statiques. De plus, l'administrateur devrait pouvoir rapidement supprimer et ajouter une telle solution à n'importe quel projet via une connexion FTP / SFTP, ou même s'il n'a pas accès à FTP / SFTP. D'autre part, la condition était que la version minimale soit PHP 5.6 et il devrait être assez bien pris en charge comme chaque version plus récente.



L'administrateur doit



  1. supprimer / ajouter / modifier des pages à l'aide du panneau d'administration;
  2. rechercher globalement et rapidement dans le contenu des pages (en tenant compte des différents encodages, langues;
  3. recherche par nom de fichier;
  4. supprimer / insérer / modifier les éléments nécessaires sur toutes les pages en un seul clic depuis le panneau d'administration;
  5. la solution doit être facile à installer et à désinstaller.


La sécurité ne doit pas autoriser l'utilisation de l'injection SQL ou toute autre tentative d'interférer avec le travail.



Une obligation supplémentaire serait la possibilité d'utiliser le panneau d'administration et toutes ses fonctions via l'API. En gros, s'il existe de tels panneaux d'administration sur plus de 50 domaines, il devrait y avoir un accès à distance en pouvant faire des demandes.



République tchèque, soir, été, café



Les soirées extrêmement calmes dans les Monts des Géants ne font que contribuer à la paresse. Mais, comme le dit le vieux proverbe, qui ne fonctionne pas ...



Ainsi, ayant rassemblé mes pensées et revigoré mon esprit et ma décision, j'ai commencé à concevoir. Le fait est très clair que la création d'une solution procédurale ne peut pas être quelque chose d'aussi réussi que possible dans ce cas. Ce n'est un secret pour personne qu'il est possible de soutenir le système à l'avenir, mais en même temps, vous ne voulez pas trop tout changer.



Et oui, bon sang, j'ai décidé de transférer dans un seul fichier l'approche déjà établie dans la plupart des frameworks - concept POO et MVC.



Du point de vue de la performance, le procéduralisme pourrait être la meilleure option, mais:



  • n'oublions pas l'aspect des besoins croissants des clients et le besoin parallèle d'ajouter de nouvelles fonctionnalités aux interfaces de notre application web;
  • — , , ;
  • — , “ ” , - -, -.


Il a été décidé d'abandonner les bases pour l'instant en raison de l'absence de tout besoin, donc le terme «modèle» dans tout ce qui est ci-dessus est un concept non réalisé dans mon architecture. Le manque d'implémentation ici a fait du bon travail, car l'injection SQL n'est plus possible en principe.



Structurer



Partant du fait que nous avons un fichier et qu'il y a une règle principale - un seul fichier doit être ajouté et après cela vous pouvez immédiatement travailler et maintenir le répertoire dans lequel vous l'avez ajouté, il est clair que même les classes ne vous sauveront pas de "la jambe du diable".



Quelle est la solution?



Intuitivement: nous divisons le fichier en parties structurelles de la vue: les classes du système de base sont tout en haut, les contrôleurs sont plus bas, les vues sont encore plus basses, mais le ballet entier est fermé par des itinéraires. Chaque partie a reçu un en-tête des commentaires avec une explication, pour ne pas oublier au bout d'un moment qu'ici:



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


Dénomination fonctionnelle - les méthodes de classe ont été nommées selon la pratique camelCase et correspondent à un rôle fonctionnel, par exemple «checkAdminCredentials» est une formulation plus que compréhensible pour une méthode.



Une tentative de décrire tout ce qui est possible - je ne dirai pas que j'ai correspondu à cette intention jusqu'à la toute fin du développement, au final, j'ai manœuvré entre vitesse et lisibilité du code, mais j'ai réussi à accompagner les décisions clés de commentaires comme // pour obtenir du HTML statique.



Comment se déroule le routage?



Le besoin d'une séparation plus ou moins claire des interfaces a été immédiatement accepté par moi comme un besoin clé. Ce composant, s'il n'est pas correctement implémenté, peut devenir le «pic» de l'application en raison de la confusion sur la route que le contrôleur appelle.



Sur la base du problème mentionné ci-dessus, j'ai rendu la classe de routage plutôt primitive, mais fonctionnelle. Le routage fonctionne à l'aide de requêtes GET - bien sûr, pas entièrement esthétique, mais le besoin immédiat d'une mise en œuvre rapide est résolu à 100%. Le routeur est devenu le seul point d'entrée pour une application Web (c'est-à-dire pour le panneau d'administration), ce qui, à mon avis, est une solution idéale pour la facilité de développement. Dans cette classe, le front-end et le back-end de l'application Web sont assemblés et le HTML généré est sorti par retour.



Question: ai-je écrit le vélo?



J'ai tendance à soupçonner que des solutions similaires ont déjà été écrites dans le passé, mais en juillet 2020, ni l'anglais, ni le polonais, ni le tchèque, ni le russe avec l'ukrainien ne m'ont aidé à trouver quelque chose de valable et applicable à mon cas. C'est pourquoi le créateur s'est «allumé» en moi, et du fond du cœur j'ai conçu la solution des problèmes commerciaux urgents. Après tout, s'il y a un problème, il doit être résolu aussi rapidement et économiquement que possible, et en outre, la qualité ne doit pas être oubliée.



Un exemple clair de performance



Un CMS très connu, dont le nom n'est généralement pas appelé:







Ma solution:







Evidemment, la vitesse d'obtention du premier octet est légèrement supérieure, comme tous les autres indicateurs liés à la vitesse de téléchargement, je ne démontrerai même pas le nombre de requêtes sur le front-end dans les CMS classiques et en cette mini solution.



Y aura-t-il une suite?



Maintenant, le système est en grande partie écrit et a vu plusieurs mises à jour. Dans un proche avenir, je prévois de préparer la documentation sous une forme ou une autre, mais de publier cette solution sur le voyage ouvert, même si je dois dire qu'il résout parfaitement les problèmes internes chaque jour. Il y a des moments plus intéressants et divertissants de la section de recherche de fichiers et de recherche de contenu dans les fichiers html, qui ont été implémentés en contournant les capacités PHP, ce qui a rendu l'exécution de ces requêtes beaucoup plus rapide. Je promets d'écrire sur ces sujets dans un proche avenir.



All Articles