O que é o Node.js? ElectronJS e Outras tecnologias com JavaScript

Tempo de Leitura: 9 Minutos

Para entender o que são essas diversas tecnologias baseadas em Java Script temos temos que entender o que ele é, e para que ele foi criado, e justamente é essa a proposta desse artigo, contar um pouco dos princípios da WEB e o que veio evoluindo até os dias de hoje. Vamos lá?

HTML – A origem de tudo

O HTML foi criado originalmente por Tim Berners-Lee na década de 90, com o intuito de disseminar o conteúdo de pesquisas e trabalhos acadêmicos, é uma abreviação de HyperText Markup Language ou Linguagem de Marcação de Hipertexto e culminou com o desenvolvimento da rede internet, o que acabou se tornando uma união perfeita, entre as duas ferramentas.

O HTML é basicamente um texto como o de um livro, com algumas marcações, chamadas de TAGs que são interpretadas pelo navegador e permitem que ele exiba o conteúdo formatando-o de maneira conveniente com o contexto, ou seja, ele não tinha nenhuma preocupação com o aspecto visual do lado de quem estava escrevendo o texto com a marcação. Em um resumo, se o ambiente usado possuia um recurso de tamanho de fonte, conforme a marcação de um titulo (<h1>) era encontrada o texto poderia ser colocado em um tamanho maior.

Com o crescimento exponencial da web, outras tecnologias passaram a ser incorporadas as marcações, para por exemplo fazerem formatação de cores, alinhamentos e outros detalhes para melhorar a apresentação visual dos conteúdos, nisso, surgem especificações como o CSS (Cascade Style Sheets – Folhas de Estilo em Cascata) e por outro lado, havia a necessidade de se manipular conteúdos como pequenas animações e até mesmo respostas dinâmicas ao contexto, e nesta categoria surge o Javascript (ou simplesmente JS como é conhecido nos dias de hoje).

JAVASCRIPT – Trazendo Lógica para Dentro da WWW

O JS é uma linguagem desenvolvida no NCSA da universidade de Illinois nos EUA, berço do navegador Netscape, em 1993, que era um navegador gráfico para a WEB, que vem sendo usado até os dias de hoje e é desenvolvido pela Mozilla. A escolha final do nome causou muita confusão, pois dava a impressão de que a linguagem era uma derivação do Java da Sun Microsistens, porém, a escolha foi mais uma manobra de marketing da Netscape para dar ao JavaScript o status da linguagem da moda.

É uma linguagem de programação, completa, pois possui todos os mecanismos encontrados em outras linguagens Turing Based, o JS é uma linguagem interpretada (como o Python, o PHP e uma série de outras) onde o código fonte é lido e executado diretamente pelo interpretador da linguagem sem precisar passar por processos de compilação e link edição para produzir código diretamente executado (executáveis). É também uma linguagem de script em alto nível (ou seja, tem pouca ou quase nenhuma referência direta com o hardware onde está sendo executada, sendo facilmente portável entre plataformas e ambientes diferentes), com tipagem dinâmica fraca (ou seja, pode-se fazer a conversão de valores e declarações de variáveis sem um tipo definido, ou mesmo a mudança do tipo durante a execução do script) e multi paradigma (protótipos, orientado a objeto, imperativo e, funcional).

Juntamente com HTML e CSS, o JavaScript é um dos três pilares da World Wide Web e é a parte mais essencial dos aplicativos da web, e todos os principais navegadores têm um mecanismo JavaScript dedicado para executá-lo.

Como uma linguagem multi paradigma, o JavaScript suporta estilos de programação orientados a eventos, funcionais e imperativos (incluindo orientado a objetos e prototype-based), apresentando recursos como fechamentos (closures) e funções de alta ordem comumente indisponíveis em linguagens populares como Java e C++. É baseadas em APIs para trabalhar com texto, matrizes, datas, expressões regulares e o DOM, mas a linguagem em si não inclui nenhuma Entrada e Saída, como armazenamento de dados e arquivos ou gráficos, contando com o ambiente host em que está embutido.

JavaScript fora da Web, e do lado do servidor

Somente em meados de 2005 e depois de grandes batalhas em torno de uma padronização da linguagem, que pudesse ser implementada nos principais navegadores e que fosse compatível entre si, é que surge uma publicação feita por Jesse James Garrett que cunhou o termo AJAX onde o JavaScript era a espinha dorsal, e que visava permitir que dados pudessem ser carregados em segundo plano e que levaria as páginas da web a aplicativos mais dinâmicos. Isso culminou em 2009 o projeto CommonJS que seria um projeto para rodar o JS fora do ambiente Web.

Por um lado o boom da web recrutando muitos profissionais para desenvolver conteúdo e também sistemas, de outro lado, o acesso a internet cada vez mais se popularizando e abrangendo novos mercados e dispositivos, as empresas contratando pessoal com conhecimento em linguagens voltadas a internet entre elas o javascript, e as universidades formando novos profissionais específicos para atender essas demandas, era o cenário ideal e a linguagem ganhou muita força. Naturalmente, muitos profissionais adquiriram muita experiência com o uso da linguagem, e utiliza-la para tudo era uma questão de adaptação, já que para as empresas ter uma extensa base de código em uma mesma linguagem facilitaria a manutenção e o remanejamento dos profissionais. Para atender esse nicho de mercado, surge uma nova tecnologia.

Node.js é um ambiente de execução de JavaScript (JS) baseado no motor V8, também usado no Google Chrome. Permite executar programas em JS fora do navegador web, o ambiente para os qual a linguagem JS foi inicialmente desenhada. Em particular, esse motor permite o desenvolvimento do lado dos servidores HTTP na mesma linguagem usada nos clientes.

O desenvolvimento de aplicações web tem evoluído no sentido de carregar inicialmente os conteúdo estático (HTML, CSS e JavaScript) sendo a interação posterior com o servidor feita por pedidos assíncronos a serviços web, que até então rodavam linguagens diferentes como o PHP, o PERL, o Python, e ambientes inteiros como o .Net da microsoft que roda linguagem C# ou F#. Esses serviços fornecem dados, geralmente serializados em JSON, um formato muito próximo ao formato de dados do JS. Por esta razão torna-se conveniente usar o JS simultaneamente nos clientes e servidores.

O Node permite estruturar o código em torno de pacotes e essa possibilidade está disponível há bastante tempo, muito antes de ser incluída no ECMAScript, que é a base do JavaScript como já foi dito, a versão standard do JavaScript, é suportada pelos navegadores. Os pacotes são instrumentais para tirar partido do npm, o gestor de pacotes do Node.

Uma caraterística distinta do Node.js é que ele é assíncrono, que foi herdado do JS. A generalidade dos servidores HTTP usam processos ou threads para assegurarem elevado desempenho perante um grande número de pedidos. O Node.js usa um único processo/thread mas todos os pedidos que envolvam espera pela disponibilidade de recursos, como chamadas ao sistema operacional ou pedidos à rede, ou operações longas de manipulação de dados com E/S de arquivos são processados assincronamente.

O que é o motor V8 do Chrome

O Google Chrome achou que poderia otimizar a interpretação do JavaScript, então criou o V8, este é um software chamado de engine, ele lê JavaScript e transforma em uma linguagem que a CPU consegue entender (linguagem de máquina) similar a um compilador ou interpretador como o Python. Esse processo adiciona muita velocidade aos tradicionais interpretadores que simplesmente a cada carregamento fazem todo o processo novamente, ele otimiza alguns processos, já tendo em cache algumas partes prontas.

Com ele, que é um software completo por si só, já é possível executar JavaScript de uma forma independente do navegador, e essa engine vai ser a base de outras ferramentas que veremos adiante.  Feito isso, o NODE.JS adiciona algumas APIs para manipular acesso a redes e arquivos, bem como acesso a bancos de dados e o Boom aconteceu, o Node.js foi criado.

Outras frentes para o JavaScript – Electron.JS

Partindo desse mesmo principio, de que ao adicionar novas bibliotecas (pacotes) de APIs ao JavaScript podemos rodar aplicações do lado do servidor, faz sentido, portar o código para utilizar em outros ecossistemas como os ambientes de Desktop, usando uma tecnologia já conhecida, baseada em HTML, CSS e JS o Electron.JS faz justamente isso.

O Electron.JS é um framework multiplataforma mantido pelo GitHub, que foi criado em 2013 e seu objetivo é permitir a construção de aplicações para desktops, rodando sobre o Chromium que é uma versão de código aberto do navegador Chrome, que também roda o V8 e alguns componentes do Node.JS para acesso a chamadas para o sistema de arquivos e para o SO, de maneira como as aplicações web, porém sem as limitações dos navegadores.

É importante dizer que o Electron permite a geração de um pacote de distribuição, ou seja, toda a aplicação desenvolvida é compilada e transformada em versões para rodar em diferentes sistemas operacionais, entre eles: Windows, Linus e macOS. Criando uma camada de código nativo. Alguns Softwares como o Visual Studio Code, Slack, Atom, WhatsApp entre inúmeros outros são escritos usando essa tecnologia.

Além do Electron.JS temos outros conjuntos de ferramentas e soluções que implementam o JS em diversos ambientes diferentes, entre elas, podemos citar Ionic, que é um framework que tem como objetivo produzir código compilado para aplicativos móveis em plataformas Android e iOS além de outras, de maneira muito similar ao que é feito pelo electron. O Flutter que é uma variante, que compila de maneira nativa os diferentes códigos para diferentes plataformas, incorporando ferramentas específicas de design de interface de usuário, desenvolvido pelo Google, tem um grande número de plataformas alvo, além das plataformas móveis, permite acesso a desenvolvimento para desktop em windows, linux e MacOS.

O ApacheCordova ou como era anteriormente conhecido PhoneGap que também é uma plataforma de desenvolvimento que produz aplicativos que rodam em dispositivos móveis baseados nas tecnologias de visualização e de conteúdos da web, com os mesmos recursos dos outros citados, porém de código totalmente aberto. Angular e AngularJS que tem o mesmo propósito, porém com intuito de serem feitos em uma SINGLE-PAGE ou seja, uma interface única.

Conclusão

O JavaScript e as tecnologias web vieram para ficar, e podem ser vistas como um futuro para diversos tipos de aplicações que antes eram exclusivas para desktop e que hoje podem ter diferentes plataformas alva como dispositivos móveis.

Novas tecnologias vem surgindo, e é praticamente impossível para um profissional de desenvolvimento conhecer todas a ponto de poder utiliza-las com proficiência, portanto, usar tecnologias parecidas para diferentes ambientes é uma solução viável, e o caminho para uma grande massa de desenvolvedores.

Ainda vemos muitas questões voltadas a desempenho ou qualidade de uma ou de outra linguagem, não gosto e acho inútil esse tipo de abordagem, pois, cada qual tem um público diferente e um uso diferente, porém, para uma grande massa de desenvolvedores que atuam em software comercial e aplicações essas tecnologias atendem, e possuem resultados de qualidade quando utilizadas de maneira correta em prazos menores e com algumas vantagens e desvantagens, e cabe a cada equipe uma análise detalhada dos requisitos e resultados com uso de tecnologias diferentes.

Um aspecto muito importante, é que conhecer essas tecnologias abre um grande leque de possibilidades para o desenvolvedor, que pode investir em uma base única (JavaScript) e se desenvolver em um ou outro ambiente. Espero poder ter auxiliado na tomada de decisão de novos desenvolvedores e programadores, mostrando uma oportunidade base para o desenvolvimento de aplicações em múltiplas plataformas.

Não existe uma tecnologia melhor ou pior, da mesma maneira que não existe uma linguagem pior ou melhor nem mais fácil ou mais dificil, o que existe e que venho deixando claro em diversos artifgos é o uso correto ou incorreto de determinadas tecnologias.

P.S. = A imagem que ilustra esse artigo, mostra muito bem a interação que a convergência das tecnologias permite e deixa nas mãos do desenvolvedor a escolha da vertente de ferramenta que mais lhe agrada.