Principais lições aprendidas ao otimizar o WordPress (para o sucesso do cliente)

Publicados: 2022-09-15
Índice ocultar
1. O que me encorajou a falar no WordCamp Mumbai?
2. Os três problemas que me deram noites sem dormir (com soluções e lições aprendidas com eles)
2.1. Reduzindo o tempo de carregamento da página de 3 minutos para milissegundos…
2.1.1. Problema
2.1.2. Solução
2.1.3. Aprimorando a solução
2.2. Como um erro de tempo limite se tornou o recurso mais vendido do nosso plugin?
2.2.1. Problema
2.2.2. Solução
2.2.3. Aprimorando a solução
2.3. Como os ambientes de hospedagem compartilhada nos forçaram a reescrever nosso plugin?
2.3.1. Problema
2.3.2. Solução
3. Resumo das lições
4. Qual é a sua escolha?

Quando foi a última vez que você teve um momento de nuvem nove?

Passando na escola com louvor.. ou quando sua namorada/namorado aceitou sua proposta?

Eu tive um momento nublado duas semanas atrás! Eu estava falando no WordCamp Mumbai 2017 – o maior WordCamp da Índia.

O tópico era algo próximo ao meu coração e algo com o qual lido todos os dias – lições aprendidas otimizando o WordPress para o sucesso do cliente.

É sobre os problemas que enfrentei ao lidar com grandes bancos de dados do WordPress e como os enfrentei.

O que me encorajou a falar no WordCamp Mumbai?

Desenvolver um plugin WordPress é uma ótima experiência de aprendizado. Você pode estender uma estrutura excelente, concentrar-se em escrever código que resolva os problemas dos clientes e trabalhar com ótimos membros da equipe.

Na StoreApps, os desenvolvedores não apenas escrevem código, mas também dão suporte aos clientes. Resolver as dúvidas dos clientes me deu algumas das maiores lições.

Então, tudo isso é minha rotina diária, e é muito emocionante.

Mas você sabe o que é mais emocionante para mim? Trabalhando com grandes bancos de dados e resolvendo problemas complexos de banco de dados!

Nossos plugins são usados ​​por mais de 35.000 usuários. E já vi muitos desafios trabalhando com grandes lojas WooCommerce e sites populares do WordPress.

Felizmente, consegui resolver esses desafios e aprendi muito.

Mas espere, assim como eu, haveria centenas de outros desenvolvedores enfrentando problemas semelhantes trabalhando com WordPress e WooCommerce.

Então decidi compartilhar minhas lições com os outros.

E nada melhor do que uma oportunidade de palestrar no maior WordCamp da Índia!

Os três problemas que me deram noites sem dormir (com soluções e lições aprendidas com eles)

Finalmente, aqui estão os três problemas sobre os quais eu estava falando. Então vamos começar com eles um por um.

Reduzindo o tempo de carregamento da página de 3 minutos para milissegundos…

Problema

Eu enfrentei uma situação com o plugin Smart Coupons em que uma funcionalidade simples de exibir cupons nas páginas cruciais da loja (ou seja, carrinho, checkout e páginas da minha conta) paralisou o processo de checkout.

Smart Coupons é um plugin para criação e manuseio de cupons e vales-presente em massa para uma loja WooCommerce.

Solução

Agora, o uso do WP Query resultaria em vários JOINs , pois mostrar os cupons disponíveis para um usuário específico exige que várias metacondições sejam avaliadas.

Então, em vez de usar a maneira ideal de consultar o banco de dados, ou seja, WP Query, escrevi consultas SQL personalizadas .

Otimizando o WordPress
Código antigo de cupons inteligentes

Além disso, nas consultas personalizadas, o que eu fiz foi:

  • Em vez de verificar todas as metacondições em uma única consulta MySQL, simplesmente avaliei a primeira metacondição
  • Depois disso, armazenei a lista separada por vírgulas de post_ids (ids de cupom) na tabela de opções
  • E então, simplesmente mapeei e reduzi o mesmo conjunto de post_ids avaliando cada uma das outras metacondições

Fiz isso até obter um conjunto final de post_ids que precisava ser exibido para o usuário específico.

Otimizando o WordPress
Novo código de cupons inteligentes

Aprimorando a solução

Isso resolveu os problemas de carregamento da página. No entanto, para obter o carregamento da página em milissegundos, como sugerido pelo nosso amigo, tive que redefinir o problema.

Em vez de mostrar todos os cupons para os quais o usuário está qualificado,
Eu defini um limite para o número de cupons que seriam exibidos aos usuários nas páginas de carrinho e checkout.

Como um erro de tempo limite se tornou o recurso mais vendido do nosso plugin?

Problema

Para processar uma atualização de banco de dados muito grande, eu escrevi consultas personalizadas, pois o uso das principais funções do WordPress possivelmente se tornaria uma grande sobrecarga.

Exemplo: Se alguém tiver que reduzir os preços de todos os produtos em sua loja em 40%, basta selecionar 'Preço', 'diminuir em 40%' e clicar no botão atualizar. Isso é facilmente possível usando nosso plugin Smart Manager, projetado para facilitar as atualizações em massa em suas lojas WooCommerce.

Mas, o processo de atualização em lote começou a ficar paralisado e a dar erros de tempo limite sempre que alguém tentava atualizar 1k produtos ou toda a loja ao mesmo tempo .

Inicialmente, comecei a procurar otimizar as consultas, mas isso não ajudou.

Minha situação era parecida com a de um concorrente do Castelo de Takeshi. Não importa o quanto eu tentasse, eu continuava caindo na água.

Otimizando o WordPress

Solução

Diz-se que às vezes você tem que sair do problema e ter uma visão panorâmica do problema para encontrar a causa exata.

Eu fiz o mesmo e descobri que o problema real era
não no nível da consulta, mas no nível da solicitação .

Então, o que eu fiz foi em vez de uma única solicitação fazer todas as atualizações, eu quebrei a mesma em várias chamadas AJAX sucessivas fazendo um lote menor de atualizações e que eliminou completamente os erros de tempo limite.

Otimizando o WordPress
Solicitações de Ajax de atualização em lote do Smart Manager

Aprimorando a solução

Agora, essa abordagem de dividir uma única solicitação em várias solicitações AJAX menores não apenas resolveu o erro de tempo limite, mas também melhorou a UX de atualização em lote .

Agora o gerente da loja estava sendo atualizado sobre o andamento da atualização, o que simplesmente aumentou sua confiança no produto.

Além disso, a mesma abordagem permitiu que o Smart Manager lidasse com atualizações em lote para a loja WooCommerce de qualquer formato e tamanho e fez com que o Smart Manager se tornasse um dos plugins mais vendidos do StoreApps.

Como os ambientes de hospedagem compartilhada nos forçaram a reescrever nosso plugin?

Problema

Para qualquer plugin de relatórios, é crucial fornecer não apenas relatórios precisos, mas rápidos de estatísticas. Agora, obter estatísticas de relatórios exigia várias consultas envolvendo a junção de 2 tabelas principais do WordPress, ou seja, postagens e postmeta.

Otimizando o WordPress
Postagens WordPress Postmeta ERD

Como já vimos acima, JOINs são muito caros .

No Smart Reporter (nossa solução de relatórios para WooCommerce), estávamos mostrando 20 estatísticas de relatórios diferentes em uma única visualização de página e também no carregamento da página.

Solução

Então, eu segui a mesma abordagem que a maioria das soluções de relatórios seguem, que foi a criação de uma tabela de resumo, ou seja, uma tabela personalizada de estrutura plana.

Essa tabela conteria um resumo de todos os dados exigidos pelo plugin e, assim, eliminaria o uso de junções e melhoraria o tempo de carregamento da página.

Otimizando o WordPress
Tabela de resumo do Smart Reporter

Além disso, para manter essas tabelas de resumo atualizadas, usamos ações e filtros do WordPress.

Resumo das lições

  • Siga as melhores práticas tanto quanto possível
  • Nenhuma consulta em loop
  • Evite grandes junções complexas
  • Faça mais no nível do MySQL do que no nível do PHP
  • Vá mais fundo no código
  • Tabelas de resumo / personalizadas / temporárias
  • Atenção ao UX – capacidade de resposta, notificações…
  • Você está resolvendo o problema certo?

Qual é a sua escolha?

Tenho certeza que você já lidou com alguns problemas enormes e encontrou soluções para eles. Deixe-nos saber sobre isso em nossa seção de comentários abaixo. Seria muito valioso para os leitores.