A história do JavaScript é, em muitos aspectos, a história da internet moderna. Qualquer pessoa que se lembre das páginas estáticas, desajeitadas e do carregamento lento do início da internet - ou até mesmo que a tenha conhecido através da Wayback Machine – tem uma noção do quanto o desenvolvimento da web evoluiu desde os anos 1990. Os elementos interativos como animações, formulários preenchíveis e até mesmo a capacidade de percorrer artigos como este são, em grande parte, devido ao surgimento do JavaScript - uma linguagem de programação que foi desenvolvida inicialmente em 10 dias e concebida como um “parceiro” do Java.
Aqui na Azion, temos o orgulho de anunciar o suporte a JavaScript para nossas Edge Functions. Para comemorar esse desenvolvimento tão significativo, este post vai analisar em profundidade até onde o JavaScript avançou. A partir de agora, você fará um tour pelos conceitos básicos, origens, esforços de padronização e o estado atual da linguagem de programação mais popular do mundo.
O que é JavaScript?
JavaScript vs. HTML vs. CSS
JavaScript é uma linguagem de scripting client-side, que permite a criação de elementos interativos em sites. Associado ao HTML e CSS, o JavaScript compõe um dos três blocos de construção usados para criar sites modernos. Em umblog post recente, o Hubspot distingue esses três conceitos de uma forma simples de entender:
- HTML: fornece a estrutura básica dos sites, que é aprimorada e modificada por outras tecnologias como CSS e JavaScript;
- CSS: usado para controlar a apresentação, formatação e layout;
- JavaScript: usado para controlar o comportamento de diferentes elementos.
Em outras palavras, o HTML fornece a estrutura para uma página da web, o CSS adiciona elementos de design e o JavaScript permite a interatividade.
Quais são os usos do JavaScript?
O site de codificação Skillcrush fornece uma excelente descrição sobre os usos do JavaScript.Observa que o JavaScript é “usado para criar e controlar o conteúdo dinâmico do site, ou seja, qualquer movimento, atualização ou alguma mudança que ocorra em sua tela sem exigir que você recarregue manualmente uma página da web”. Entre outros elementos interativos, isso inclui:
- caixas de confirmação;
- slides em calls-to-action;
- jogos baseados em navegador;
- animação e outros efeitos especiais;
- recursos de segurança, como senhas;
- feeds de notícias com atualização automática;
- desenvolvimento de aplicações móveis.
Origens do JavaScript
Pré-história
O JavaScript 1.0 foi lançado em 1995, quando a internet ainda era uma invenção relativamente nova. O primeiro navegador da web, o Mosaic, havia sido lançado há apenas dois anos, e o HTML era a única ferramenta para construir sites - na época, o CSS ainda era uma proposta e não seria oficialmente lançado até 1996. Em vista disso, a criação de sites ainda era uma habilidade um tanto fácil de aprender, algo que era acessível não apenas a engenheiros de software, mas também a desenvolvedores e designers inexperientes.
Marc Andressen, o fundador do recém-lançado navegador Netscape, queria expandir as capacidades do navegador adicionando mais elementos dinâmicos. Ao mesmo tempo, ele queria que esses elementos estivessem disponíveis para o novo e crescente mercado de desenvolvedores amadores da web. Então, nasceu a ideia de criar uma linguagem de scripting simples e dinâmica, que um dia seria conhecida como JavaScript.
Criação na Netscape
Brendan Eich, o criador do JavaScript, foi contratado pela Netscape para criar uma linguagem de scripting baseada em navegador. De acordo com o artigoJavaScript: The First Twenty Years, publicado pela ACM em coautoria com Eich, essa tarefa foi dificultada devido à parceria entre a Netscape e a Sun Microsystems. Tinham como estratégia conjunta integrar a linguagem de programação Java da Sun ao Netscape 2.0 em uma tentativa de superar o Internet Explorer da Microsoft. Como um resultado:
“Estratégias rápidas dentro do Netscape para escolher uma linguagem de scripting prejudicaram seriamente as linguagens Scheme, Perl, Python, Tcl e Visual Basic, inviabilizando-as por causa de interesses comerciais e considerações sobre o prazo de início da comercialização. A única abordagem considerada viável era… projetar e implementar uma ‘pequena linguagem’ para complementar o Java.”
Como o lançamento da versão beta do Netscape 2.0 estava programado para setembro de 1995, Eich teve que agir rapidamente. O protótipo inicial - então denominado “Mocha” - foi criado em 10 dias em maio de 1995, tendo mais trabalho durante o verão para eliminar bugs, responder às solicitações de recursos e projetar APIs que permitissem ao Mocha interagir com o Netscape. Essas APIs estabeleceram as bases para o que seria conhecido como Document Object Model (DOM), uma interface-chave para interagir com documentos HTML e XML.
Como o Auth0 menciona em umblog post de 2017, o resultado final “parecia um Java dinâmico, mas que no fundo era uma criatura muito diferente: um filho prematuro de Scheme and Self” que foi apresentado sob o novo nome de JavaScript “como uma linguagem de scripting para pequenas tarefas client-side no navegador, enquanto o Java seria promovido como uma ferramenta profissional maior para desenvolver componentes web ricos.”
Lançamento inicial
A disponibilidade do JavaScript na versão beta do Netscape 2.0 foi anunciada em umpress release de dezembro de 1995, que descreveu o JavaScript como:
- projetado para criar aplicações centradas em rede;
- complementar e integrado ao Java;
- complementar e integrado ao HTML;
- aberto e multiplataforma.
Na documentação inicial, o Netscape descreve os principais recursos do JavaScript para “reconhecer e responder a eventos do usuário, como cliques do mouse, entrada de formulário e navegação de página”. Isso possibilitou uma ampla gama de casos de uso, como:
- solicitar o número de telefone ou código postal de um usuário;
- alertar os usuários sobre entradas inválidas de formulários;
- criar de caixas de seleção;
- adicionar botões de “voltar” para navegar facilmente em sites;
- preservar o estado entre as páginas da web para rastrear as ações do usuário; e
- reproduzir animações, textos de rolagem ou arquivos de áudio.
ActiveX e NetscapeONE: rumo ao desenvolvimento de aplicações
JScript e ActiveX
À medida que o interesse por JavaScript crescia, os navegadores concorrentes, como o Internet Explorer, estavam sob pressão para habilitar recursos de scripting semelhantes. Embora o “Java” estivesse sob a marca registrada da Sun, o JavaScript era aberto e licenciado gratuitamente, permitindo que a Microsoft aplicasse engenharia reversa em sua própria implementação, o JScript, que foi lançado com o Internet Explorer 3.0 em agosto de 1996.
Além disso, o JScript pode se integrar ao ecossistema mais abrangente da Microsoft como parte de um conjunto de tecnologias conhecido como ActiveX. De acordo com umpress release de 1996, o ActiveX destinava-se a “formar uma estrutura robusta para a criação de conteúdo interativo usando componentes de software, scripts e aplicações existentes” e permitia que os usuários “integrassem aplicações em navegadores da web para que os dados gerenciados por essas aplicações se tornassem acessíveis como páginas da web.” Também permitiu a criação de aplicações interativas no backend via suporte para JScript, bem como para VBScript, uma linguagem de scripting derivada do Visual Basic da Microsoft.
NetscapeONE e JavaScript 1.1
Além da popularidade do JavaScript, o grande impulso para o lançamento do ActiveX da Microsoft foi um projeto semelhante ao da Netscape desenvolvido para expandir o HTML além do navegador e avançar nos domínios do desenvolvimento de aplicações web. Este projeto, conhecido como NetscapeONE, permitiu que as páginas da web apresentassem não apenas informações, mas também servissem de contêineres para as aplicações comerciais.
O NetscapeONE, assim como o Netscape 3.0, também incluiu a versão 1.1 do JavaScript, que permitia a criação de bibliotecas JavaScript como páginas separadas em vez de inserir código JavaScript em arquivos HTML.
No entanto, as diferenças entre a implementação do JavaScript da Microsoft e do JavaScript 1.1 da Netscape resultaram em incompatibilidades que causaram falhas no funcionamento do código interativo, dependendo do tipo de navegador ou, às vezes, até mesmo da versão do navegador. A fim de realmente permitir o suporte entre plataformas, foi necessária uma padronização.
Padronização e Expansão
Ao criar especificações sobre como as ferramentas tecnológicas devem ser implementadas, osórgãos de padronização permitem a interoperabilidade entre plataformas e dispositivos. Em razão disso, a Netscape anunciou seus planos de padronizar o JavaScript por meio da ECMA International em umpress release de 1996. Como a ECMA não podia usar o nome de marca registrada “Java”, a linguagem foi padronizada sob o nome ECMAScript. A introdução do ECMAScript permitiu mais interoperabilidade entre navegadores, mas novos desenvolvimentos na história da internet estavam impulsionando a demanda por expansões ainda mais ambiciosas.
Um desses avanços foi o surgimento do AJAX, uma técnica de desenvolvimento que usa diversas tecnologias, incluindo o JavaScript, para permitir a programação assíncrona. Com ele, as páginas da web poderiam alterar o conteúdo de forma dinâmica sem precisar recarregar a página inteira e, como resultado, sem interromper a experiência do usuário. Embora umblog post de 2005 sugerisse inicialmente que o AJAX tenha sido apresentado principalmente como uma forma de melhorar a experiência do usuário, por reduzir o tempo que os usuários ficam “olhando para uma janela em branco do navegador e um ícone de ampulheta, esperando que o servidor faça algo”, suas ramificações incluem muitos recursos da web amplamente usados atualmente. Isso inclui as sugestões de pesquisa que mudam conforme você as digita no Google para barras de status, notificações, feeds de notícias e outros elementos de atualização automática.
Node.js e JavaScript Server-side
Ao longo dos anos 2000, a introdução e o rápido crescimento da internet sem fio, dispositivos móveis conectados à internet, cloud computing e mídias sociais estavam levando o uso da internet a novos patamares, exigindo cada vez mais capacidade para atender a esse tráfego. Em 2009, a frustração com a incapacidade dos servidores Apache HTTP de lidarem com dezenas e centenas de milhares de requisições simultâneas inspirou a criação do Node.js.
Node.js é um ambiente de runtime que move o JavaScript para fora do navegador, permitindo que o JavaScript seja executado em qualquer lugar em que o Node.js estiver instalado, ao usar o Google V8 Engine para compilar o código JavaScript em machine code . Conforme observado peloJavaScript in Plain English, “isso mudou a linguagem JavaScript para sempre e ajudou lentamente a transformá-la mais em uma linguagem de programação e menos em uma de scripting” e permitindo aos desenvolvedores de front-end escreverem código server-side sem ter que aprender uma nova linguagem. Além disso, o Node.js aumenta a capacidade do servidor ao usar event loop e I/O assíncronos para lidar com diversas requisições simultâneas ao mesmo tempo.
JavaScript Hoje
Atualmente, o JavaScript é consistentemente classificado como a linguagem de programação mais usada por desenvolvedores web, deacordo com o GitHub. A partir deste ano, a W3Tech Surveysinforma que o JavaScript é usado para programação client-side por 97,1% de todos os sites, incluindo alguns dos sites mais populares do mundo, como Google, YouTube, Facebook e Amazon.
Os últimos anos trouxeram alguns dos desenvolvimentos mais surpreendentes em JavaScript até o momento, incluindo a introdução de:
- Async e await: funcionalidade do JavaScript que simplifica a programação de código assíncrono;
- Webassembly: linguagem complementar ao JavaScript que permite que o código escrito em diferentes linguagens seja executado em uma velocidade near-native;
- Typescript: variante do JavaScript que verifica a existência de erros em um programa antes da execução.
Embora o JavaScript tenha sido projetado rapidamente e destinado a pequenas tarefas de design de front-end, agora é um ecossistema rico e maduro que transformou a internet moderna com sites dinâmicos e aplicações web.
Edge Functions com Supporte a JavaScript
Aqui na Azion, um dos nossos principais objetivos é tornar a programação o mais simples e flexível possível. Por essa razão, o JavaScript, uma linguagem com suporte onipresente, concebida para oferecer facilidade de uso, é uma ótima opção para Edge Functions, um novo produto que traz a computação serverless para o edge da rede.
Nossa implementação de JavaScript usa o padrão ECMA, incluindo suporte para promises com async/await e, em breve, planos de suporte a WebAssembly. Com o Edge Functions, os desenvolvedores podem criar e executar funções orientadas a eventos no edge da rede, através de JavaScript Runtime APIs. As Edge Functions são executadas em milissegundos no edge node mais próximo de seu usuário final - escalam automaticamente e eliminam a necessidade de provisionar ou gerenciar recursos. Como resultado, há uma redução significativa de custos e de uso de recursos. Além disso, os desenvolvedores podem investir mais tempo concentrados no front-end de suas aplicações, garantindo a melhor funcionalidade e experiência do usuário possível.
Para conhecer mais sobre o Edge Functions, visite a página do produto ou crie uma conta gratuita para começar a programar funções orientadas a eventos em JavaScript ainda hoje.