;(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

André Rocha

OPINIÃO

Texto em que o autor apresenta e defende suas ideias e opiniões, a partir da interpretação de fatos e dados.

Ajustar o Palmeiras sem Danilo e Scarpa é mais complexo do que se imagina

Jailson volta a atuar pelo Palmeiras após meses longe dos gramados  - Marcello Zambrana/AGIF
Jailson volta a atuar pelo Palmeiras após meses longe dos gramados Imagem: Marcello Zambrana/AGIF

Colunista do UOL Esporte

17/01/2023 08h34

O empate sem gols em casa no sábado com o São Bento, recém-promovido à primeira divisão paulista, não deixou de ser um tanto decepcionante para o campeão estadual e Brasileiro.

Nem tanto pelo resultado, até aceitável em um início de temporada. Placar que poderia ter sido favorável, pelas chances criadas e gols de Jailson e Dudu invalidados com auxílio do VAR por impedimentos. O desempenho, porém, foi insatisfatório para a expectativa por conta do nível de jogo apresentado pela equipe de Abel Ferreira.

A base foi mantida, Raphael Veiga retornou da lesão no tornozelo e o "jogo de memória" deveria ser suficiente para superar um time pequeno no Allianz Parque. Não foi.

Porque os ajustes sem Danilo e Gustavo Scarpa no meio-campo não são simples e o encaixe do ataque dentro da dinâmica ofensiva alviverde também tem suas complexidades.

Com a dupla que foi para o Nottingham Forest, o trabalho do meio-campo era completo, com e sem bola. Danilo e Scarpa colaboravam na saída com es longos, invertendo para Dudu ou Piquerez, ponta e lateral que costumam alargar o campo dentro dos conceitos de ataque posicional de Abel.

Danilo ainda tinha velocidade para compensar Zé Rafael nas transições defensivas. Jaílson, de volta após longo processo de recuperação, contribui com força e estatura, mas não na velocidade de correr para trás. A zaga fica mais exposta.

Scarpa podia jogar nas três funções atrás do centroavante. Era um ponta articulador pela direita, um ala do lado oposto para os cruzamentos ou um meia central saindo para os dois flancos e apoiando os pontas, além da proximidade da área adversária para finalizar.

Veiga é um bom meia, mas não possui todas essas valências. Já mostrou na própria estreia que pode colaborar nas bolas paradas ofensivas, porém é mais lento nos deslocamentos que Scarpa.

O acerto na movimentação de Rony e Endrick na frente também precisa de uma melhor leitura dos atacantes. Rony vinha jogando no centro do ataque, saindo para os lados e abrindo espaços, inclusive para ele mesmo infiltrar em diagonal. Agora com a natural volúpia da joia palmeirense, correndo para todo lado, Rony fica apenas com a diagonal para infiltrar, já que o corredor esquerdo é de Piquerez.

É possível imaginar Bruno Tabata tendo mais oportunidades, já que mostrou no ano ado que seu encaixe no quarteto ofensivo, por características, é menos complicado. Mas é claro que Rony tem enormes créditos e a paciência com Endrick é mais que justificável.

Mas no meio será preciso ir ao mercado e com atenção às características dos atletas. Mesmo assim, repor uma joia do clube que deve evoluir muito na Premier League e um meia que nunca jogou tanto como nas mãos de Abel é desafio para a manutenção do nível técnico.

Não basta trocar peças, é bem mais complexo do que se imagina e essa transição terá que contar com a paciência da torcida.