-
Notifications
You must be signed in to change notification settings - Fork 411
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Nova estratégia de relevantes (ainda pelo saldo de TabCoins) #748
Conversation
The latest updates on your projects. Learn more about Vercel for Git ↗︎
|
Apenas registrando aqui que ao invés de testar a performance somente do banco com a nova query, eu testei o tempo de execução da função Os resultados foram tempos muito similares para Registro também que a parte de |
Ahhhh que sensacional a parte do Sobre o E que susto entrar em Preview e ter só a sua publicação 😂 😂 😂 mas faz total sentido!! 🤝 🤝 🤝 |
Pois é, isso, somado a não precisar reclassificar os conteúdos na lambda, compensou a diferença na performance da query 🎉
Também reparei nisso. Se os caches aparecem nesse contagem, deveria ter um a mais (que era o único conteúdo retornado nos relevantes), por isso falei que no próximo commit vai ser um número maior de páginas, pois vou mudar a estratégia para
Ninguém publicou nada em homologação nos últimos dias... hahaha... Todo mundo ansioso pelo vídeo de lançamento 🚀
Isso está fixo na query... Tem uma janela de TabCoins acima de 13, outra acima de 7... E isso vai intercalando com as janelas de tempo Daí acho que devemos deixar mais flexível, pois a query deve ir para uma função que vai exigir uma migration para ser alterada, mas essa função pode receber esses parâmetros. E acho até que podemos deixar esses parâmetros no Acho que a próxima etapa já vai exigir rodar uma migration para salvar a função que calcula o Score e a função que recebe os parâmetros e efetua o ranqueamento. Daí não vai mais precisar desse arquivo O que acha @filipedeschamps? Já crio essas funções (o que não deve mudar nada no funcionamento e performance) ou quer testar mais alguma coisa antes? Aproveitando... Tomei um 429 aqui. Acho que só porque deixei a página de status aberta. E se não foi por isso, precisamos investigar 😮 |
Esqueci de comentar... Se as duas publicações estivessem na mesma janela de tempo bastaria ter 1 TabCoin a mais para ficar por cima. E as janelas de tempo estão assim: 1h, 6h, 1 dia, 3 dias e 7 dias. |
Show! Recebi o alerta aqui: E analisando os logs, foi por conta dela mesmo 😂 Ela faz
Me parece show, mas ao mesmo tempo fico pensando que o agoritmo que eu criei hoje não é o melhor do mundo, mas mesmo assim não houve a necessidade de ficar mexendo tanto nele e está a um tempo consideravel no ar sem alteração alguma. Dado a isso, eu imagino que iremos achar uma configuração muito boa rapidamente com o seu algoritmo e não iremos mexer nele por muito tempo, e quando mexer, seria legal ver isso sendo provado de alguma forma pelos testes (se tiver algum impacto). Deixei esse trecho abaixo em itálico porque a fonte é tipo "vozes da minha cabeça": Fiquei pensando alguns bons minutos aqui e reavaliando/considerando algumas implementações no passado e até mesmo ao longo do desenvolvimento aqui no TabNews eu percebi que tudo que teve uma probabilidade de ficar "dormente", não valeu a pena criar configuração ou sofisticação em cima. O débido dessa sofisticação, no tempo suficiente, vai transformar o saldo da implementação em negativo. Então mesmo se você passar por um estágio inicial de ativamente modificar algo que após isso irá ficar dormente, chuto que vale a pena deixar implementado de forma estática e consolidado tudo num mesmo lugar, uma vez que esteja isolado/componetizado(?). Por algum motivo, é sempre muito mais fácil consumir um sistema assim e expandir ele para uma versão sofisticada se precisar, do que pegar uma versão sofisticada e simplificar (se a sofisticação não valeu a pena). Inclusive, é muito raro presenciar alguém simplificando algo (removendo sofisticação), quando ela não está sendo usada... mesmo que isso fica lá gerando uma porcentagem de entropia. Avaliando as sofisticações de forma isolada, nenhuma poderá incomodar, mas somando todas e projetando isso para o futuro, temos um sistema com muita entropia. E novamente, tudo que está simples e precisa ser transformado para algo mais sofisticado, vai ser transformado, onde o contrário já é muito mais raro. Entendo que a dinâmica seja assim, porque sofisticar algo é "feature driven", já simplificar algo é "maintenance driven". E com isso eu entendo cada vez mais frase abaixo: Fim das vozes da minha cabeça 😂😂😂
Minha sugestão é entrarmos com esse PR em produção e avaliar o resultado, entender se precisa fazer algum ajuste e em seguida fazer as funções que você citou na migration. |
Que bom que é só isso! Acho que é bom alterar os tempos antes do lançamento, então, para não deixar para depois, já vou mudar para 30s... Se quiser um tempo diferente é só falar.
HAHAHA... Que bom que não sou só eu que tenho essas vozes!!! Pensei que as minhas fossem por eu ser físico 😜 Então tá show! Só que ainda falta criar algo para quando chegar no fim dos relevantes, na linha do que você sugeriu aqui
Não pensei ainda na melhor maneira de sugerir isso. Talvez algo assim: Esses foram os conteúdos relevantes mais atuais. Veja os demais conteúdos na seção Recentes. Isso até pode ficar para depois, mas não dá pra enviar pra produção antes de saber o que vai acontecer se o |
aabd39b
to
dec8e75
Compare
Gerou os 60 estáticos e não mudou o tempo de deploy Mas realmente não muda o número de static files aqui: Além disso, o número de conexões com o banco chegou a um pico de 44 conexões, [Edit: |
dec8e75
to
4332651
Compare
Ficou sensacional!! É isso aí 🤝
Perfeito!
Também acho que vale a pena manter, pois a cada deploy perdemos os caches e se um robô do Google passar e ele ter que esperar para a página ser gerada, vai nos penalizar nos resultados. Com isso temos a garantia de os conteúdos mais frescos e relevantes sempre vão responder rápido para todo mundo 🤝 |
Mais um ponto positivo para passar os Voltei a Com esse resultado dá até vontade de aumentar esse número para 100, que seria o limite atual pelo validador do campo |
Hmmm que interessante! Fora que isso garante que de fato as páginas conseguem ser geradas (onde sem isso, só em produção a gente descobriria "bug de produção" ao gerar uma página de conteúdo).
Não vejo problema algum! Só tomaria cuidado com aqueles valores do |
4332651
to
e5afe44
Compare
e5afe44
to
462e870
Compare
Colocando 100, o número de conexões durante o deploy permaneceu em 5. Tranquilo demais! Só que achei estranho que ao navegar pela primeira vez na página de Recentes o número de conexões subiu. O que indica que o cache das páginas ainda estavam sendo gerados depois do deploy. Demorou um pouco, mas entendi o motivo. Só estava gerando as páginas no caminho Então agora coloquei os Então errei ao afirmar que
Pois agora o número de conexões não está mais subindo durante o deploy, o que indica que todos os caches são gerados pela mesma conexão com o banco 🎉🎉🎉 Vou voltar Esses foram os conteúdos relevantes mais atuais. Veja os demais conteúdos na seção Recentes. |
462e870
to
a854c66
Compare
a854c66
to
042faae
Compare
042faae
to
bdc083a
Compare
Acho que é isso por enquanto:
Separei os commits só por organização. Acho que está pronto para produção, se todos estiverem de acordo. Próxima etapas incluem:
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@aprendendofelipe por mim está ótimo e está pronto para o merge 👍
O único detalhe que eu talvez alteraria é na cor dos links gerados pelo EndOfRelevant
. Ficou um pouco invisível, mas eu posso estar sendo um "usuário falso" nesse ponto, porque eu fui atrás da feature, coisa que poderá não acontecer com um usuário normal. Um usuário normal poderá ler os itens da lista até esbarrar com esse item especial. De qualquer forma, se achar que faz sentido ter um impacto visual maior, eu deixaria os links com a cor padrão de links, sem estilizar a parte de estarem visitados inclusive.
@aprendendofelipe vou alterar a cor do link do |
O que eu pensei sobre isso foi mais informar o final dos relevantes do que criar um Call-to-Action. Por isso deixei no mesmo padrão dos conteúdos. Assim um usuário que ainda não está familiarizado com o sistema não vai ser desviados para os conteúdos mais recentes antes de percorrer todos os títulos classificados como relevantes. E a formatação menos destacada para quem já acessou o link de Recentes é justamente para não dar chamar atenção para algo que não é novidade para esses usuários. |
Mas se tem intenção de direcionar o usuário para esse caminho, então manda bala! 🤝 |
Show! Seu raciocínio faz total sentido! O meu receio começou a ser de um usuário novo no site não notar que aquele item é um aviso, acabar lendo por cima e ter a percepção que o TabNews tem só aquilo de conteúdo. E para o usuário hardcore, acredito que ele dificilmente vai chegar na última página 🤝
Show, mandando commit 👍 |
Merged! Let's goooooooooooooooooooooo!!!!! |
🤩🤩🤩
Provavelmente tinha alguém navegando pelas páginas de recentes para além da página 4. Acho que só pode ter sido isso que disparou as conexões. Mas o principal é que quem estava navegando até a terceira página não precisou aguardar nenhuma criação de estáticos 🎉🎉🎉 |
As janelas estão assim:
Os slots reservados para cada janela podem não ser ocupados se não houver conteúdo que se enquadre nos requisitos. Nesses casos o slot fica disponível para a próxima janela, por isso a quantidade máxima de slots de cada janela é maior do que o reservado. E caso uma janela tenha mais conteúdos enquadrados do que slots disponíveis, os conteúdos menos pontuados ficam de fora dessa janela, mas eles sempre se enquadram em alguma das próximas janelas. Reparem que o Quaisquer sugestões são bem vindas. |
Sugestão que me veio em mente agora é fazer como quando módulos expõem interfaces públicas, porém em beta/preview, que é expor a interface/propriedade/parâmetro, mas sob um namespace, como foi com o |
Complementando, poderia até ter uma página /relevantes_beta que é uma cópia simples do index da Home, só para termos um feeling real do resultado e conseguir mudar de uma aba para a outra e visualmente comparar as diferenças. Em paralelo, estou me perguntando aqui se o Então entendo que apesar do item mais votado da semana ter a maior qualificação, não significa que em X+3 ele seja o mais relevante para quem acessa diariamente o TabNews. Tava rabiscando aqui algumas ideias de janelas, não sei se fazem sentido, mas queria deixar registrado aqui caso tenha alguma utilidade:
Uma dúvida: como tudo isso funciona com a paginação (offset)? |
Gostei da ideia da página Uma sugestão... A gente pode criar uma branch específica para esses testes, deixar essa branch protegida no GitHub e configurar variáveis de ambiente específicas dessa branch na Vercel pra ela acessar o banco de produção. Daí como a branch vai estar protegida, a gente só aprova merge de mudanças no algoritmo de ranqueamento, e nada mais. Sobre a sua ideia com essas 4 janelas, vejo alguns problemas, mas vamos testar e ver o resultado.
Tudo normal... O Algoritmo primeiro ranqueia os conteúdos de 1 semana em memória e só depois aplica o LIMIT e OFFSET que foi passado. Por exemplo, agora tem 58 conteúdos relevantes, se acessar o link abaixo vai receber os 8 últimos do ranking: https://www.tabnews.com.br/api/v1/contents?strategy=relevant&page=2&per_page=50 |
Esse PR altera a estratégia de ranqueamento por relevância dos conteúdos.
Agora os conteúdos com até uma semana de idade são divididos em faixas de tempo de publicação e, dentro das faixas, são organizados pelo saldo de TabCoins (em breve iremos considerar uma outra estratégia de Score que se baseia nos votos, mas não somente o saldo de TabCoins).
Com isso podemos classificar um número maior de conteúdos ao mesmo tempo, diferente do que ocorre atualmente onde a classificação ocorre somente nos 30 conteúdos de cada página.
Para compensar um pouco a diminuição de performance pela query de ranqueamento mais pesada, foi eliminada a consulta que era feita apenas para buscar o
total_rows
. Agora esse valor é obtido na mesma consulta.Também foi inserido os
paths
dentro degetStaticPaths
para que os conteúdos relevantes tenham suas páginas estáticas geradas durante o deploy.