| Recommend this page to a friend! |
| Packages of Rodrigo Faustino | Projeto Loja | README.md | Download |
|
|||||||||||||||||||||
Projeto Loja - Modulo de Compressao de Imagens no FrontendEste documento descreve a arquitetura e as decisoes tecnicas por tras do modulo de upload e compressao de imagens deste projeto. O foco principal e a eficiencia e a experiencia do usuario, transferindo a carga pesada de processamento de imagem do servidor para o dispositivo do cliente (navegador). Decisao Tecnica: Compressao no Frontend (Client-Side)Tradicionalmente, uploads de imagens funcionam enviando o arquivo original (muitas vezes com 5MB, 10MB ou mais) para o servidor, que entao processa, redimensiona e comprime a imagem. Neste projeto, adotamos uma abordagem moderna de pré-processamento no cliente. Por que essa decisao foi tomada?
Estrutura de Pastas e IntegracaoA organizacao do projeto separa claramente as responsabilidades, mas mantem uma integracao fluida entre Backend e Frontend:
Integracao Inteligente (AssetManager)O projeto utiliza uma classe
Como Instalar e RodarSiga os passos abaixo para configurar o ambiente de desenvolvimento. 1. Instalacao das Dependencias do BackendNavegue ate a pasta do nucleo da API e instale as bibliotecas PHP:
2. Instalacao das Dependencias do FrontendNavegue ate a pasta dos arquivos fonte do frontend e instale as ferramentas Node.js:
3. Rodando o ProjetoVoce precisara de dois terminais abertos simultaneamente. Terminal 1 (Build do Frontend em tempo real): Este comando vai monitorar mudancas no JS e atualizar os arquivos na pasta publica.
Terminal 2 (Servidor PHP): Inicie o servidor embutido do PHP apontando para a pasta publica.
Acesse no navegador: Implantacao em Producao (Build)Para rodar o projeto em um ambiente de producao (ou simular o comportamento final), voce nao precisa manter o terminal do Node aberto. 1. Gerar o BuildEste comando vai processar todos os arquivos JS/CSS, minifica-los e salva-los na pasta
2. Rodar Apenas o PHPApos o build, o Node.js nao e mais necessario. O PHP detectara automaticamente os arquivos gerados atraves do
3. Configuracao em Hospedagem Compartilhada (.htaccess)Caso voce nao tenha acesso para mudar a pasta raiz do servidor (DocumentRoot) para Arquivo: /.htaccess
Isso fara com que o site carregue corretamente mesmo se os arquivos estiverem fora da pasta publica padrao. Analise dos Arquivos PrincipaisA logica central reside em dois arquivos JavaScript na pasta 1. image-compressor.js (O Motor)Este e um modulo ES6 puro, agnostico de framework, focado em uma unica responsabilidade: transformar um arquivo bruto em um arquivo otimizado. Principais Funcionalidades: API Canvas*: Utiliza o elemento canvas HTML5 para renderizar e redimensionar a imagem com alta performance. Algoritmo de Media de Cor (getAverageColor)*: Implementa uma leitura direta dos bytes da imagem para calcular a cor media dominante. Isso e feito amostrando pixels para garantir que a operacao leve apenas alguns milissegundos. Conversao WebP*: Exporta nativamente para o formato WebP, que oferece compressao superior ao JPEG/PNG com menor perda de qualidade. Retorno Rico*: Devolve um objeto contendo metadados valiosos: dimensoes originais vs. finais, tamanho em bytes e a cor hexadecimal extraida. 2. main.js (O Orquestrador)Este arquivo atua como a camada de controle, ligando a interface do usuario (DOM) a logica de compressao. Fluxo de Trabalho: 1. Preview Imediato: Mostra a imagem original instantaneamente ao usuario. 2. Processamento Assincrono: Chama a compressao e aguarda o resultado sem travar a interface. 3. Feedback Visual: Exibe a comparacao de tamanho e a cor predominante. 4. Preparacao para Envio: Constroi o FormData anexando o arquivo ja processado (WebP) e nao o original. 5. Envio de Metadados: Envia tambem largura, altura e cor dominante como campos de texto para o backend. Potencial do ProjetoEste modulo serve como um modelo de arquitetura que pode ser replicado em diversas aplicacoes. Ele nao e apenas um script de upload, mas uma solucao completa de tratamento de midia. Casos de Uso:
Extensibilidade:O codigo e modular. O componente de compressao pode ser importado em projetos React, Vue, Angular ou React Native. |