Otimização e eliminação de código com webpack e Babeljs

Com a velocidade a qual o javascript avança, tendo versões anuais acrescentando funcionalidades, acabamos por adicionar um compilador (Babeljs o mais comum deles) em nosso workflow para usufruirmos de todas essas novidades e mantermos a compatibilidade, e isso não tem problema nenhum.

Junto ao compilador é comum usarmos também um bundler que se encarrega de gerar nosso código final aplicando diversas otimizações. O webpack é um dos mais conhecidos bundlers javascript atualmente, e ele por si só já oferece várias opções de otimização, mas temos que estar atentos às nossas configurações.

O webpack oferece uma funcionalidade chamada tree shaking. Ela é responsável por eliminação de código não utilizado no nosso bundle. Porém, com a utilização do babel-loader, precisamos configura-ló corretamente para não perder essa funcionalidade.

Como exemplo, vamos entender qual é o problema, para depois entendermos a solução.

Aqui basicamente é um exemplo com módulos javascript

Arquivo module.js

export const say = () => console.log('Say something')

export const scream = () => console.log('SCREAM SOMETHING')

Arquivo index.js

import { scream } from './module.js'

scream()

No index.js importamos somente a função scream do arquivo module.js. Como nossa aplicação não usa a função say, não faz sentido adicioná-la ao nosso bundle, e é isso o que faz o tree shaking do webpack. Porém nosso módulo utiliza algumas coisas que precisam ser compiladas pelo Babeljs para não preocuparmos com retrocompatibilidade, e é ai que temos que ter cuidado.

Geralmente nossa configuração do Babeljs é essa:

{
  "presets": ["env"]
}

A única mudança que precisamos é setar o modules para false.

{
  "presets": [
    [
      "env",
      {
        "modules": false
       }
     ]
  ]
}

O que acontece é que o Babeljs compila o arquivo antes do webpack, e ele converte os módulos para CommonJS por default, e quando chega no webpack ele não consegue usufruir dos módulos nativos do javascript.

Esse é um exemplo simples, mas quando sua aplicação cresce e utiliza muitas libs, não faz sentido onerar muito o carregamento com código não utilizado.

Agora uma outra dica: muitos dos presets do Babeljs possuem um parâmetro chamado loose, e o babel-preset-env é um deles. Basicamente o que acontece na compilação do Babeljs é que quando ele encontra uma funcionalidade não suportada na versão es5, ele compila essa parte do código para es5 mantendo a funcionalidade e semântica do código fonte no código compilado. O que o loose mode faz é compilar para es5, porém não se importando tanto para a semântica, e muitas vezes ele gera um código muito menor. Como o nosso bundle vai ser interpretado diretamente no navegador ou no nodejs, não precisamos nos importar tanto com a semântica aqui, já que continuamos dando manutenção no arquivo fonte.

Para habilitar

{
  "presets": [
    [
      "env",
      {
        "modules": false,
        "loose": true
       }
     ]
  ]
}

Para alguns exemplos de código gerado pelo loose mode leia Babel: Loose mode.

Boas práticas e automatização de tarefas no Front-end

Palestra onde apresento boas práticas de desenvolvimento para o front-end.

Links

Aplicativos híbridos com Ionic. Você também pode começar a desenvolver agora!

Palestra com apresentação de um case desenvolvido em Ionic ilustrando os benefícios e facilidades do framework, e fazendo a comparação com o desenvolvimento nativo. Na segunda parte o que você precisa e como dar o start em um projeto Ionic.

Links

Engenharia Web: estado da arte e comparativo com a engenharia de software convencional

A crescente utilização da Internet e consequentemente da Web começa a transformar o mercado dos sistemas de informação. Entretanto, a capacidade de gerir e planejar estes sistemas cada vez maiores e mais complexos não acompanha este crescimento. Percebe-se que ainda não há, na maioria das vezes, um processo bem definido e organizado, sendo o modelo ad hoc o mais utilizado. Portanto, faz-se necessária a criação de uma disciplina que possa atender às características específicas das aplicações baseadas na Web, a Engenharia Web (WebE). Neste artigo a engenharia e as características das aplicações Web são discutidas através de uma revisão de literatura, além disso, um comparativo com a Engenharia de Software convencional e a WebE também é apresentado.

1 Introdução

A Word-Wide-Web (WWW) é um meio relativamente novo, mas que sofre mudanças a todo instante. Apesar da novidade, ela já se instalou em nossas vidas e vem sendo utilizada amplamente por organizações pelo mundo, quebrando barreiras internacionais. O impacto significante e a grande importância adquirida, seja no mundo corporativo ou até mesmo fora dele, em páginas pessoais, na educação e no setor de entretenimento, fez com que a demanda de aplicações nesse meio crescesse exponencialmente.

Para suprir o desenvolvimento dessas aplicações, a grande maioria dos desenvolvedores acaba sendo obrigada a escolher o modelo ad hoc de desenvolvimento, por falta de uma metodologia específica. Tais aplicações são desenvolvidas de forma caótica e dando margem para erros e falhas que comprometem a integridade do sistema, além da deficiência na documentação do produto e do processo.

Para tentar cobrir essa lacuna, uma nova área do saber foi criada, a Engenharia Web (Web Engineering), que incorpora princípios do desenvolvimento de software padrão, buscando entender as necessidades específicas da Web e assim solucionar os problemas relacionados ao desenvolvimento. Tendendo a criação de um modelo de processo com ciclo de desenvolvimento repetível e eficiente, e produzindo uma metodologia de avaliação adequada, que contribua com a compreensão e melhora da qualidade das aplicações Web.

Muitos aspectos relativos ao desenvolvimento Web o tornam diferente ao de um software tradicional. Temos a escalabilidade de seus requisitos e a necessidade das mudanças contínuas em seu conteúdo como os dois atributos-chave citados por [Ginige(2001)]. De extrema relevância temos a multidisciplinaridade, e entre as características críticas temos a segurança, a usabilidade e também a manutenabilidade.

Além disso, no processo de produção para uma aplicação Web, é necessário o esforço integrado de profissionais de várias áreas do saber. À medida que aumentam a complexidade e sofisticação dos novos sistemas, uma melhor abordagem sistemática, controle de qualidade e garantia são exigidos, e uma melhor metodologia contribui para um desenvolvimento harmônico, estruturado e bem integrado nos aspectos multidisciplinares.

2 Características do desenvolvimento de Aplicações Web

Para [Pressman(2006)], uma aplicação Web pode ser desde uma simples página, a um Web Site completo. Esses sistemas são orientados a documentos que contenham páginas estáticas ou dinâmicas, e são centrados na aparência e nas sensações. Tais aplicações se aproveitam do meio e fazem uma interligação dos conteúdos existentes, dando ao usuário final acesso fácil para edição e criação do mesmo, sustentados por ferramentas amplamente difundidas. Seus provedores são Web designer, redatores, dentre outros.

[Powel(1998)] relata que a mistura encontrada em sistemas Web, envolve a publicação impressa e o desenvolvimento de software, entre o marketing e a computação, entre as comunicações internas e as relações externas e entre a arte e a tecnologia. Mencionada a natureza da engenharia Web, sua equipe é obrigatoriamente multidisciplinar, abrangendo áreas como interação homem-computador, interface com o usuário, análise de sistemas e design, engenharia de software, engenharia de requisitos, engenharia de hipermídia, engenharia de requisitos, testes, modelagem e simulação e gerenciamento de projetos, bem como ciências sociais, artes gráficas e projeto (Figura 1) [Murugesan (1999)].

Campos da Engenharia Web
Figura 1. Engenharia Web – Um campo multidisciplinar

O processo de desenvolvimento para Web apresentado por [Rodriguez(2002)], divide o processo em dois sub-processos:

  • sub-processo de autoria, onde ocorre a estruturação de hipermídia.
  • sub-processo de desenvolvimento de infraestrutura, onde é feita integração com base de dados, programação, etc.

Ambos os processos são realizadas nos fluxos de trabalho do processo de desenvolvimento de software convencional. Já a proposta de [Ward & Kroll(1999)] para o desenvolvimento de aplicações Web é a unificação do processo criativo de design ao de engenharia de software proposto pelo Rational Unified Process (RUP). Para isso é usada a modelagem de requisitos, baseada em casos de uso, com a abordagem focada em aspectos de autoria, com diagramas de navegação, conteúdo e layout de interfaces. Estudos também apontam que o desenvolvimento pode ser feito em paralelo, adotando-se um processo que separa as atividades relacionadas aos aspectos de autoria e de infraestrutura em sub-processos paralelos.

Outra característica das aplicações que estão sendo discutidas é o curto ciclo de vida da fase de desenvolvimento. A exigência do mercado para que os sistemas estejam disponíveis o mais breve possível contribuí para tal aspecto. Por tratar-se de alcance global, as aplicações Web possuem grande concorrência e qualquer tempo desperdiçado pode culminar em prejuízos.

Por ser um ambiente complexo e dinâmico a avaliação dessas aplicações é dificultada. Com a diversidade de objetivos, diferentes aspectos são avaliados. Para uma boa avaliação da qualidade final das Aplicações Web, adotamos características tais como funcionalidade, usabilidade, confiabilidade, eficiência, manutenabilidade e portabilidade [ISO91]. Já em outro modelo de avaliação proposto é sugerido que o desenvolvimento das aplicações Web é um esforço contínuo e que progride através de diversos estágios definidos. Suas fases de desenvolvimento são: conceitualização, desenvolvimento, implementação e avaliação. Sendo que estas fases são interligadas constituindo-se um ciclo recorrente.

Portanto, a criação de uma disciplina que seja capaz de avaliar esta qualidade e acompanhar todos os processos que envolvem a construção de sistemas para Web se faz necessária. Na sessão seguinte será abordada esta emergente disciplina, a Engenharia Web.

3 Engenharia Web

Como dito anteriormente, nos últimos anos, os sistemas Web estão tornando-se cada vez maiores e mais complexos. Além disso, para desenvolver estes sistemas, é necessária uma equipe heterogênea, com grande variedade de conhecimentos e habilidades [Ginige (2002)]. Por estes motivos, é essencial a utilização de uma metodologia que seja capaz de gerir esta equipe e todo o processo que tange a construção das aplicações.

A Engenharia Web (WebE – da sigla em inglês Web Engineering), caracteriza-se como uma disciplina emergente [Ahmad (2005)] cujo objetivo é possibilitar o desenvolvimento, implantação e manutenção de aplicações baseadas na Web. Utiliza abordagens sistemáticas e princípios científicos de gerenciamento [Murugesan (1999)] para a construção destas aplicações. Dentre os seus objetivos encontram-se a facilitação da manutenibilidade e escalabilidade, minimização dos riscos e principalmente a melhoria e garantia da qualidade do produto de software Web.

Desde 1998, vêm ocorrendo workshops e conferências que abordam a WebE. A crescente utilização da Internet e a ampliação dos sistemas Web não só nos computadores pessoais como também nos dispositivos móveis faz com que haja uma preocupação cada vez maior com o processo de desenvolvimento deste tipo de sistema. A variedade das tecnologias, a multidisciplinaridade, além da contínua evolução e volatilidade dos requisitos que os sistemas Web apresentam são características importantes quando se discute a engenharia Web.

Segundo Pressman [Pressman (2000)], as seguintes atividades devem ser consideradas quando o assunto é a WebE: formulação, planejamento, análise, modelagem, geração de página e teste, além da avaliação do cliente. Ainda segundo o autor, estas atividades devem ser realizadas de maneira iterativa à medida que o sistema evolui.

A WebE segue conceitos e princípios da engenharia de software tradicional enfatizando as mesmas técnicas e atividades de gestão [Ahmad (2005)]. Apesar de possuírem atividades em comum, a engenharia Web não é um “clone” da engenharia de software [Pressman (1986)]. As diferenças entre as duas disciplinas serão explicitadas a seguir.

4 Engenharia Web vs. Engenharia de Software

Neste capítulo serão apresentadas diferenças entre a engenharia Web e a engenharia de software. Mesmo que o objetivo de ambas seja a programação e o desenvolvimento de sistemas, a WebE apresenta novos desafios [Ginige (2001)]. A principal diferença é a multidisciplinaridade que as aplicações baseadas na Web apresentam.

Segundo [Ginige (2001)], esta multidisciplinaridade resulta na contribuição para áreas como engenharia de hipermídia e hipertexto, desenvolvimento de interfaces, interação homem-computador, engenharia da informação, design gráfico e áreas afins. Por este motivo, [McDonald (2001)] conclui que a engenharia Web deve levar em conta os diferentes tipos de profissionais envolvidos no processo garantindo que cada um entenda seu papel e responsabilidade. Além disso, deve ser capaz de resolver os conflitos dos limites destes papéis e responsabilidades levando em conta o que é melhor para o projeto.

[McDonald (2001)] ainda discute sobre outras características que a engenharia Web deve possuir para atender as demandas que uma aplicação Web exige e que se diferenciam da engenharia de software:

  • Devido ao curto ciclo de desenvolvimento e curtos prazos para entrega do produto final bem menores que aplicações desktop, a engenharia Web deve ser capaz de lidar com esta pressão.
  • Por ser ligada não somente ao desenvolvimento em si, mas também ser orientada ao conteúdo a engenharia Web deve preocupar-se também com o desenvolvimento dos dados e da informação bem como o relacionamento entre eles.
  • As equipes devem ser quebradas em partes menores assim como em um processo de desenvolvimento de software convencional.
    Entretanto, estas equipes devem poder ir além dos seus pares de trabalho e além de seus projetos para evitar esforços redundantes e garantir consistência.
  • Deve haver um foco maior na fase de análise e avaliação e nas fases de requisitos e testes.
  • Deve ser independente de tecnologia e ferramentas devido à rápida e contínua evolução das mesmas.

Além das características apresentadas é importante ressaltar que a Engenharia Web deve ter um foco maior para a segurança e qualidade do que a engenharia convencional. O fato de estarem disponíveis em uma rede de alcance mundial – a Internet – faz com que ataques sejam mais frequentes e qualquer brecha de sistema pode ser fatal. A segurança está diretamente ligada à qualidade que depende da aplicação de uma engenharia e processo bem definidos.

5 Conclusões

O crescimento e a complexidade das aplicações baseadas na Web preocupam àqueles que trabalham e pesquisam esta área. Por este motivo, a utilização da Engenharia Web vem sendo cada vez mais discutida e pesquisada. Apesar de ser uma disciplina praticamente recente sua importância já é destacada.

Existem diferenças entre a WebE e a engenharia de software convencional. Estas diferenças ocorrem devido à natureza das aplicações Web. As mesmas exigem um prazo de desenvolvimento mais curto, envolvem diversas áreas de conhecimento – são multidisciplinares, possuem um foco maior na informação e estão em constante evolução.

Por estes motivos, a Engenharia Web caracteriza-se por ser bastante flexível. Deve ser independente de tecnologia, capaz de gerir as diversificadas equipes, focar na análise e planejamento para que problemas possam ser evitados. Além disso, deve abranger não só o desenvolvimento de software em sim como também a segurança, o design e o desenvolvimento e apresentação da informação.

6 Referências

  • Ahmad, R.; Zhang Li; Azam, F.; “Web engineering: a new emerging discipline,” Emerging Technologies, 2005. Proceedings of the IEEE Symposium on , vol., no., pp. 445-450, 17-18 Set. 2005.
  • Athula Ginige. 2002. Web engineering: managing the complexity of web systems development. In Proceedings of the 14th international conference on Software engineering and knowledge engineering (SEKE ’02). ACM, New York, NY, USA, 721-729.
  • Ginige, A.; Murugesan, S.; , “Web engineering: an introduction,” Multimedia, IEEE, vol.8, no.1, pp.14-18, Jan-Mar 2001.
  • ISO/IEC 9126 Standard for Information Technology, Software Product Evaluation – Quality Characteristics and Guidelines for their use, Geneve,1991.
  • McDonald A., Welland R.: Web Engineering in Practice, Proceedings of the Fourth WWW10 Workshop on Web Engineering, 21-30, (1 May 2001).
  • Murugesan, S. et al. (1999). Web engineering: A New Discipline for Development of Web-based systems. InProceedings of the First ICSE Workshop on Web Engineering, Los Angeles (pp. 1-9).What a Tangled Web We Weave.
  • Powell, T.A, Web Site Engineering: Beyound Web Page Design, Prentice Hall, 1998.
  • Pressman, R. Engenharia de Software, McGraw Hill, 6a ed., 2006.
  • Pressman, R.S.; , “What a tangled Web we weave [Web engineering],” Software, IEEE , vol.17, no.1, pp.18-21, Jan/Feb 2000
  • Pressman. 1986. Software Engineering: a Practitioner’s Approach (4th Ed.). McGraw-Hill, Inc., New York, NY, USA.
  • Rodriguez, D.; Harrison, R. & Satpathy, M. A Generic Model and Tool Support for Assessing and Improving Web Processes”. Proceedings of the Eighth IEEE Symposium on Software Metrics. IEEE, 2002.
  • Ward, S. & Kroll, P. Building Web Solutions with the Rational Unified Process: Unifying the creative design process and the software engineering process. Context Integration Inc and Rational Software. 1999.