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

Julio Gomes

OPINIÃO

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

Defesa perfeita impulsiona City de Guardiola na Champions League

12/04/2023 04h00

Receba os novos posts desta coluna no seu e-mail

Email inválido

Nos times de Guardiola, costuma ser o jeito de atacar que chama mais a atenção. Times que ficam com a bola o tempo inteiro, que deixam o adversário zonzo e de saco cheio, até, de tanto correr atrás. Na temporada 22/23, o Manchester City é um time diferente. É claro que a presença marcante de Haaland é, de fato, uma grande mudança. Mas não é só isso.

Guardiola entendeu, ao longo dos anos, que o jogo estava se transformando em algo mais e mais físico. Os baixinhos bons de bola foram dando lugar a rapazes altos e fortes. E bons de bola também, por que não. Gente como Haaland. Não foram os atacantes que fizeram a diferença nos 3 a 0 de ontem para cima do Bayern de Munique, praticamente transformando a partida de volta, para definir um semifinalista da Champions League, em puro trâmite.

Foram, sim, os defensores. Ou o jeito de defender. No primeiro tempo, o Bayern chegou a contestar a posse de bola do City, teve um par de contra ataques, teve algumas jogadas de 1 contra 1 pelos lados com Sané e Coman. Nestes momentos, o que se viu foi um City absolutamente perfeito na defesa. Tanto individualmente, com Akanji e Aké ganhando todos os duelos, quando coletivamente. Houve um contra ataque de 3 contra 3 do Bayern que se transformou em 3 contra 7 em um piscar de olhos. Antes que alguém chegasse para ajudar o ataque, o time inteiro do City já havia feito a recomposição. Isso é puro exemplo de comprometimento extremo.

Atenção. O City jogou ontem com uma linha de quatro zagueiros. Lembram-se de tempos em que nem zagueiros havia no Barcelona? Guardiola recuava volantes, como Mascherano, para a última linha. Ontem foram quatro zagueiros, sem laterais, e com Stones, em alguns momentos, se transformando em volante para apoiar o jogo. De Bruyne não foi volante e, sim, um segundo atacante ao lado de Haaland.

Houve um lance emblemático. Após um bom início de segundo tempo do Bayern, Bernardo Silva parou um contra ataque alemão com um carrinho horroroso aos 3min, por trás, travas na panturrilha do adversário. É que os alemães não tem o (péssimo) hábito de ficar lá pressionando a arbitragem, foram apáticos neste sentido. Bernardo deveria ter sido expulso. Não foi. Mas destaco o lance para mostrar como meias e atacantes defenderam como alucinados na partida de ontem.

Nos últimos nove jogos, com nove vitórias consecutivas por todas as competições, são apenas três gols sofridos.

Para ganhar a Champions, Guardiola já sabe que precisa fazer o time jogar o jogo jogado dos tempos atuais. O jogo físico, intenso, que ele conhece muito bem pela Premier League.