Como escrevi um CMS rápido para sites estáticos em uma noite de acordo com as regras da lógica de negócios em um arquivo

Não Wordpress sozinho



Não Wordpress sozinho


O mercado de CMS tem sido um lugar onde Wordpress, Joomla, Drupal estão entre os três primeiros. Esses tempos maravilhosos já estão passando gradualmente, embora WP, desacelerando na dinâmica do surgimento de novos sites, ainda esteja liderando. Não é à toa: uma comunidade ativa, um grande número de plug-ins. Mas, este artigo não será de forma alguma dedicado às "estrelas em ascensão" do mercado de sistemas de gerenciamento de conteúdo (olá, soluções baseadas em Laravel). Em vez disso, até mesmo o objeto de nossa atenção será a "matéria negra", que está um pouco deslocada. Ou seja - rufar de tambores ...



Sites estáticos



CMS para sites estáticos



Quem precisa de estática em 2k20?



Questão racional! Parece que os dias da Internet telefônica e do Windows95 já passaram, mas a demanda por geração de código html estático está começando a ganhar força novamente. E a boa empresa é a culpada, é claro. O Google PageSpeed ​​é o grande e poderoso Urfi ... Em geral, é esse medidor de desempenho de página da web que se tornou o motor do progresso da Internet global e a dor de cabeça de todos os desenvolvedores da web, e ainda mais para freelancers. Os resultados da medição desta ferramenta são baseados nos padrões do Google, e é sabido que estes são a base para o ranking. E, objetivamente, carregar uma página por mais de três segundos aumenta automaticamente o número de rejeições. Assim, a estática passa a ser uma das soluções alternativas para substituir ou complementar a montagem dinâmica de páginas pelo poder de qualquer CMS, framework ou opções de escrita própria.



,



De plantão, estou empenhado em atender diversos projetos, entre os quais há parsers, mas também soluções na área de e-commerce. Não estou reclamando da vida, mas surgiu um problema não da categoria “2º ano, ensino fundamental”. Eu, como desenvolvedor, e gerente (e administrar meu pequeno negócio, como você sabe, exige habilidades dessa área), como é em polonês “dostałem się do martwego kąta” (em um canto remoto, em uma palavra). A condição é a seguinte: você precisa escrever uma solução dentro de alguns dias que deve ser fácil de instalar e servir a qualquer número de páginas estáticas. Além disso, o administrador deve ser capaz de remover e adicionar rapidamente tal solução a qualquer projeto via conexão FTP / SFTP, ou mesmo se ele não tiver acesso a FTP / SFTP. Por outro lado, a condição era que a versão mínima fosse PHP 5.6 e deve ser bem suportado como toda versão mais recente.



O administrador deve



  1. excluir / adicionar / alterar páginas usando o painel de administração;
  2. pesquisa global e rapidamente no conteúdo das páginas (levando em consideração diferentes codificações, idiomas;
  3. pesquisar por nomes de arquivo;
  4. excluir / inserir / alterar os elementos necessários em todas as páginas com um clique no painel de administração;
  5. a solução deve ser fácil de instalar e desinstalar.


A segurança não deve permitir o uso de injeção de SQL ou qualquer outra tentativa de interferir no trabalho.



Uma obrigação adicional seria a capacidade de usar o painel de administração e todas as suas funções por meio da API. A grosso modo, se houver painéis de administração em mais de 50 domínios, deve haver acesso a eles remotamente, sendo possível fazer solicitações.



República Tcheca, noite, verão, café



Noites extremamente calmas nas Montanhas Gigantes apenas contribuem para a preguiça. Mas, como diz o velho provérbio, quem não funciona ...



Assim, tendo recolhido o meu pensamento e recuperado o meu espírito e determinação, comecei a desenhar. A coisa é muito clara que a criação de uma solução processual não pode ser algo tão bem sucedido quanto possível neste caso. Não é segredo que há uma perspectiva de suporte do sistema no futuro, mas ao mesmo tempo você não quer mudar tudo muito.



E sim, droga, decidi transferir para um arquivo a abordagem já estabelecida na maioria dos frameworks - conceito OOP e MVC.



Do ponto de vista do desempenho, o procedimentalismo pode ser a melhor opção, mas:



  • não vamos nos esquecer do aspecto das necessidades crescentes do cliente e da necessidade paralela de adicionar novos recursos às interfaces de nosso aplicativo da web;
  • — , , ;
  • — , “ ” , - -, -.


Decidiu-se abandonar as bases por enquanto por falta de necessidade, pois o termo “modelo” em tudo o que está acima é um conceito não realizado na minha arquitetura. A falta de implementação aqui fez um bom trabalho, porque a injeção de SQL não é mais possível em princípio.



Estruturante



Partindo do fato de que temos um arquivo e há uma regra principal - apenas um arquivo deve ser adicionado e depois disso você pode imediatamente trabalhar e manter o diretório ao qual o adicionou, é claro que mesmo as classes não o salvarão da "perna do diabo".



Qual é a solução?



Intuitivamente: dividimos o arquivo em partes estruturais da visualização: as classes do sistema básico estão no topo, os controladores são inferiores, as visualizações são ainda mais baixas, mas todo o ballet é fechado por rotas. Cada parte recebeu um cabeçalho dos comentários com uma explicação, para não esquecer daqui a pouco que aqui:



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


Nomenclatura funcional - os métodos de classe foram nomeados de acordo com a prática do camelCase e correspondem a uma função funcional, por exemplo, “checkAdminCredentials” é uma formulação mais do que compreensível para um método.



Uma tentativa de descrever tudo o que é possível - não direi que correspondi a essa intenção até o final do desenvolvimento, no final, manobrei entre a velocidade e a legibilidade do código, mas consegui acompanhar as principais decisões com comentários como // para obter html estático.



Como o roteamento é feito?



A necessidade de uma separação mais ou menos clara das interfaces foi imediatamente aceita por mim como uma necessidade fundamental. Este componente, se não implementado corretamente, pode se tornar o “pico” do aplicativo devido à confusão sobre qual rota o controlador está chamando.



Com base no problema mencionado acima, fiz a classe de roteamento bastante primitiva, mas funcional. O roteamento funciona usando solicitações GET - é claro, não totalmente agradável esteticamente, mas a necessidade imediata de implementação rápida é 100% resolvido. O roteador se tornou o único ponto de entrada para um aplicativo da web (ou seja, para o painel de administração), o que, em minha opinião, é uma solução ideal para facilitar o desenvolvimento. Nesta classe, o front-end e o back-end do aplicativo da web são montados e o HTML gerado é enviado de volta.



Pergunta: eu escrevi a bicicleta?



Estou inclinado a suspeitar que soluções semelhantes já foram escritas no passado, mas em julho de 2020, nem o inglês, nem o polonês, nem o tcheco, nem o russo e o ucraniano me ajudaram a encontrar algo válido e aplicável ao meu caso. É por isso que o criador “ligou” em mim, e do fundo do meu coração eu projetei a solução de problemas urgentes de negócios. Afinal, se houver um problema, ele deve ser resolvido da maneira mais rápida e econômica possível e, além disso, a qualidade não deve ser esquecida.



Um exemplo claro de desempenho



Um CMS muito famoso, cujo nome não costuma ser chamado:







Minha solução:







Obviamente, a velocidade de obtenção do primeiro byte é um pouco maior, como todos os outros indicadores relacionados à velocidade de download, não irei nem demonstrar o número de solicitações para o front-end no CMS clássico e no esta mini solução.



Haverá uma sequência?



Agora, o sistema está quase todo escrito e passou por várias atualizações. Num futuro próximo, pretendo preparar a documentação de uma forma ou de outra, mas lançar essa solução em uma viagem aberta, embora deva dizer que ele resolve problemas internos todos os dias com perfeição. Existem alguns momentos mais interessantes e divertidos da seção de busca de arquivos e busca de conteúdo em arquivos html, que foram implementados contornando os recursos do PHP, o que tornou a execução dessas solicitações muito mais rápida. Prometo escrever sobre esses tópicos em um futuro próximo.



All Articles