Transcript

00:00:00Tan Stack Start está recebendo bastante atenção ultimamente,
00:00:03e a pergunta é: você deveria migrar do Next.js?
00:00:06É melhor que o Next.js?
00:00:08Ontem eu fiz uma livestream inteira onde comparei os dois e construí dois aplicativos,
00:00:14ou melhor,
00:00:14um aplicativo duas vezes,
00:00:16uma vez com Next.js e outra com Tan Stack Start,
00:00:19e você pode assistir se quiser ver isso.
00:00:21Mas aqui vou dar um resumo rápido do que é diferente,
00:00:24do que é melhor e qual você deveria usar..
00:00:27Claro,
00:00:28essa é apenas minha opinião,
00:00:29obviamente não é uma comparação objetiva,
00:00:32mas vou compartilhar minha experiência com os dois e o que penso sobre Next.js e Tan Stack Start.
00:00:37Eu defini algumas dimensões que quero usar para comparar os dois,
00:00:41e você poderia adicionar mais,
00:00:43assim como poderia adicionar mais frameworks aqui.
00:00:47Quero dizer,
00:00:48poderíamos incluir Remix,
00:00:49React Router agora,
00:00:50poderíamos incluir Nuxt para Vue,
00:00:52poderíamos falar sobre SvelteKit,
00:00:53mas não vou fazer isso.
00:00:54Este vídeo é sobre Next.js e Tan Stack Start,
00:00:57não porque os outros sejam ruins,
00:00:58mas porque esses dois são frequentemente comparados..
00:01:01Primeiro,
00:01:02vale notar que Tan Stack Start é,
00:01:04no final das contas,
00:01:05apenas Tan Stack Router mais algumas funcionalidades de servidor,
00:01:09principalmente.
00:01:10Você pode usar o Tan Stack Router isoladamente se quiser construir uma aplicação de página única que não precisa de renderização do lado do servidor e funções do lado do servidor,
00:01:19por exemplo.
00:01:19Você pode usar Tan Stack Router no lugar do React Router no seu aplicativo React Vite,
00:01:24por exemplo.
00:01:25Tan Stack Start,
00:01:25então,
00:01:26como mencionado,
00:01:26apenas adiciona funcionalidades do lado do servidor ao Tan Stack Router,
00:01:30transformando-o em um framework React full-stack completo.
00:01:32Assim como o Next.js,
00:01:33que obviamente também é um framework React full-stack.
00:01:37E isso também é importante.
00:01:38Às vezes recebo a pergunta se você deveria usar Next.js ou React Vite com React Router,
00:01:44e acho que essa é a comparação errada.
00:01:47Se você não precisa de lógica do lado do servidor,
00:01:50se não precisa de renderização do lado do servidor,
00:01:53então deveria simplesmente usar React Vite,
00:01:55ou seja,
00:01:55um projeto Vite com React,
00:01:57e adicionar React Router ou Tan Stack Router.
00:02:00Não há necessidade de seguir pelo caminho do Next.js nesse caso.
00:02:02De qualquer forma, vamos começar com essa comparação.
00:02:05E a primeira dimensão que escolhi é a compatibilidade com IA dos dois,
00:02:09porque obviamente isso importa hoje em dia.
00:02:12É muito provável que você esteja usando IA para gerar algum código,
00:02:16talvez todo o código que você quer no seu projeto Next.js ou Tan Stack Start,
00:02:21e por isso a IA obviamente precisa saber como escrever esse código.
00:02:25Obviamente,
00:02:26você pode e deve fornecer o contexto apropriado copiando páginas de documentação,
00:02:32ou usando um MCP como Context 7 para que a IA acesse a documentação,
00:02:36ou dizendo à IA que ela deveria fazer uma busca na web,
00:02:40ou adicionando habilidades de agente que ensinem a IA a usar Tan Stack Start ou Next.js.
00:02:47Mas por padrão,
00:02:48se você simplesmente fizer uma pergunta sobre Tan Stack Start ao ChatGPT,
00:02:52ele provavelmente saberá menos sobre isso do que sabe sobre Next.js,
00:02:56e o que ele sabe provavelmente está errado.
00:02:59Porque mesmo agora,
00:03:00enquanto gravo isso,
00:03:01Tan Stack Start ainda está em fase release candidate,
00:03:04o que significa que não há mais mudanças drásticas que quebrem compatibilidade,
00:03:08mas também não está totalmente estável.
00:03:10No último ano,
00:03:11ele esteve principalmente em beta e alpha,
00:03:14e esse é o conhecimento que esses chatbots de IA têm por padrão,
00:03:18razão pela qual eles terão conhecimento errado sobre Tan Stack Start.
00:03:23Então a compatibilidade com IA por padrão não é tão boa,
00:03:28é definitivamente melhor para Next.js.
00:03:31Agora,
00:03:31com Next.js também houve mudanças ao longo dos anos,
00:03:35há a nova diretiva use cache que a IA por padrão também não conhece tão bem,
00:03:40mas a IA tem um entendimento razoavelmente bom sobre o app router,
00:03:44sobre React server components e tudo isso,
00:03:46então é definitivamente melhor para Next.js do que para Tan Stack Start.
00:03:51Mas novamente,
00:03:52como mencionado,
00:03:53você deve garantir que está dando à IA o contexto extra apropriado de que ela precisa,
00:03:58caso contrário você está simplesmente usando a IA de forma errada.
00:04:02E quanto ao ecossistema?
00:04:03Com isso quero dizer outros recursos que você pode encontrar,
00:04:07como tutoriais,
00:04:08vídeos no YouTube,
00:04:09cursos,
00:04:10talvez também pacotes extras para esses frameworks..
00:04:13E aqui,
00:04:14é claro,
00:04:14o Next.js também parece muito melhor do que o Tan Stick Start simplesmente porque é mais antigo,
00:04:21existe há mais tempo,
00:04:22você encontrará mais recursos sobre ele porque também é maior.
00:04:27Também vale a pena notar,
00:04:28é claro,
00:04:29que ele é maior,
00:04:30o que significa mais uso,
00:04:31porque o Next.js faz parte daquela stack padrão que a IA tem,
00:04:35onde ela basicamente te dá Next.js,
00:04:37React,
00:04:38Tailwind e TypeScript para a maioria dos aplicativos web que você solicita.
00:04:42O Tan Stick Start provavelmente nunca será a escolha padrão dela..
00:04:47E,
00:04:47portanto,
00:04:48sem surpresa,
00:04:48se você comparar os gráficos de downloads dos dois,
00:04:51sim,
00:04:52o Tan Stick Start definitivamente tem menos downloads,
00:04:55como você pode ver.
00:04:56Se você remover o Next.js,
00:04:57pode ver uma boa tendência de crescimento para o Tan Stick Start.
00:05:01Meio que relacionado a esse ponto do ecossistema está,
00:05:04é claro,
00:05:04a facilidade de aprendizado,
00:05:06mas não apenas isso.
00:05:07Com facilidade de aprendizado,
00:05:09quero dizer quão simples é aprender a coisa?
00:05:11E eu sei que,
00:05:12é claro,
00:05:12agora na era da IA você não está interessado em aprender,
00:05:15mas como um bom desenvolvedor você deveria entender a coisa com a qual está trabalhando.
00:05:19Você pode não estar mais escrevendo todo o código manualmente,
00:05:22mas deveria entender o código que a IA gera para você.
00:05:25Então aprender ainda é importante.
00:05:28E aqui eu diria que para o Next.js é misto.
00:05:33Você pode dar a ele,
00:05:34não tenho certeza se eu gostaria de dar um ou dois pontos positivos,
00:05:38porque começar com o Next.js com o app router e,
00:05:41a propósito,
00:05:42tudo isso aqui se refere ao app router,
00:05:44é bastante direto.
00:05:46Faz sentido.
00:05:47Ontem na transmissão eu construí um pequeno aplicativo de anotações onde você podia criar,
00:05:54salvar e renderizar notas.
00:05:56E você faz isso com o Next.js simplesmente especificando alguns arquivos page.tsx que são suas,
00:06:01você adivinhou,
00:06:02páginas.
00:06:03Você pode ter segmentos dinâmicos.
00:06:04E aprender essa sintaxe e essa abordagem para construir seu aplicativo é bastante direto no final.
00:06:12Também acho que a documentação faz um bom trabalho ao guiá-lo pelos conceitos fundamentais passo a passo e ao fazer você começar com o Next.js.
00:06:22Mas as coisas ficam mais complexas quando você constrói aplicativos mais complexos e quando você mergulha nos conceitos mais avançados como caching.
00:06:30E especialmente a parte de caching pode ser super confusa porque o Next.js tomou a decisão de que,
00:06:36com a introdução do app router,
00:06:38eles queriam fazer um caching super agressivo em diferentes camadas,
00:06:43e entender isso e entender como configurar seus componentes para funcionar bem com esse caching integrado e dar aos seus usuários o comportamento que você quer que eles tenham pode ser complicado.
00:06:55Direi isso.
00:06:56Então começar é ótimo.
00:06:59Aprender os recursos mais avançados é difícil.
00:07:02Provavelmente darei dois pontos positivos aqui.
00:07:05E darei ao Tan Stick Start o mesmo,
00:07:08mas por razões muito diferentes.
00:07:09Para o Tan Stick Start,
00:07:11eu diria que começar é talvez um pouco mais difícil do que com o Next.js porque os documentos de introdução deles não são tão bons quanto os documentos do Next.js.
00:07:20Conceitos importantes estão faltando aqui,
00:07:23eu diria,
00:07:24como busca de dados ou mutações.
00:07:27Embora,
00:07:27se você já tem conhecimento de Next.js,
00:07:29há um documento de comparação muito bom que compara os recursos principais,
00:07:33incluindo relacionados à busca de dados e mutações.
00:07:36Mas acho que pode ser um pouco mais difícil porque os documentos,
00:07:40embora eu deva dizer que foram vastamente melhorados,
00:07:43ainda têm um pouco daquela sensação de despejo cerebral,
00:07:46onde não está super claro qual artigo você precisa e,
00:07:49bem,
00:07:50por exemplo,
00:07:51não há artigo de busca de dados aqui e coisas assim.
00:07:54Além disso,
00:07:54como o Tan Stick Start é construído em cima do Tan Stick Router para todas as coisas relacionadas a roteamento,
00:08:00você tem que ir para a documentação do Tan Stick Router,
00:08:03que também é bastante esmagadora quando você olha pela primeira vez.
00:08:07Mas uma vez que você supera essa barreira inicial,
00:08:10fica muito mais fácil e tudo,
00:08:12na minha opinião,
00:08:13faz muito sentido e não é tão difícil,
00:08:15e não há armadilhas ocultas como os problemas relacionados ao caching que você pode ter com o Next.js.
00:08:22É por isso que eu diria que começar é mais difícil com o Tan Stick Start,
00:08:26mas uma vez que você está rodando,
00:08:28é mais fácil progredir e mergulhar nos recursos mais avançados do que com o Next.js.
00:08:32Como mencionei,
00:08:33essa é apenas a minha opinião pessoal,
00:08:36é claro.
00:08:36E quanto à facilidade de uso do ponto de vista do desenvolvedor?
00:08:41Quão divertido é trabalhar com isso?
00:08:43Isso é totalmente subjetivo,
00:08:45é claro,
00:08:45mas o Next.js definitivamente tem alguns problemas aqui.
00:08:48Não apenas os problemas relacionados ao aprendizado potencialmente,
00:08:51mas também outros problemas.
00:08:53Por exemplo,
00:08:53com o cache pode acontecer que seu aplicativo se comporte de forma diferente no modo de desenvolvimento do que no modo de produção,
00:08:59o que significa que você sempre tem que testá-lo no modo de produção,
00:09:03o que você deveria fazer de qualquer maneira,
00:09:05mas fica bastante irritante se você tiver que fazer isso o tempo todo durante o desenvolvimento porque isso te deixa mais lento.
00:09:11Então esse é um grande problema que tive no passado.
00:09:14O servidor de desenvolvimento também pode ficar bastante lento.
00:09:18Pelo menos se você estiver usando a versão webpack,
00:09:21a nova versão padrão turbo pack é muito melhor nisso,
00:09:24mas na minha experiência ela não supera a configuração baseada em vite que o Tan Stack Start te oferece.
00:09:30Então vou dar três pontos positivos aqui porque na minha experiência trabalhar com ele tem sido super tranquilo do ponto de vista da experiência do desenvolvedor.
00:09:40É rápido,
00:09:41é previsível,
00:09:42não há comportamento estranho na maior parte,
00:09:45ainda existem algumas peculiaridades aqui e ali e ainda está em fase de release candidate,
00:09:51mas no geral eu prefiro a experiência do desenvolvedor do Tan Stack Start em relação à do Next.js.
00:09:57Obviamente isso pode ser diferente para você.
00:10:01Agora,
00:10:01e quanto aos recursos concretos oferecidos pelo Next.js e Tan Stack Start?
00:10:06Para o roteamento,
00:10:07como mostrei,
00:10:07no Next.js você tem uma abordagem baseada em arquivos,
00:10:10você configura arquivos que atuam como suas rotas e lá você tem várias convenções de nomenclatura que deve seguir.
00:10:16A documentação faz um bom trabalho ao explicá-las,
00:10:19mas definitivamente também existem recursos mais complexos como rotas paralelas que podem ser complicadas de configurar.
00:10:25O Tan Stack Start também tem uma abordagem baseada em arquivos usando o Tan Stack Router por baixo dos panos,
00:10:30como mencionado,
00:10:30e você também tem convenções de nomenclatura de arquivos para seguir aqui,
00:10:33que também são igualmente fáceis de aprender.
00:10:36Uma vantagem que você obtém do Tan Stack Start é que com seu roteamento baseado em arquivos ele te dá segurança de tipo completa,
00:10:43o que pode ser bem legal.
00:10:45Então ambos são baseados em arquivos e se resume às suas preferências qual padrão de nomenclatura você prefere,
00:10:52mas o Tan Stack Start também tem essa segurança de tipo de 100% que vem com seu roteador baseado em arquivos,
00:10:59o que é bom ter.
00:11:00E isso também responde à próxima questão,
00:11:02o Next.js tem um suporte muito bom ao TypeScript e o Tan Stack Start tem um suporte ainda melhor ao TypeScript na minha experiência.
00:11:11Também quando se trata de coisas como server actions ou server functions ou como quer que você queira chamá-las e busca de dados.
00:11:18Então sim,
00:11:18quando você usa TypeScript,
00:11:20o que acho que deveria,
00:11:21o Tan Stack Start é realmente um prazer para trabalhar.
00:11:24Agora quando se trata de busca de dados e mutações de dados,
00:11:27ambos como mencionei permitem que você execute código no servidor,
00:11:31ambos são aplicações React full stack,
00:11:33mas eles adotam abordagens diferentes.
00:11:35O Next.js usa React server components e por muito tempo foi o único framework que suportava React server components.
00:11:43Isso significa que seus componentes de página por padrão são renderizados apenas no servidor.
00:11:48Eles nunca são re-renderizados no cliente,
00:11:50o que significa que você pode colocar seu código de busca de dados como este que vai acessar um banco de dados por trás das cenas dentro dos seus componentes e isso não vai vazar para o cliente.
00:11:59O Tan Stack Start tem uma abordagem diferente.
00:12:01O suporte a React server components também vai chegar lá em breve,
00:12:04ainda não estava disponível quando gravei isso,
00:12:07mas a abordagem que estou mostrando aqui e que usei em todos os meus projetos também vai continuar a existir e nessa abordagem seus componentes de rota por padrão são renderizados tanto no lado do servidor quanto no lado do cliente,
00:12:19pré-renderizados no lado do servidor,
00:12:21atualizados no lado do cliente e portanto você não pode colocar seu código do lado do servidor nas funções de componente.
00:12:27Em vez disso,
00:12:28ele usa um padrão de loader que você pode conhecer do Remix,
00:12:31por exemplo,
00:12:32onde você pode anexar um loader às suas rotas que também será executado no lado do cliente e do servidor,
00:12:38mas você pode então chamar funções que são decoradas ou encapsuladas com create server functions,
00:12:44por assim dizer,
00:12:45que é uma função fornecida pelo Tan Stack Start que marca uma função para ser executada apenas no lado do servidor,
00:12:51mas chamável a partir do lado do cliente.
00:12:54Isso é o que é uma server function.
00:12:56E se você tiver uma função assim,
00:12:58pode chamá-la com segurança em um loader ou também no corpo da função do componente e o código permanecerá no lado do servidor.
00:13:05Nos bastidores, uma requisição HTTP será enviada.
00:13:07Então o Next.js depende principalmente de RSC,
00:13:10embora você possa,
00:13:11é claro,
00:13:11também configurar endpoints de API lá e usar useEffect com a Fetch API.
00:13:15O Tan Stack Start usa loaders e server functions,
00:13:18embora também valha a pena notar que lá também você pode configurar rotas de API e usar a Fetch API,
00:13:23Tan Stack Query ou qualquer coisa assim,
00:13:26mas a abordagem principal integrada é essa abordagem de loader mais server function.
00:13:31Para mutações,
00:13:32o Next.js usa server actions,
00:13:34que são ações decoradas com essa diretiva especial useServer.
00:13:39Uma das coisas que o Next.js tem são essas diretivas useServer e useClient.
00:13:44Algumas pessoas não gostam delas,
00:13:46eu também não sou muito fã,
00:13:47devo dizer.
00:13:48E se você tiver um arquivo decorado com useServer,
00:13:50então todas as funções nele se tornam server functions que serão executadas apenas no servidor.
00:13:55Não no lado do cliente,
00:13:56embora você ainda possa chamá-las do lado do cliente.
00:13:59Então,
00:13:59por exemplo,
00:14:00essa função saveNode que eu tenho aqui,
00:14:02que armazena um node no banco de dados,
00:14:05ainda pode ser chamada do lado do cliente aqui usando o hook useActionState,
00:14:09por exemplo.
00:14:10No Tan Stack Start,
00:14:11simplesmente continuamos usando essa abordagem de função createServer aqui,
00:14:14porque eu mencionei que são funções que têm garantia de execução no servidor e você pode usá-las para busca de dados ou para mutações de dados,
00:14:21porque novamente o código só será executado no servidor.
00:14:24Em uma função de componente que também é renderizada no cliente,
00:14:27você pode usar o hook useServer function fornecido pelo Tan Stack Start para encapsular sua server function e isso essencialmente a torna chamável do lado do cliente e fornece recursos extras como tratamento automático de redirecionamento e assim por diante.
00:14:39Então isso me permite chamar essa server function dos meus componentes do lado do cliente.
00:14:43Então o Next.js usa as server functions oficiais do React,
00:14:47o Tan Stack Start usa suas próprias server functions no final.
00:14:51A ideia geral é, claro, a mesma.
00:14:54Agora, e quanto ao caching?
00:14:56Eu mencionei que essa é a parte difícil.
00:14:58É bastante agressivo e potencialmente complexo no Next.js.
00:15:04É definitivamente uma das partes mais difíceis do Next.js.
00:15:07E eu cubro isso,
00:15:08assim como todos os outros conceitos importantes do Next.js,
00:15:11no meu curso de Next.js,
00:15:13caso você queira aprender tudo sobre Next.js.
00:15:16Esse curso é um excelente recurso para levá-lo de iniciante absoluto a usuário avançado de Next.js.
00:15:21Mas o caching é definitivamente um dos tópicos mais problemáticos do Next.js.
00:15:26A vantagem,
00:15:27é claro,
00:15:27é que devido aos padrões agressivos,
00:15:30você pode potencialmente obter um caching muito bom para seus usuários.
00:15:35Mas você também pode dar um tiro no próprio pé com bastante facilidade.
00:15:38Para o Tan Stack Start, eu resumiria como bons padrões.
00:15:43Muito menos agressivo que o Next.js e,
00:15:45o mais importante,
00:15:46consistente na minha experiência,
00:15:48pelo menos entre o modo de desenvolvimento e produção.
00:15:52Ele também oferece caching para que quando os usuários naveguem entre rotas,
00:15:55por exemplo,
00:15:56os dados sejam armazenados em cache por um determinado período de tempo.
00:16:00De modo que,
00:16:00para navegação rápida,
00:16:01você não esteja enviando várias requisições ao seu servidor.
00:16:04E isso,
00:16:05é claro,
00:16:05ajuda muito com o desempenho,
00:16:07mas não está armazenando tudo em cache ou tentando armazenar tudo em diferentes camadas,
00:16:11e isso pode facilitar sua vida como desenvolvedor.
00:16:14Isso também significa,
00:16:15é claro,
00:16:16que se você quiser obter o melhor desempenho para seus usuários e potencialmente economizar tráfego,
00:16:21você mesmo tem que definir bons cabeçalhos de cache e pensar um pouco mais sobre como você armazena sua aplicação em cache do que talvez precise fazer com o Next.js.
00:16:30Aí você tem que pensar em outros problemas.
00:16:32E quanto à estabilidade?
00:16:35Aqui eu provavelmente vou dar dois pontos positivos para ambos.
00:16:39Os dois são bastante estáveis.
00:16:40Obviamente o Next.js é mais maduro,
00:16:43mas na minha experiência ele tem sido bem problemático nos últimos anos,
00:16:47especialmente o servidor de desenvolvimento teve seus problemas com travamentos e coisas do tipo.
00:16:53Mas melhorou muito e no geral é uma experiência estável,
00:16:57e é claro que existem centenas e milhares de aplicações que o utilizam e estão rodando em produção sem problemas.
00:17:03Isso é definitivamente importante destacar.
00:17:06Obviamente tivemos aquelas vulnerabilidades de segurança do React,
00:17:09mas por um lado algumas delas podem ser descobertas no futuro e também afetar o 10-stack start,
00:17:13especialmente quando eles também começarem a suportar React server components,
00:17:17e por outro lado isso não é primariamente um problema do Next.js,
00:17:20é claro.
00:17:21O 10-stack start ainda está em fase de release candidate e eu definitivamente encontrei minha boa cota de problemas com ele.
00:17:28Alguns travamentos estranhos,
00:17:29mensagens de erro estranhas,
00:17:31comportamentos esquisitos aqui e ali,
00:17:33então eu também poderia dar apenas um ponto positivo por isso,
00:17:36mas como está em fase de release candidate e considerando isso é bastante estável,
00:17:40vou dar dois aqui.
00:17:41Apenas esteja ciente de que você pode definitivamente encontrar alguns problemas ao usar o 10-stack start.
00:17:47Dito isso,
00:17:47eu tenho aplicações rodando em produção como o buildmygraphic.com aqui,
00:17:51que você pode usar para criar infográficos incríveis com ajuda de IA,
00:17:55que são alimentados pelo 10-stack start e funcionam sem problemas e também não foram problema nenhum de construir.
00:18:02E quanto a recursos incluídos?
00:18:04Então,
00:18:04quão fácil é obter renderização de imagem otimizada,
00:18:08internacionalização ou qualquer uma dessas coisas legais?
00:18:12Aqui o Next.js definitivamente está fazendo um trabalho melhor.
00:18:15Ele tem seu componente de imagem integrado,
00:18:18tem suporte integrado para internacionalização e o 10-stack start não tem nada disso.
00:18:24Não sei se está planejado,
00:18:25não sei se é importante para você,
00:18:27definitivamente não é algo que você precise,
00:18:30existem outras alternativas,
00:18:31pacotes de terceiros que você pode usar,
00:18:33talvez você nem queira os recursos integrados,
00:18:36mas se isso é algo com que você se importa ou se preocupa,
00:18:39então o Next.js é provavelmente a melhor escolha aqui.
00:18:43E quanto ao deployment?
00:18:45Esse é um tópico difícil.
00:18:48O Next.js é desenvolvido pela Vercel,
00:18:51é claro,
00:18:51e se você faz o deploy na Vercel é super fácil e tranquilo.
00:18:56Tudo é otimizado para isso.
00:18:58Historicamente tem sido um pouco difícil fazer o deploy em seus próprios servidores,
00:19:03por exemplo,
00:19:03mas para ser justo a equipe do Next.js realmente fez um trabalho para facilitar isso,
00:19:08escrever melhor documentação e,
00:19:10portanto,
00:19:11hoje em dia eu diria que você pode absolutamente fazer o deploy em outros serviços sem muitos problemas também.
00:19:17Então isso são dois ou três pontos positivos,
00:19:21três pontos positivos se você usar a Vercel e dois provavelmente se você usar outros provedores,
00:19:28eu diria.
00:19:28Para o 10 stack start vou dar dois aqui agora,
00:19:33mas eu também poderia dar três.
00:19:36A principal razão para eu dar dois é que no momento em que estou gravando isso a documentação de hospedagem ainda está um pouco complicada.
00:19:45Existem parceiros oficialmente suportados como Cloudflare e Netlify que têm documentação muito boa e onde o deployment provavelmente é bem tranquilo,
00:19:54mas eu não os usei.
00:19:56Se você quiser rodar no seu próprio VPS,
00:19:58por exemplo com BUN,
00:20:00existem algumas instruções aqui,
00:20:02mas achei um pouco difícil segui-las ou encontrei alguns problemas que foram todos resolvíveis,
00:20:09mas definitivamente me tomou algum tempo.
00:20:12Acho que uma vez que haja um bom guia para fazer o deploy do 10 stack start com BUN ou Node em um VPS,
00:20:18o deployment vai definitivamente ficar mais fácil,
00:20:20especialmente se esse guia incluir recomendações sobre algumas melhores práticas que você deve seguir ou possíveis armadilhas que você pode enfrentar.
00:20:29Mas como mencionei,
00:20:29você poderia definitivamente também dar três pontos positivos aqui dependendo de como você olha para isso.
00:20:34Como mencionei,
00:20:35isso tudo é subjetivo e apenas minha experiência,
00:20:37meus pensamentos e obviamente estou também interessado em ouvir seus pensamentos.
00:20:42Se você fez a mudança ou o que você pensa sobre o Next.js e o T3 Stack,
00:20:46se você está considerando mudar ou se você não usa nenhum dos dois e em vez disso usa outra opção.

Key Takeaway

TanStack Start oferece melhor experiência de desenvolvimento e segurança de tipos que Next.js, mas Next.js continua sendo a escolha mais madura com melhor ecossistema, compatibilidade com IA e recursos integrados, sendo a decisão dependente das necessidades específicas do projeto.

Highlights

TanStack Start está em fase release candidate enquanto Next.js é mais maduro, mas ambos são frameworks React full-stack viáveis

Next.js tem melhor compatibilidade com IA e ecossistema maior devido ao tempo de mercado, mas TanStack Start oferece melhor segurança de tipos

Next.js usa React Server Components e caching agressivo em múltiplas camadas, o que pode ser complexo de gerenciar

TanStack Start usa pattern de loaders e server functions com abordagem menos agressiva de caching, mais consistente entre dev e produção

Começar com Next.js é mais fácil, mas recursos avançados (especialmente caching) são mais difíceis; TanStack Start tem curva inversa

Next.js tem recursos integrados como otimização de imagens e internacionalização; TanStack Start depende de pacotes terceiros

Deployment no Next.js é otimizado para Vercel; TanStack Start tem documentação de hospedagem ainda em desenvolvimento

Timeline

Introdução e Contexto da Comparação

O vídeo apresenta uma comparação entre TanStack Start e Next.js, dois frameworks React full-stack. O autor menciona ter feito uma livestream onde construiu o mesmo aplicativo (um app de notas) duas vezes, uma com cada framework. Ele deixa claro que a comparação é subjetiva e baseada em sua experiência pessoal. Várias dimensões serão usadas para avaliar os dois frameworks, embora outros frameworks populares como Remix, React Router, Nuxt e SvelteKit não sejam incluídos nesta análise. O foco está especificamente em Next.js e TanStack Start porque são frequentemente comparados pela comunidade.

Fundamentos do TanStack Start

TanStack Start é essencialmente TanStack Router com funcionalidades de servidor adicionadas. O TanStack Router pode ser usado isoladamente para single-page applications sem necessidade de server-side rendering. Ele pode substituir React Router em aplicativos React com Vite, por exemplo. Quando adiciona funcionalidades server-side, se torna TanStack Start, um framework React full-stack completo similar ao Next.js. O autor enfatiza que se você não precisa de lógica server-side ou server-side rendering, deve simplesmente usar React com Vite e adicionar React Router ou TanStack Router, sem necessidade de frameworks full-stack como Next.js.

Compatibilidade com IA

A compatibilidade com IA é importante porque desenvolvedores frequentemente usam IA para gerar código. Next.js tem clara vantagem aqui, pois ferramentas de IA têm melhor conhecimento sobre ele por padrão. TanStack Start está em release candidate e passou a maior parte do último ano em beta/alpha, então o conhecimento das IAs está desatualizado e frequentemente incorreto. ChatGPT e outras ferramentas conhecem bem o Next.js app router e React Server Components. No entanto, o autor ressalta que desenvolvedores devem fornecer contexto apropriado à IA, seja copiando documentação, usando MCP como Context 7, ou adicionando habilidades de agente que ensinem sobre TanStack Start. Sem esse contexto extra, você está usando IA de forma inadequada.

Ecossistema e Recursos Disponíveis

Next.js tem ecossistema significativamente maior com mais tutoriais, vídeos, cursos e pacotes extras disponíveis. Existe há mais tempo e tem maior adoção. É parte da stack padrão que IA geralmente recomenda (Next.js, React, Tailwind, TypeScript) para aplicativos web. TanStack Start provavelmente nunca será escolha padrão da IA. Os gráficos de downloads do NPM mostram que Next.js tem muito mais downloads que TanStack Start, embora quando se remove Next.js da comparação, é possível ver uma boa tendência de crescimento para TanStack Start. O tamanho do ecossistema reflete diretamente na quantidade de recursos de aprendizado e suporte comunitário disponível.

Facilidade de Aprendizado

Ambos frameworks recebem dois pontos positivos, mas por razões diferentes. Next.js é direto para começar - a sintaxe de arquivos page.tsx e segmentos dinâmicos fazem sentido, e a documentação guia bem pelos conceitos fundamentais. Porém, fica complexo com recursos avançados, especialmente caching com múltiplas camadas agressivas. TanStack Start tem início mais difícil porque os documentos de introdução não são tão bons quanto do Next.js, faltando conceitos importantes como data fetching e mutations (embora haja bom documento de comparação com Next.js). A documentação tem sensação de 'brain dump' e você precisa consultar docs do TanStack Router separadamente, o que pode ser esmagador inicialmente. Uma vez superada a barreira inicial, tudo faz mais sentido e não há armadilhas ocultas como problemas de caching. O autor enfatiza que aprender continua importante mesmo na era da IA, pois desenvolvedores devem entender o código gerado.

Experiência do Desenvolvedor (DX)

TanStack Start recebe três pontos positivos versus menos para Next.js nesta categoria subjetiva. Next.js tem problemas significativos de DX: o cache pode causar comportamento diferente entre modo desenvolvimento e produção, forçando testes constantes em produção o que deixa desenvolvimento mais lento. O servidor de desenvolvimento pode ser lento, especialmente na versão webpack; a nova versão turbo pack padrão melhorou mas ainda não supera a configuração baseada em Vite do TanStack Start. A experiência com TanStack Start tem sido 'super tranquila' - é rápido, previsível, sem comportamento estranho na maior parte. Ainda existem algumas peculiaridades aqui e ali dado que está em release candidate, mas no geral o autor prefere fortemente a DX do TanStack Start. Ele reconhece que essa preferência pode ser diferente para outros desenvolvedores.

Roteamento e TypeScript

Ambos frameworks usam abordagem baseada em arquivos com convenções de nomenclatura que a documentação explica bem. Next.js tem recursos complexos como rotas paralelas que podem ser complicados. TanStack Start também usa roteamento baseado em arquivos via TanStack Router, com convenções igualmente fáceis de aprender. A principal vantagem do TanStack Start é segurança de tipo completa (100% type-safe) que vem com seu roteador baseado em arquivos, o que é 'bem legal'. Quanto ao suporte TypeScript geral, Next.js tem suporte muito bom, mas TanStack Start tem suporte ainda melhor na experiência do autor, especialmente para server actions/functions e data fetching. Ao usar TypeScript (o que o autor recomenda fortemente), TanStack Start é realmente um prazer para trabalhar.

Data Fetching e Mutations - Abordagens Diferentes

Ambos permitem executar código no servidor como aplicações full-stack React, mas com abordagens diferentes. Next.js usa React Server Components e foi por muito tempo o único framework suportando RSCs. Componentes de página são renderizados apenas no servidor por padrão e nunca re-renderizados no cliente, permitindo colocar código de acesso a banco de dados diretamente nos componentes sem vazar para o cliente. TanStack Start terá suporte RSC em breve, mas sua abordagem atual (que continuará existindo) renderiza componentes de rota tanto no servidor quanto no cliente - pré-renderizados no servidor, atualizados no cliente. Você não pode colocar código server-side nas funções de componente; em vez disso, usa pattern de loader (similar ao Remix) anexado às rotas. Loaders executam em ambos os lados, mas podem chamar funções envolvidas com createServerFn que só executam no servidor mas são chamáveis do cliente via requisições HTTP. Para mutations, Next.js usa server actions com diretiva 'use server', enquanto TanStack Start continua usando createServerFn com hook useServerFn para encapsular e tornar chamável do cliente.

Caching - Complexidade vs Simplicidade

Caching é identificado como uma das partes mais difíceis do Next.js - é agressivo e potencialmente complexo, com múltiplas camadas. O autor cobre isso detalhadamente em seu curso Next.js que leva de iniciante a usuário avançado. A vantagem dos padrões agressivos do Next.js é potencial para caching muito bom para usuários, mas também é fácil 'dar um tiro no próprio pé'. TanStack Start tem 'bons padrões' - muito menos agressivo que Next.js e, mais importante, consistente entre modo desenvolvimento e produção. Oferece caching para navegação entre rotas por período determinado, evitando múltiplas requisições para navegação rápida, ajudando com desempenho. Não tenta cachear tudo em diferentes camadas, facilitando a vida do desenvolvedor. O trade-off é que para obter melhor desempenho e economizar tráfego, você mesmo precisa definir bons cabeçalhos de cache e pensar mais sobre caching do que com Next.js, embora com Next.js você enfrente outros problemas diferentes.

Estabilidade

Ambos recebem dois pontos positivos. Next.js é mais maduro mas tem sido problemático nos últimos anos, especialmente o servidor de desenvolvimento com travamentos. Melhorou bastante e no geral é experiência estável, com centenas/milhares de aplicações em produção sem problemas. Houve vulnerabilidades de segurança do React, mas algumas podem afetar TanStack Start no futuro (especialmente com suporte a RSC) e não são primariamente problema do Next.js. TanStack Start ainda está em release candidate e o autor encontrou boa cota de problemas: travamentos estranhos, mensagens de erro estranhas, comportamentos esquisitos. Poderia receber apenas um ponto positivo, mas considerando estar em RC é bastante estável, merecendo dois pontos. Usuários devem estar cientes que podem encontrar problemas. O autor tem aplicações em produção como buildmygraphic.com usando TanStack Start funcionando sem problemas.

Recursos Integrados

Next.js faz trabalho definitivamente melhor aqui com componente Image integrado para otimização de renderização de imagens e suporte integrado para internacionalização. TanStack Start não tem nenhum desses recursos. Não está claro se está planejado, pode não ser importante para todos os desenvolvedores, e definitivamente não é algo necessário - existem alternativas e pacotes de terceiros. Alguns desenvolvedores podem nem querer os recursos integrados. Mas se esses recursos são algo com que você se importa ou se preocupa, Next.js é provavelmente a melhor escolha nesta categoria. A ausência de recursos integrados no TanStack Start reflete sua filosofia mais minimalista e modular.

Deployment e Hospedagem

Next.js é desenvolvido pela Vercel e fazer deploy lá é super fácil e tranquilo com tudo otimizado. Historicamente foi difícil fazer deploy em servidores próprios, mas a equipe Next.js fez trabalho para facilitar isso com melhor documentação, então hoje você pode absolutamente fazer deploy em outros serviços sem muitos problemas. Merece dois ou três pontos positivos - três se usar Vercel, dois para outros provedores. TanStack Start recebe dois pontos (poderia ser três). A documentação de hospedagem ainda está complicada no momento da gravação. Existem parceiros oficialmente suportados como Cloudflare e Netlify com documentação muito boa onde deployment é provavelmente tranquilo, mas o autor não os usou. Para rodar em VPS próprio com BUN existem instruções, mas o autor achou difícil de seguir e encontrou problemas resolvíveis mas demorados. Uma vez que haja bom guia para deploy com BUN ou Node em VPS incluindo melhores práticas e armadilhas possíveis, ficará definitivamente mais fácil.

Conclusão e Convite ao Engajamento

O autor reitera que toda a comparação é subjetiva e baseada apenas em sua experiência e pensamentos. Ele expressa interesse genuíno em ouvir os pensamentos da audiência sobre o tema. Convida viewers a compartilharem se fizeram a mudança entre os frameworks, o que pensam sobre Next.js e TanStack Start (chamado brevemente de T3 Stack por engano), se estão considerando mudar, ou se não usam nenhum dos dois e preferem outra opção. Este encerramento enfatiza que a escolha de framework é pessoal e depende de necessidades específicas, encorajando discussão comunitária sobre as diferentes opções disponíveis no ecossistema React.

Community Posts

View all posts