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

Ricardo Feltrin

Análise: Nº de TVs ligadas cai e indica que há mais pessoas nas ruas

1º.jun.2020 - Pessoas no Vale Sul Shopping, em São José do Campos, interior de São Paulo - Lucas Lacaz Ruiz/Estadão Conteúdo
1º.jun.2020 - Pessoas no Vale Sul Shopping, em São José do Campos, interior de São Paulo Imagem: Lucas Lacaz Ruiz/Estadão Conteúdo

Colunista do UOL

10/06/2020 00h36

Nem só pelos sites de acompanhamento de isolamento social é possível notar que os brasileiros descumprem cada vez mais a recomendação de se afastar do convívio social fora de casa durante a pandemia de coronavírus.

Em vários sites e monitores é possível acompanhar que a população brasileira (e empresas), em todos os Estados, têm "fugido" a cada dia mais da quarentena.

Pois é possível observar isso também pelo comportamento e a audiência do telespectador da TV brasileira, seja ela aberta ou por .

É o que indicam dados comparativos mensais, obtidos por esta: o chamado total de TVs ligadas (TTs) e a audiência da TV paga e aberta no Brasil em maio caíram acentuadamente em relação ao mês anterior.

O que isso significa? Entre outras coisas que uma imensa parcela da população que estava dentro de casa parou de ver TV.

Isso indica uma mudança de comportamento, como analisamos a seguir (lembrem-se, é uma análise baseada em dados indicativos, não factuais).

Os dados de audiência abaixo valem para a faixa das 7h à 0h, que é o chamado "horário comercial" da TV (e, podemos dizer, da vida social da população em geral).

Nessa faixa horária, o total de TVs ligadas em maio caiu 6%.

O ibope das emissoras abertas —também nesse horário— caiu entre 5% e 16%.

A RedeTV (0,6 ponto) foi a que mais perdeu ibope em maio, na comparação com abril: -16%.

Em seguida veio a Globo (15,2 pontos) com uma perda de 12% em pontos de ibope.

A Record (5,8 pontos) perdeu 6%.

O SBT (5,1) e a Band (1,6) registraram menos 5% de ibope cada uma no mês ado.

Cada ponto nessa medição equivale a cerca de 250 mil domicílios.

Foram analisados dados nas 15 maiores regiões metropolitanas do país. Quem faz essa medição é a Kantar Ibope Media, mas os dados foram obtidos pela coluna por outras fontes.

Da TV para a rua?

Sim, além de possivelmente sair de casa, uma outra evidência é que uma parte do (ex) público da TV aberta e paga ou a consumir mais conteúdo por streaming —como esta coluna informou ontem com exclusividade.

O consumo de streaming cresceu 7% no mês ado, em relação a abril, e superou o ibope dos canais pagos.

Mas, isso, definitivamente, não parece "compensar" o volume da fuga de telespectadores da frente dos aparelhos de TV.

Conclusão do mais provável: as pessoas estão saindo de casa.

Perda de ibope em todas as TVs e horários

Maio representa o 2º mês da quarentena e a queda de aparelhos ligados e de ibope ocorreram em todas as TVs abertas e na TV paga.

No caso da TV aberta, a queda de audiência pode ser notada em cada faixa horária usando a Globo (líder) como exemplo:

Nas manhãs, a emissora perdeu 13% de ibope.

Entre meio-dia e 18h essa queda chegou a 15% (a RedeTV por sua vez caiu 12%).

De 18h à 0h a queda da Globo foi menor, porém ainda ocorreu: -9%. Todas as emissoras abertas e a TV paga como um todo apresentaram queda de público.

Apenas para comparação, assim como os indícios contidos nos dados de ibope acima, todos monitores de isolamento social também já vêm mostrando que os brasileiros estão desobedecendo cada vez mais às recomendações e voltando às ruas.

Até ontem o Brasil já tinha mais de 37 mil mortos pelo coronavírus, e mais de 700 mil casos confirmados.

Ricardo Feltrin no Twitter, Facebook, Instagram e site Ooops