;(function() { window.createMeasureObserver = (measureName) => { var markPrefix = `_uol-measure-${measureName}-${new Date().getTime()}`; performance.mark(`${markPrefix}-start`); return { end: function() { performance.mark(`${markPrefix}-end`); performance.measure(`uol-measure-${measureName}`, `${markPrefix}-start`, `${markPrefix}-end`); performance.clearMarks(`${markPrefix}-start`); performance.clearMarks(`${markPrefix}-end`); } } }; /** * Gerenciador de eventos */ window.gevent = { stack: [], RUN_ONCE: true, on: function(name, callback, once) { this.stack.push([name, callback, !!once]); }, emit: function(name, args) { for (var i = this.stack.length, item; i--;) { item = this.stack[i]; if (item[0] === name) { item[1](args); if (item[2]) { this.stack.splice(i, 1); } } } } }; var runningSearch = false; var hadAnEvent = true; var elementsToWatch = window.elementsToWatch = new Map(); var innerHeight = window.innerHeight; // timestamp da última rodada do requestAnimationFrame // É usado para limitar a procura por elementos visíveis. var lastAnimationTS = 0; // verifica se elemento está no viewport do usuário var isElementInViewport = function(el) { var rect = el.getBoundingClientRect(); var clientHeight = window.innerHeight || document.documentElement.clientHeight; // renderizando antes, evitando troca de conteúdo visível no chartbeat-related-content if(el.className.includes('related-content-front')) return true; // garante que usa ao mínimo 280px de margem para fazer o lazyload var margin = clientHeight + Math.max(280, clientHeight * 0.2); // se a base do componente está acima da altura da tela do usuário, está oculto if(rect.bottom < 0 && rect.bottom > margin * -1) { return false; } // se o topo do elemento está abaixo da altura da tela do usuário, está oculto if(rect.top > margin) { return false; } // se a posição do topo é negativa, verifica se a altura dele ainda // compensa o que já foi scrollado if(rect.top < 0 && rect.height + rect.top < 0) { return false; } return true; }; var asynxNextFreeTime = () => { return new Promise((resolve) => { if(window.requestIdleCallback) { window.requestIdleCallback(resolve, { timeout: 5000, }); } else { window.requestAnimationFrame(resolve); } }); }; var asyncValidateIfElIsInViewPort = function(promise, el) { return promise.then(() => { if(el) { if(isElementInViewport(el) == true) { const cb = elementsToWatch.get(el); // remove da lista para não ser disparado novamente elementsToWatch.delete(el); cb(); } } }).then(asynxNextFreeTime); }; // inicia o fluxo de procura de elementos procurados var look = function() { if(window.requestIdleCallback) { window.requestIdleCallback(findByVisibleElements, { timeout: 5000, }); } else { window.requestAnimationFrame(findByVisibleElements); } }; var findByVisibleElements = function(ts) { var elapsedSinceLast = ts - lastAnimationTS; // se não teve nenhum evento que possa alterar a página if(hadAnEvent == false) { return look(); } if(elementsToWatch.size == 0) { return look(); } if(runningSearch == true) { return look(); } // procura por elementos visíveis apenas 5x/seg if(elapsedSinceLast < 1000/5) { return look(); } // atualiza o último ts lastAnimationTS = ts; // reseta status de scroll para não entrar novamente aqui hadAnEvent = false; // indica que está rodando a procura por elementos no viewport runningSearch = true; const done = Array.from(elementsToWatch.keys()).reduce(asyncValidateIfElIsInViewPort, Promise.resolve()); // obtém todos os elementos que podem ter view contabilizados //elementsToWatch.forEach(function(cb, el) { // if(isElementInViewport(el) == true) { // // remove da lista para não ser disparado novamente // elementsToWatch.delete(el); // cb(el); // } //}); done.then(function() { runningSearch = false; }); // reinicia o fluxo de procura look(); }; /** * Quando o elemento `el` entrar no viewport (-20%), cb será disparado. */ window.lazyload = function(el, cb) { if(el.nodeType != Node.ELEMENT_NODE) { throw new Error("element parameter should be a Element Node"); } if(typeof cb !== 'function') { throw new Error("callback parameter should be a Function"); } elementsToWatch.set(el, cb); } var setEvent = function() { hadAnEvent = true; }; window.addEventListener('scroll', setEvent, { capture: true, ive: true }); window.addEventListener('click', setEvent, { ive: true }); window.addEventListener('resize', setEvent, { ive: true }); window.addEventListener('load', setEvent, { once: true, ive: true }); window.addEventListener('DOMContentLoaded', setEvent, { once: true, ive: true }); window.gevent.on('allJSLoadedAndCreated', setEvent, window.gevent.RUN_ONCE); // inicia a validação look(); })();
  • AssineUOL
Topo

Podcast

UOL São Paulo

O podcast para o torcedor tricolor


OPINIÃO

UOL São Paulo #30: Chegou a hora da 'peneira' no elenco do Tricolor

Do UOL, em São Paulo

21/09/2021 16h00

Apenas com o Brasileirão no radar, o São Paulo já começa a olhar para a próxima temporada. Além de mirar a recuperação no campeonato, o Tricolor também deve olhar para seu elenco pensando em mudanças. A primeira parte desta análise deve envolver os jogadores estrangeiros, já que hoje nem todos podem ser relacionados para uma partida.

No podcast UOL São Paulo #30 (ouça na íntegra no episódio acima), o apresentador Vanderlei Lima, o colunista Arnaldo Ribeiro e o setorista Eder Traskini discutiram a necessidade de o Tricolor reformular seu elenco e analisaram quem está mais ameaçado e pode deixar o Morumbi na próxima temporada.

"O São Paulo vai ter que começar a cortar jogador do banco. Contra o América-MG, vai sobrar gringo fora. O Benítez volta, mas talvez não caiba nem no banco pelo limite de estrangeiros. Tem uma situação agora de 'excesso' de bons jogadores que tende a fazer com que o São Paulo reaja em termos de tabela", disse Ribeiro.

Pela regra, cada clube pode relacionar no máximo cinco jogadores estrangeiros por partida no Brasileirão. Traskini citou como esta concorrência por uma vaga se acirrou nos últimos tempos no Tricolor. "O Arboleda é titular absoluto. O Rigoni também é titular e não vai sair. O Calleri acabou de chegar. São duas vagas para uma disputa entre Joao Rojas, Benítez, que está em baixa, Galeano e Orejuela e Gabriel Neves, que é uma contratação nova. Vai ficar fora gente que poderia ajudar", comentou o repórter.

Com a saída de Daniel Alves e com Igor Vinícius longe de ser uma unanimidade, Galeano ganhou chances para atuar improvisado na lateral-direita. O paraguaio foi bem na vitória por 2 a 1 sobre o Atlético-GO, no último domingo e, para Arnaldo, ele ganhou pontos nessa disputa. Pior para Benítez, que convive com problemas físicos e não consegue participar de uma grande sequência de partidas.

"Se você reparar na última partida, pelo que o Galeano fez, não pode sair da próxima relação. Acho que a situação do Benítez fica bem complicada, levando-se em consideração que ele tem o contrato se encerrando no final do ano. Ele vai ter que fazer coisa que não fez até agora para permanecer e estar entre os relacionados", observou o colunista.

Para Traskini, o planejamento do Tricolor para a próxima temporada já começa nessa observação sobre quais estrangeiros realmente serão utilizados. "O Crespo já usou 13 jogadores de meio-campo durante a temporada. É muita opção. Acho que essa peneira começa agora com os estrangeiros. Eles vão ser os primeiros afetados. Não é novidade no Brasil isso o que o São Paulo fez, de ter mais estrangeiros do que o limite. Mas isso afeta pelo menos um deles, que fica fora todo jogo", avaliou.

E esse 'pente fino' não se restringe apenas aos jogadores de outros países, como ressaltou Ribeiro. "Ali na frente, mais entre os brasileiros, para Eder, Pablo e Vitor Bueno jogarem agora, será complicado. O Marquinhos volta daqui a pouco e na frente desses três. Com um centroavante como o Calleri, Luciano voltando à forma e Rigoni, fica mais difícil desses caras se arranjarem. O Vitor Bueno, por ser mais versátil, pode até ter uma vantagem", completou o colunista.

Ouça o podcast UOL São Paulo e confira também a discussão sobre como a preparação física se tornou um problema crônico no Tricolor.

Os podcasts do UOL estão disponíveis em uol.com.br/podcasts e em todas as plataformas de distribuição de áudio. Você pode ouvir UOL São Paulo, por exemplo, no Spotify, Apple Podcasts, Amazon Music e YouTube.