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

Como funciona o ranking que colocou Palmeiras como 2º melhor time do mundo

Jogadores do Palmeiras comemoram gol marcado contra o Corinthians em clássico do Brasileirão - Marcello Zambrana/AGIF
Jogadores do Palmeiras comemoram gol marcado contra o Corinthians em clássico do Brasileirão Imagem: Marcello Zambrana/AGIF

Colaboração para o UOL, em São Paulo

20/01/2021 16h33

A IFFHS (Federação Internacional de História e Estatística do Futebol) divulgou hoje o ranking anual dos melhores clubes do mundo levando em conta a temporada 2020. O Palmeiras ficou na segunda posição, à frente do PSG e atrás somente do Bayern de Munique. O Flamengo, que havia sido quarto colocado no ano ado, desta vez aparece em 18º.

Mas, afinal, como são calculadas as posições de cada time?

Para ordenar os melhores times de futebol do mundo em 2020, a IFFHS levou em conta um sistema de pontuação baseado no número de vitórias, empates e derrotas de cada clube na temporada. Cada campeonato tem um peso diferente: a Liga dos Campeões e a Libertadores, por exemplo, dão 14 pontos em caso de vitória e sete em caso de empate.

Os campeonatos nacionais são divididos em níveis, de 1 (mais fraco) até 4 (mais forte), baseado em outro ranking anual também construído pela IFFHS que mede a força dos torneios de cada país. O Brasileirão é considerado nível 4, assim como os principais campeonatos da Europa, como o Inglês, Espanhol, Italiano e Francês. O Argentino e o Colombiano, por exemplo, também são do nível 4; o Alemão, por sua vez, é nível 3.

Nos campeonatos nível 4, cada vitória vale quatro pontos, e cada empate, dois. Também são contabilizadas as vitórias nas copas nacionais (no caso do Palmeiras, a Copa do Brasil), com um sistema de pontos mais baixo.

É importante notar que o ranking da IFFHS não dá um bônus de pontuação para times que são campeões ou que chegam até determinada fase de uma competição. Apenas os pontos ganhos por cada vitória ou empate, de acordo com o peso de cada torneio, são contabilizados na lista.

Veja o top 10 dos melhores times do mundo em 2020:

  1. Bayern de Munique
  2. Palmeiras
  3. PSG
  4. Inter de Milão
  5. Manchester City
  6. Milan
  7. Juventus
  8. Sevilla
  9. Manchester United
  10. Arsenal

Veja os brasileiros no ranking:

2º - Palmeiras
16º - Grêmio
18º - Flamengo
20º - Internacional
32º - Santos
44º - São Paulo
93º - Athletico-PR
113º - Bahia
138º - Vasco
147º - Atlético-MG
190º - Corinthians
198º - Fluminense
230º - Ceará
264º - Fortaleza
332º - Atlético-GO
372º - Red Bull Bragantino.