Cursos Magento

Porque a unificação de JS raramente funciona (e como resolver)

,

Atualizado em 14 de abril de 2020

Tanto no Magento 1 quanto no Magento 2 é possível unificar todas as chamadas JavaScript nativamente. Desta forma, ao invés de realizarmos várias chamadas para cada arquivo .js, o Magento juntará todos os arquivos em um único arquivo, fazendo assim uma única chamada.

No entanto, a maioria dos desenvolvedores já perceberam que ao ativar esse recurso, a maioria das classes JavaScript e implementações de outros módulos param de funcionar. E isso é ainda pior no Magento 1.

Porque isso acontece?

  1. O principal motivo está relacionado a conflitos entre as bibliotecas jQuery e Prototype (no Magento 1). Basicamente isso ocorre pois ambas bibliotecas são chamadas através do alias $.

Sendo assim, se o jQuery é inserido antes do prototype, o $ do prototype deixa de funcionar. E vice-versa.

Como resolver?

Para resolver isso você precisará:

  1. Sempre inserir a biblioteca do jQuery antes de qualquer outro script, principalmente antes do Prototype
  2. Inserir jQuery.noConflict(); no final do arquivo jQuery ou adicioná-lo logo após a sua inclusão.
  3. Certifique-se que nenhuma outra biblioteca chama o jQuery usando $.

No caso do passo 3, você pode substituir qualquer chamada do tipo $( por jQuery(. Apenas tome cuidado para não alterar os JavaScripts que estejam fazendo isso para se referenciar ao Prototype.

Considero inclusive uma boa prática usar jQuery( ao invés de $( ao referenciar o jQuery. Isso evita uma série de conflitos e possíveis dores de cabeça.

* No caso do passo 1, já li relatos que dizem exatamente o oposto. Ou seja, pra inserir o jQuery depois do prototype. Me conte nos comentários se funcionar pra você.

Porque devo me preocupar com isso?

Por padrão, tanto o Chrome quanto o Firefox, limitam o número de requisições simultâneas em um site, limitando a 6 requisições paralelas por servidor. Ou seja, quanto mais arquivos cada página do seu e-commerce requisitar dentro de um mesmo servidor, maior será o tempo de carregamento.

Queueing é o tempo que o navegador ficou esperando para fazer download deste recurso

Embora isso possa ser diferente com o novo padrão HTTP/2, a redução no número de requests nunca será mal vista pelos navegadores e muito menos pelos buscadores.

E como sabemos, quando se fala em comércio eletrônico, cada segundo impacta no seu faturamento.

E aí? Vai investir um tempo nisso ou deixa pra depois?

Últimos posts por Ricardo Martins (exibir todos)
Comentários

Deixe seu comentário

[fbcomments url="https://www.magenteiro.com/blog/magento-1/porque-unificar-js-nao-funciona/"]