O poderoso Rust no JavaScript, com SWC.
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:
- 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.