Internet, Informática e Tecnologia

Solução: Drupal 8, 9 e 10 muito lento no Windows

Drupal logo

Se tivermos o Drupal instalado em um ambiente de desenvolvimento Linux, ele funciona perfeitamente mesmo em uma máquina virtual com 1 GB de RAM e 1 núcleo de CPU. Quando mudamos para o Windows as coisas mudam drasticamente, mesmo com 16 GB de RAM e 6 núcleos de CPU tudo parece muito lento, com tempos de espera em média de 5 segundos, pelo menos para um ambiente de desenvolvimento, sendo a única coisa para isso é aceitável executá-lo no Windows. Este problema não é novidade, vem acontecendo desde a adoção do IPv6 pelo Windows 7. Não entrarei em detalhes sobre qual é a causa e me concentrarei em fornecer a solução.

Configuração atual

  • Drupal 9
  • MariaDB 1.5
  • PHP 7.4
  • Nginx 1.14
  • PHP opcache
  • Laragon 5

Se utilizássemos uma máquina virtual com Linux dentro do Windows não teríamos o problema, mas para facilitar o uso decidimos usar o Laragon, mas neste caso específico o mesmo resultado seria com XAMPP, WampServer ou WPN-XM.

Solução

Modificações no Windows

Primeiro temos que modificar nosso arquivo hosts no caminho C:\Windows\system32\drivers\etc\hosts, e verifique se uma linha foi encontrada com o seguinte:

127.0.0.1    localhost

Pode haver várias linhas com 127.0.0.1, sem problemas.

Modificações no Drupal

Então, em nosso arquivo de configuração do site Drupal, que geralmente é [raiz]/web/sites/default/settings.php ou [raiz]/web/sites/default/settings.local.php, modificamos o campo “host” do nosso banco de dados e definimos o valor “127.0.0.1”, este passo é muito importante, no Linux é recomendado usar “localhost”, mas não no Windows.

Como extra e altamente recomendado, percebi que o módulo BigPipe do núcleo Drupal não funciona muito bem no Windows e que ao desabilitá-lo ganhamos alguns segundos extras, pelo menos em um ambiente de desenvolvimento nativo no Windows, as coisas ficariam muito diferente em uma máquina virtual com Linux.

Modificações no MySQL ou MariaDB

Finalmente, modificamos o arquivo de configuração MySQL ou MariaDB, geralmente denominado my.ini, na seção [mysqld] adicionamos ou modificamos os seguintes valores:

[mysqld]
#...
#...
skip-name-resolve
bind-address=*

Para ter um pouco mais de segurança, recomendo bloquear a porta 3306 ou qualquer outra que estejamos usando para MySQL, para evitar que eles se conectem remotamente. A diretiva skip-name-resolve desativa a resolução DNS sempre que um cliente se conecta, e bind-address nos permite conexões de qualquer endereço IP. Não devemos esquecer que temos que reiniciar o MySQL ou MariaDB com nosso gerenciador de pacotes, ou nos serviços do Windows.

Conclusões

Embora este problema não seja novo e, ao mesmo tempo, não seja grave, uma das coisas que se tornou importante nos últimos anos é o desempenho das aplicações web, pois poderíamos dizer que esperar alguns segundos não é nada durante o desenvolvimento, mas 5 segundos já é uma tortura, e embora neste caso o Drupal utilize um cache interno, o problema ainda existe apenas de forma oculta ou pelo menos apenas para usuários da área de administração. Me dei ao trabalho de escrever esse post porque após ter alguns problemas intermitentes com o Vagrant, resolvi usar algo mais prático e menos sujeito a erros como uma aplicação nativa e não virtualizada. Esclareço que não tenho nada contra a virtualização, pelo contrário, o ideal é ter um ambiente de produção e desenvolvimento o mais semelhante possível, até mesmo ao nível do sistema operacional.

 

Conteúdo semelhante