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

Copa do Nordeste - 2020

Copa do Nordeste: Fortaleza bate recorde no YouTube e vence clássico do Rio

Felipe Alves, goleiro do Fortaleza, comemora com Rogério Ceni durante partida contra o Sport pela Copa do Nordeste - Walmir Cirne/AGIF
Felipe Alves, goleiro do Fortaleza, comemora com Rogério Ceni durante partida contra o Sport pela Copa do Nordeste Imagem: Walmir Cirne/AGIF

Gabriel Vaquer

Colaboração para o UOL, em Aracaju

25/07/2020 20h58

A classificação do Fortaleza contra o Sport nos pênaltis por 4 a 1, após 0 a 0 no tempo normal nas quartas de final da Copa do Nordeste, hoje (25), atingiu um novo recorde de audiência para a competição em suas transmissões no YouTube. O fato foi comemorado porque, no mesmo horário, Fluminense e Botafogo disputavam um amistoso e também eram mostrados na plataforma de vídeos.

Segundo monitoramento do UOL Esporte, o auge da partida vencida pelo time comandado por Rogério Ceni foi no pênalti decisivo do Leão do Pici, quando a transmissão feita no canal oficial da Copa do Nordeste atingiu pico de 287 mil espectadores simultâneos.

O antigo recorde havia sido alcançado também por um jogo envolvendo o Fortaleza, na última terça (21), em partida contra o América (RN), que tinha conseguido pico de 238 mil espectadores. Durante todo a partida, Fortaleza x Sport variou entre 180 mil e 220 mil telespectadores simultâneos na sua transmissão.

No mesmo horário, o jogo entre Fluminense x Botafogo, pela Taça Gérson e Didi, que estava sendo exibido pela Flu TV, chegou ao máximo a pico de 58 mil espectadores. Após o fim de Fortaleza x Sport, o clássico carioca subiu e atingiu pico de 81 mil, ainda assim um número considerado baixo para os padrões de um clássico do Rio de Janeiro.

Vale lembrar que as duas partidas não foram exclusivas da internet, o que limita notoriamente o alcance. Fluminense x Botafogo estava com transmissão para todo o Brasil pelo SporTV. Já Fortaleza x Sport teve exibição do SBT em TV aberta para o Ceará, Pernambuco e outros Estados nordestinos, como Alagoas.

Como bônus, Fortaleza x Sport conseguiu também liderar na TV. Segundo apuração do UOL Esporte, segundo dados prévios do Ibope, o jogo liderou na Grande Fortaleza e na Região Metropolitana do Recife. Na capital cearense, o jogo chegou próximo dos 20 pontos de Ibope. No Recife, a partida atingiu 16 pontos em dado momento, contra 13 da Globo.