Executando verificação de segurança...
22

Novas melhorias: Mais Performance e outras 6 melhorias 🎉

Mais uma semana se passou desde a última publicação sobre as melhorias no TabNews e ao longo desse tempo 7 novas implementações foram feitas!

* Observação: Eu demorei para escrever a publicação de hoje porque eu queria tentar encaixar mais uma implementação que vai melhorar as notificações por email e outras coisas relacionadas, mas vou lapidar alguns detalhes da implementação antes de fazer o deploy 🤝 então, vamos para as melhorias que já entraram em Produção:

1) Ainda mais performance nas páginas

Agora todos os metadados de uma página são computados apenas no lado do servidor e isto faz uma grande diferença em publicações com muita formatação porque, por exemplo, para utilizar o body de uma publicação dentro de uma metatag de description você precisa limpar toda formatação do Markdown.

Olha impacto que isso possa ter e para comparação, nota o campo Performance antes desta implementação:

Performance da página antes da otimização - 44 pontos

Agora veja o que aconteceu depois da implementação:

Performance da página depois da otimização - 73 pontos

Para uma página pesada, o score saiu de 44 para 73 pontos, o que é muito bom!!! E ainda temos margem para melhorar, o que é ótimo! Nota ali as propriedades Speed Index, Time to Interactive e principalmente Total Blocking Time que interessante. Melhorar isso melhora tudo, desde a experiência para pessoas usando o site em aparelhos com menos performance, até o nosso score em SEO. Quem puder se focar nessas tarefas para entender o que está acontecendo seria simplesmente sensacional!

Esta implementação que fez o score pular de 44 para 73 pontos foi realizada por kaique-soares, que recebeu uma refatoração muito massa de aprendendofelipe e as informações podem ser conferidas por essa Issue* 🎉

2) Implementar Rate-Limit

Foi dado mais um passo para tornar o TabNews mais seguro e agora nós implementamos Rate-Limit em todos os endpoints sensíveis da API, faltando apenas 1 endpoint não sensível que ainda não entrou na lista por um bug no Next.js que estamos acompanhando de perto 🤝

O legal é que agora qualquer endpoint pode ter seu rate-limit controlado dinamicamente e por variáveis de ambiente, onde conseguimos configurar limites globais e limites específicos para cada endpoint e cada método HTTP.

E para guardar o state das requisições estamos utilizando o Upstash, que é um serviço que consegue disponibilizar uma instância de Redis distribuída globalmente e por enquanto este é o atual consumo e custo:

Custo do Upstash

Esta implementação foi realizada por mim e teve total participação do aprendendofelipe porque para um dos upgrades de dependências ele importou o módulo nextjs-progressbar para dentro do projeto e participou de todas as pesquisas sobre o bug do Next.js, custos do Upstash e todas essas informações podem ser conferidas por essa Issue* 🎉

3) Mensagem muito mais bonita para lista de conteúdos vazia

Antes, quando você entrava na página exclusiva de algum usuário aqui do TabNews e esse usuário não tivesse feito nenhuma publicação, aparecia uma mensagem completamente desalinhada de Nenhum conteúdo encontrado:

Mensagem desalinhada de nenhum conteúdo encontrado

Mas isso não é TabNews, então agora você irá encontrar uma mensagem muito mais bonita:

Mensagem bonita e alinhada de nenhum conteúdo encontrado

Com um detalhe extremamente massa: se você estiver logado e acessar a sua própria página, será apresentado um botão para você criar o seu primeiro conteúdo:

Botão para criar conteúdo

Esta implementação foi realizada por luantoningalvan e as informações podem ser conferidas por essa Issue* 🎉

4) Breaking change: remoção da propriedade username do objeto content

Finalizando a breaking change da API, encerramos a movimentação de remover a propriedade username do objeto content e substituir ela pela propriedade owner_username.

Esta implementação foi realizada por mim e as informações podem ser conferidas por essa Issue* 🎉

5) Limpar todas as informações locais ao fazer Logout

Para tornar as informações digitadas aqui dentro do TabNews mais seguras e privadas, agora ao ser feito o Logout, todas as informações de rascunho das publicações que ficam salvas em localStorage são deletadas.

Antes era removido apenas o cache do user que guarda coisas como a quantidade de tabcoins, tabcash e as features do usuário logado, mas agora irá deletar tudo, incluindo novas informações que possam ser adicionadas em cache no futuro:

Limpeza total do localStorage usando o método clear()

Esta implementação foi realizada por rodrigoKulb e as informações podem ser conferidas por essa Issue* 🎉

6) Breaking change: estratégia best movida para relevant

Como antecipado nesta publicação, nós estamos deprecando a strategy best e substituindo ela para relevant no endpoint que lista os conteúdos.

Até então, o endpoint /api/v1/contents aceitava 3 tipos de estratégia:

EstratégiaDescrição
/api/v1/contents?strategy=bestOrdena pelos conteúdos mais relevantes.
/api/v1/contents?strategy=newOrdena dos conteúdos mais novos para os mais antigos.
/api/v1/contents?strategy=oldOrdena dos conteúdos mais antigos para os mais novos.

Mas o nome da estratégia best não faz sentido, pois ela não lista os melhores conteúdos e sim os mais relevantes para aquele momento, por isto ela está sendo renomeada para relevant. Em paralelo, a estratégia best poderá ser usada no futuro para ordenar as publicações apenas pelas tabcoins para um dia em específico. Por exemplo, mostrar qual foi a publicação mais popular do dia X.

Por hora, a estratégia best continua disponível na API e caso você possua algum client que implementou a paginação dos conteúdos do TabNews, fortemente sugerimos você utilizar o cabeçalho Link para que sua aplicação automaticamente utilize os links corretos. Isto significa que, se você utilizar este cabeçalho, você não precisará alterar sua aplicação para se adaptar a essa mudança. Caso queira mais informações sobre como isso funciona, sugiro ler essa publicação.

Esta implementação foi realizada por mim e as informações podem ser conferidas por essa Issue* 🎉

7) Preenchimento retroativo de TabCoins

Tudo sobre esta tarefa já foi antecipado nesta publicação e ela foi implementada por mim com participação de aprendendofelipe e as informações podem ser conferidas por essa Issue* 🎉

Conclusão

Há várias coisas que estão sendo feitas no TabNews com um carinho extremo, carinho que muitas vezes você não irá encontrar em ambientes corporativos. Nós podemos nos dar o luxo de fazer as coisas com calma, com qualidade, se importando de verdade com você que está lendo essa mensagem aqui e este carinho é um dos motivos que eu acredito vividamente que o TabNews será o "Blender" ou "Godot" da criação e leitura de conteúdos sobre Programação e Tecnologia no Brasil.

Tenham todos uma ótima semana!


⚠️ O repositório Open Source do TabNews ainda está em Modo Privado. Caso queira receber um convite para participar, leia esta publicação.

7

Falando sobre performance, acredito que um outro ponto que possa melhorar é realizar o carregamento de imagens/GIFs de forma lazy.

Entrei numa publicação e vi que tinha um GIF de 4 MB, mas ele estava dentro do meu campo de visão da publicação, então tudo bem. Com o passar do tempo, teremos mais comentários, talvez uma publicação com vários GIFs, e carregar tudo de uma vez pode afetar negativamente as métricas de performance, além de gastar dados desnecessariamente (a pessoa pode nunca ver as imagens e GIFs que já foram carregados).

5

A cada atualização, eu fico impressionado com a quantidade de melhorias.

Fico muito contente com o carinho que todo mundo tem colocado nesse “pedaço especial de internet“!

5

Tá ficando tudo foda demais. Eu tô na correria e não consigo mais acompanhar tanto, mas toda vez que entro fica cada vez mais incrível isso aqui. Parabéns a todos os envolvidos! :D

2

Gabriel, estamos com saudades das suas publicações aqui no TabNews e contribuições no repositório, todas foram muito legais 😍 mas imagino que cada vez mais se aproximando do evento a correria irá aumentar 🤝

5

Wooooowwww, mais melhorias muito boooaas!!!

Me pergunto, qual o limite da performance? Existe alguma forma de deixar o site tão performático que alcance o limite? Qual é este limite?

E o mais incrível desse assunto de performance é que é tudo feito com JS, o que antigamente era loucura pensar nisso, hoje em dia é totalmente real e surreal!!

Isso é prova de que o que as pessoas diziam no passado sobre performance das linguagens de scripting eram apenas falácias ou uma realidade só para aquele momento, o que nada tem haver para nossa realidade de agora e o que tem para vir no futuro próximo!

3

Tenho lido alguns livros do Uncle Bob. Ele menciona diversas vezes que o objetivo é alcançar uma assíntota de algo. Se considerarmos que o objetivo do tempo de carregamento do site é a assíntota de zero, significa que vamos trabalhar bastante para isso, e que chegaremos num ótimo resultado, mas por definição, nunca chegaremos no "zero".

Segue abaixo uma menção sobre a assíntota como objetivo, que encontrei nas minhas anotações sobre o livro The Clean Coder:

Conforme você amadurece na sua profissão, sua taxa de erro deve diminuir rapidamente em direção à assíntota de zero. Ela nunca chegará à zero, mas é sua responsabilidade chegar o mais perto possível disso.

3

Uau, a minha publicação sobre o Django foi utilizada para os testes de performance hahaha. Ganhei na loteria com essa

E parabéns pelo trabalho feito com as novas melhorias, pessoal 😄