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

Rodrigo Mattos

OPINIÃO

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

Mattos: Recuo excessivo mina chances do Palmeiras em partida digna

12/02/2022 18h15

Receba os novos posts desta coluna no seu e-mail

Email inválido

Há inegáveis méritos do Palmeiras neste Mundial: jogo defensivamente bem encaixado, evolução do ponto de vista ofensivo, fisicamente e tecnicamente. E fez uma partida digna, acertada e justa, diante de um Chelsea de elenco claramente superior. Dito isso, houve um recuo excessivo durante a partida que, sim, parece ter sido equivocado.

Primeiro, é preciso de dizer que Abel Ferreira acertou na estratégia inicial. Seu time está acostumado a defender-se diante de rivais mais fortes. E não era apenas uma retranca: o Palmeiras marcava pressão em certos momentos, atacava com velocidade e eficácia. Dudu criou duas chances claras de gol.

Dito isso, a bola era do Chelsea, mas não conseguia agredir a defesa aramada de Abel Ferreira. Eram até seis jogadores na última linha de defesa, com Rony de auxiliar de lateral. Foi um acréscimo em relação aos sistemas defensivos armados contra Flamengo e Atlético-MG.

Foi um primeiro tempo intenso, bom de assistir. E sem gols.

A volta do intervalo já viu um Palmeiras ainda mais recuado, e menos disposto a incomodar o Chelsea. Uma falha na marcação da lateral-direita alviverde permitiu a Hudson-Odoi ter espaço para cruzar para Lukaku. O centroavante belga - "desprovido de técnica" segundo o comentarista Edmundo - venceu o duelo sobre Luan e meteu para dentro.

O Palmeiras parecia perdido neste momento do jogo e foi salvo por uma mão de Thiago Silva, que decidiu esticar o braço na área de forma bizarra. Pênalti muito bem cobrado por Raphael Veiga, um jogador que pode se orgulhar, muito, do seu Mundial.

A partir daí, o jogo foi do Palmeiras por algum tempo, como Chelsea meio atordoado. Faltou, neste momento, uma atitude mais proativa palmeirense de encurralar o time inglês. Sim, é possível pressionar um rival superior em determinados momentos do jogo. O time alviverde até criou chances, mas sempre cauteloso.

A partida foi se arrastando para a prorrogação com os times cansando. Até Kanté, o multi-homem, parecia em um ritmo menos intenso do que habitual. Os dois técnicos foram obrigados a mudar: Tuchel abriu mão do fortíssimo Lukako por Timo Werner. Abel tirou Raphael Veiga e tornou o time ainda mais defensivo, com Dudu e Wesley apenas na frente. Nada de gol.

Na prorrogação, Tuchel usou armar que Abel não tinha: Zyiech e Pulisic eram dois deles. Do seu lado, o técnico palmeirense teve de apelar a Rafael Navarro no lugar de Dudu. Não dá para confiar um ataque inteiro nos pés de Navarro em uma final de Mundial, ainda que seja um jogador promissor.

Foram 30min de pressão do Chelsea. Não houve um brilhantismo por parte do time do Tuchel. Mas havia qualidade e insistência. A bola girava de um lado para outro e o Palmeiras só se defendia.

Ao final das contas, um chute acabou no braço de Luan, que estava aberto em direção ao gol. Um pênalti claro que resultou na cobrança de Harvetz certeira para decidir o título. Acabava o sonho ali.