O poderoso Rust no JavaScript, com SWC.

Newerton Vargas de Araujo
3 min readOct 15, 2022

--

jest + swc + rust = ❤️

Na Next.js Conf de 26 de Outubro de 2021, foi anunciado no Next.js v12.0.0 um novo compilador em Rust o SWC, que é ~3x mais rápido no Fast Refresh e ~5x mais rápido nos builds.

Compilações mais rápidas e atualização rápida com o compilador Rust

Queremos tornar cada aplicativo Next.js mais rápido para produção e obter feedback instantâneo no desenvolvimento local. O Next.js 12 inclui um novo compilador Rust que aproveita a compilação nativa.

O compilador Rust é construído em SWC (Speedy Web Compiler), uma plataforma aberta para a próxima geração de ferramentas rápidas. Otimizaram o agrupamento e a compilação com uma atualização local ~3x mais rápida e compilações ~5x mais rápidas para produção. Outras melhorias e recursos incluem:

Resultados do uso do novo compilador Rust com grandes bases de código Next.js.
  • Mais melhorias de velocidade: validamos o compilador Rust com algumas das maiores base de código Next.js do mundo.
  • Observabilidade aprimorada no desempenho: Next.js agora gera o tempo de atualização rápida no console para compilação de cliente e servidor, incluindo o número de módulos e arquivos compilados.
    - Melhorias subjacentes ao webpack: fizemos várias melhorias ao webpack, incluindo otimizar a atualização rápida e tornar as entradas sob demanda mais confiáveis.

O que é o SWC?

O SWC é uma plataforma extensível baseada em Rust para a próxima geração de ferramentas de desenvolvimento rápidas. Ele é usado por ferramentas como Next.js, Parcel e Deno, além de empresas como Vercel, ByteDance, Tencent, Shopify e muito mais.

O SWC pode ser usado tanto para compilação quanto para agrupamento. Para compilação, ele usa arquivos JavaScript/TypeScript usando recursos modernos de JavaScript e gera um código válido que é suportado por todos os principais navegadores.

O SWC é 20x mais rápido que o Babel em um único thread e 70x mais rápido em quatro núcleos.

E nos testes, o quão performático é?

Nos testes iremos usar o jest (https://jestjs.io/) com TypeScript, no repositório codeeducation-ddd-typescript, temos 2 pacotes instalados para usar no transform do jest.config.ts, o ts-jest e o @swc/jest.

Configurações de Hardware

AMD Ryzen 7 5700G
Microsoft Windows 11 Pro
32,0 GB RAM
SSD 1TB

Configuração do ts.config.ts

export default {
...
transform: {
// "^.+\.(t|j)sx?$": 'ts-jest',
"^.+\.(t|j)sx?$": ["@swc/jest"],
},
...
};

Passo a passo dos testes

npm install

Usando o ts-jest

npm test — — clearCachenpm test (5x)

Usando o @swc/jest

npm test — — clearCachenpm test (5x)

Resultados

|  Runs   | ts-jest | @swc/jest |  Gain  |
| 1º test | 7.645 | 2.415 | 68.41% |
| 2º test | 6.399 | 1.962 | 69.34% |
| 3º test | 6.377 | 1.975 | 69.03% |
| 4º test | 6.406 | 1.959 | 69.42% |
| 5º test | 6.479 | 1.937 | 70.10% |
| Avg | 6.661 | 2.050 | 69.23% |

Conclusão

Observamos que o Rust tem uma grande importância para compiladores, espero que o SWC seja o inicio de muitos compiladores que venha aparecer, usando o jest com swc mais o coverage, você tem uma produtividade absurda com testes.

--

--

Newerton Vargas de Araujo

Software Enginner | Next.js | NestJs | React Native | Flutter | DevOps