Ferramentas para minificar arquivos JavaScript

As boas práticas de JavaScript e ordenação correta do código permite aos desenvolvedores trabalharem de forma eficiente, ordenada e facilita a leitura do código ao se trabalhar em grupo. No entanto esse código é feito para entendimento dos humanos trabalhando com ele e para as maquinas, muito do que se coloca é desnecessário. Para isso efetuamos a minificação.

As técnicas de minificação são utilizadas por muitos desenvolvedores de website devido ao fato de gerarem versões dos arquivos que são menores e por isso, carregam mais rápido e permitem que o site execute sem afetar a experiencia de uso dos usuários com conexões mais lentas.

Para a sorte de muitos, existem diversas ferramentas disponíveis online que permitem que a minificação seja feita sem muito trabalho ou erro. Segue abaixo algumas delas:

JSMin

 https://www.crockford.com/javascript/jsmin.html

O JSMin promete conseguir reduzir arquivos JavaScript em até 50% através da remoção de comentários, linhas de espaço e quebras de linhas desnecessárias. Ao mesmo tempo, o programa sabe levar em consideração que certas peculiaridades da linguagem para evitar erros ao minificar Strings e onde o código pode considerar um fechamento de bloco implícito.

Para executa-lo, basta fazer um download do executável em formato ZIP ou do código fonte em C fornecido no próprio site.

YUI Compressor

http://yui.github.io/yuicompressor/

O YUI Compressor é mantido pelo Yahoo e serve para minificar tanto arquivos JavaScript quanto CSS. Para comprimir os arquivos JS, ele depende do Rhino que é uma implementação Open Source do JavaScript escrita totalmente em Java.

Ele começa analizando o arquivo JavaScript de para entender como ele está estruturado e após, imprime o fluxo dos tokens, omitindo o máximo de caracteres de espaço em branco e substituindo todos os símbolos locais por um símbolo de letra onde quer que tal substituição seja apropriada

AjaxminUi

http://ajaxmin.codeplex.com/

O Microsoft Ajax Minifier permite que você melhore o desempenho de seus aplicativos da Web reduzindo o tamanho dos arquivos JavaScript e CSS. Além de minificá-los, é possivel mapas de origem para arquivos JavaScript.

Com a opção -analyze na linha de comando para fornecer verificação de sintaxe no estilo “Lint” e análise de variáveis de código. Já com a opção -pretty na linha de comando resultará em um formato multilinha de fácil leitura.

Google Closure Compiler

https://developers.google.com/closure/compiler/

O Closure Compiler é uma ferramenta JavaScript para tornar o download e execução dos arquivos JS mais rápidos. Ao invés de compilar o código fonte em código de máquina, ele compila o JavaScript em uma versão “melhor”, mas ainda em JavaScript. Além de remover comentários e minificar os arquivos fornecidos, ele também analisa e otimiza o código, podendo remover ou reescrever trechos do script.

Gulp

https://gulpjs.com/

O Gulp é uma ferramenta completa que permite aos desenvolvedores reduzir o número de tarefas repetitivas que estão envolvidas com o a criação e deploy de aplicações web.

Com ele é possível minificar, organizar e controlar o tanto os arquivos JavaScript quanto os CSS. Comparado com as ferramentas mostradas aqui anteriormente, o Gulp é certamente mais complexo, mas se bem utilizado é o que permite o melhor controle e manutenção de seu projeto.

The Pirate Bay usou JavaScript para minerar moeda virtual

O The Pirate Bay testou uma funcionalidade controversa dia 15/09: usou uma biblioteca JavaScript para minerar a moeda virtual Monero. Os visitantes de algumas páginas do portal de download de arquivos torrent foram surpreendidos com um pico elevado de consumo de recursos de CPU, quando seu processamento foi sequestrado pelo código

Após quase 24 horas de silêncio, os administradores do The Pirate Bay se manifestaram oficialmente sobre o incidente, confirmando que houve testes no uso de um minerador em JavaScript e que eles estão estudando uma forma de substituir os anúncios presentes no site. “Conforme vocês devem ter percebido, nós estamos testando um minerador de Monero em JavaScript. Isso é apenas um teste. Nós realmente queremos nos livrar de todos os anúncios. Mas nós também precisamos de dinheiro suficiente para manter o site funcionando”, explicam.

A iniciativa não foi bem recebida pela comunidade de usuários, para dizer o mínimo, que convergiram para o fórum oficial do site para protestarem contra a ideia. Até mesmo alguns moderadores se posicionaram contrários ao esquema financeiro. Ainda assim, os administradores levantaram a pergunta depois: “vocês querem anúncios ou querem nos dar um pouco de seus ciclos de CPU toda a vez que visitam o site?”.

A “funcionalidade” pode ser bloqueada normalmente com um bloqueador de anúncios ou desabilitando o JavaScript e os próprios administradores do site sugerem essas possibilidades. Eles se desculparam pela forma como o código foi empregado, que chegou a consumir até 80% do processamento das máquinas afetadas, quando, na verdade, deveria consumir “apenas 20-30%”.

O serviço via JavaScript não foi desenvolvido pelo The Pirate Bay, mas através de uma empresa conhecida como Coinhive. Uma biblioteca JavaScript chamada a partir do HTML de uma página pode transformar qualquer site de internet em uma oficina de mineração de Monero enquanto a página estiver aberta em qualquer navegador. É um precedente perigoso de sequestro de processamento que apenas serve para jogar mais lenha na fogueira contra os anúncios exibidos na web e prejudicar toda a indústria a longo prazo.

Fonte:

tambotech

JavaScript é utilizado na criação de malwares

De acordo com analistas da Kaspersky, empresa de segurança contra malwares e ataques hacker, o aumento nas tentativas de ameaças do tipo na América Latina de janeiro a agosto de 2017 foi de 59% em relação ao ano passado.

Fábio Assolini, analista de segurança, diz que entre 1º de janeiro e 31 de agosto de 2017 a Kaspersky detectou 677 milhões de ameaças digitais na América Latina. Um crescimento em relação a 2016, quando 398 milhões de ameaças foram detectadas no ano inteiro, decorre da popularização de computadores e celulares na região e do barateamento da conexão à Internet, o que aumenta o número de alvos em potencial e, consequentemente, o interesse de quem desenvolve esse tipo de software malicioso.

O Brasil é palco de 53% dos ataques na região, enquanto o segundo colocado, México, responde por 17% do total. Proporcionalmente, ou seja, considerando o total de usuários em relação ao número de ataques, ainda ficamos à frente dos outros países, respondendo por 30% do total. O país também se destaque como berço desses ataques, hospedando 84% de sites e outros recursos necessários à aplicação de golpes na América Latina.

Novos tipos de ataque

Os tipos de ataque variam, acompanhando mudanças tecnológicas e comportamentais. Assolini explica que os executados via web, ou seja, através de sites maliciosos, têm confiado no JavaScript para serem executados.

O JavaScript substituiu o Java e o Flash como preferidas pelos criminosos digitais. Essas duas tecnologias já são legadas e os navegadores modernos desativam conteúdo criado para elas por padrão. Hoje, elementos em Java ou Flash precisam ser clicados para serem ativados, o que diminui consideravelmente a eficiência dos ataques.

“O JavaScript é essencial para navegar na Internet hoje. Se desativá-lo, nada vai funcionar”, explica Assolini. Recentemente, uma desenvolvedora alemã tentou acessar 20 sites populares com o JavaScript desativado. O resultado foi desastroso, comprovando o ponto do especialista. As ameaças são capazes de provocar ataques de ataques chamados “phishing”, injetar publicidade de terceiros e ocasionar ataques de ransomware.

Além das ameaças online, a Kaspersky trabalha com outras duas classificações: as que se disseminam por e-mail, onde predominam o JavaScript e documentos PDF infectados baixáveis, e as que se propagam por meios offline, que compreendem infecções por pen drives USB e disseminados em redes corporativas.

Além das ameaças online, a Kaspersky trabalha com outras duas classificações: as que se disseminam por e-mail, onde predominam o JavaScript e documentos PDF infectados baixáveis, e as que se propagam por meios offline, que compreendem infecções por pen drives USB e disseminados em redes corporativas.

Smartphones

Os smartphones atraem cada vez mais a atenção dos criminosos digitais e requerem cuidados especiais. O grande número de ataques, 931 mil entre os clientes latino-americanos da Kaspersky só nos oito primeiros meses de 2017, combinado às facilidades nas transações financeiras proporcionadas pelos aplicativos, ligaram um sinal de alerta entre os especialistas.

Thiago Marques, analista de segurança da Kaspersky, chamou a atenção para o WhatsApp como vetor de ataque. Os criminosos, segundo ele, exploram temas relevantes — do furacão Irma ao FGTS — para aumentarem o apelo dos ataques. Esses golpes, em geral, capturam o número de telefone da vítima para inscrevê-la em serviços premium, que cobram valores pequenos que são revertidos a eles. Outra parcela considerável das ameaças mais populares é do tipo adware, ou seja, após instaladas, passam a veicular anúncios intrusivos que se revertem em dinheiro fácil aos criminosos.

Boas práticas de JavaScript que você precisa saber

Boas práticas de programação são sempre bem-vindas em qualquer código. Infelizmente nem tudo pode ser aproveitado de uma linguagem para outra devido a forma como as mesmas são implementadas em seu “encanamento” para transformar o nosso código em imagens, animações, arquivos, etc…

Tendo isto em vista isto, coloquei aqui uma lista de boas práticas para programar em JavaScript que podem ajudar a melhorar o desempenho, eficiência e entendimento do seu código.

1) Evite usar variáveis globais

Sempre que possível, evite utilizar variáveis globais. Isso inclui todos os tipos de dados, objetos e funções pois eles podem ser sobrescritos por outras bibliotecas ou códigos espalhados pelo seu site/aplicativo. Outro possível problema é que a performance, apesar de pouco, é afetada negativamente pois demora mais tempo para o código ler as variáveis globais no JavaScript.

2) Utilização dos ponto-e-vírgulas

Teoricamente, a maioria dos interpretadores deveria permitir que os ponto-e-vírgulas sejam omitidos de certas partes do código (ex.: antes do fechamento das chaves e ao definir valores a variáveis). No entanto isso não é necessariamente uma regra e pode levar seu código executar de forma não desejada.

3) Nunca declare números, strings e booleanos como objetos.

Declarar variáveis de tipos “primitivos” como objetos causa um impacto na performance do código que é desnecessário em 99% das vezes que é feito desta forma. Sempre que possível declare-os utilizando os valores primitivos (ex.: var umaString = “teste”;).

4) JavaScript Puro Sempre Pode Ser Mais Rápido Que Usar Uma Biblioteca

Bibliotecas como o Jquery, bootstrap.js, w3.js entre outras são ótimas ferramentas para reduzir o tempo de desenvolvimento de aplicativos e websites. No entanto, elas pesaram para serem carregadas por seus usuários e as funções que elas fornecem podem ser significativamente mais lentas que a utilização do JavaScript puro. Por isso, avalie sempre a necessidade de utilização dela e também se ela seria substituível por algumas funções prontas da linguagem.

5) Coloque os Scripts na Parte Final da Sua Página

Algumas bibliotecas e frameworks já tem instruído os desenvolvedores, mas vale a pena lembrar. Sempre que possível, chame os scripts no final antes do </body>, pois desta forma você estará permitindo que o html e o css renderizem em tela antes de carregar os scripts. Isto dá uma sensação de velocidade maior para o usuário que dificilmente interagirá com seu site antes do binding de eventos e carregamentos das funções.

6) Minimize as chamadas HTTP

Cerca de 80% do tempo de resposta para o usuário final é gasto no front-end e boa parte deste tempo é baixando imagens, stylesheets, scripts, etc… É aconselhável que você entregue todo o código JavaScript de uma vez só e assim economizar a chamadas para cada arquivo. Para isso existem diversas ferramentas que permitem minificar e unir diversos arquivos JavaScript em um só. Verifique se sua IDE e linguagem de programação back-end possuem tal funcionalidade.

7) Deixe o código JavaScript em arquivos externos

Normalmente o uso de arquivos externos (colocar o código em um arquivo js ao invés da tag script dentro do html) gera uma página com tempo de carregamento mais rápido pois o navegador costuma fazer cache de arquivo JS e CSS. Se o estilo e o script do código existir junto com o HTML, ele será baixado junto com a página toda vez que a mesma for carregada. Por mais que essa prática reduza o número de chamadas http, ela aumenta o tempo base fixo para carregamento do website.

8) Minifique e use Gzip

Apesar da indentação e comentários serem ótimos para melhorar a leitura, entendimento e clareza do seu código, os interpretadores não precisam deles e na verdade precisam trabalhar mais para isso. Por isso, utilize uma ferramenta para criar uma cópia minificada do seu código javascript quando for colocá-lo em produção.

Outra ferramenta que pode reduzir o tamanho de seus arquivos em mais da metade é o gzip, reduzindo o tempo necessário para que o conteúdo seja baixado pelo usuário final.

9) Comente seu código

Essa última dica deveria ser cadeira de faculdade. O código comentado facilita muito a comunicação do que está (ou deveria estar) acontecendo no programa e permite que outros programadores possam navegar com menos trabalho em scripts que não são deles. Para aqueles que trabalham sozinhos e acreditam que não precisam comentar seu próprio código pois são os únicos que o lerão eu lhes pergunto, você já consegue pegar o código fonte de um programa complexo seu escrito 2 anos atrás e dizer de cara o que cada função faz?