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

Agora é o pior momento para comprar um iPhone; entenda por quê

Possível design do novo iPhone 14 - Ian Zelbo
Possível design do novo iPhone 14 Imagem: Ian Zelbo

Nicole D'Almeida

Colaboração para Tilt

16/08/2022 14h05

Está pensando em comprar um novo iPhone? Saiba que agora pode ser o pior momento para isso. Há um bom motivo para aguardar mais algumas semanas: o lançamento da próxima linha de celulares da Apple: a do iPhone 14.

Normalmente, os novos aparelhos da empresa são revelados ao público na primeira quinzena de setembro, e as vendas são iniciadas alguns dias depois. Por enquanto, não há qualquer indício de que a companhia possa adiar o evento para outubro.

O iPhone 13, por exemplo, foi lançado em 14 de setembro do ano ado e disponibilizado dez dias depois. Um cronograma parecido também ocorreu com os modelos anteriores, com exceção do iPhone 12 e do iPhone X.

iPhones mais antigos valem a pena?

Mesmo que você não esteja interessado em comprar o iPhone 14, a mera chegada do produto irá desvalorizar todos os modelos anteriores. Portanto, se você comprar um deles agora, ele perderá valor em poucas semanas. Por outro lado, se comprar só em meados de setembro, provavelmente já vai encontrá-lo com uma boa redução no preço.

Com a chega da linha 13 no ano ado, o iPhone 12 de 64 GB, por exemplo, teve seu preço reduzido de R$ 7.999 para R$ 6.499, por exemplo.

Vale lembrar que as melhores ofertas costumam ser encontradas em varejistas e não no site oficial da Apple.

Tem 5G?

Hoje, é importante considerar a compatibilidade com a rede 5G, que está sendo implantada no Brasil e já chegou a 8 cidades. Ainda não é uma necessidade essencial, mas faz sentido garantir a nova tecnologia em um celular deste valor, que, em geral, mantemos por alguns anos.

Além da linha 14, os iPhones compatíveis são:

  • iPhone SE (2022)
  • iPhone 12 mini
  • iPhone 12
  • iPhone 12 Pro
  • iPhone 12 Pro Max
  • iPhone 13 mini
  • iPhone 13
  • iPhone 13 Pro

Outro ponto de atenção é a obsolescência programada do sistema operacional (iOS). A cada ano, a Apple tira da sua lista de atualização alguns modelos antigos. Durante a durante a WWDC, conferência global para desenvolvedores da empresa, foi anunciado que os iPhones 6s e 7 não receberão o iOS 16.

O que esperar do iPhone 14

Não deve haver grandes mudanças do iPhone 13 para o 14. A Apple guarda segredo até o último momento, mas alguns rumores indicam quais devem ser as novidades:

  • Câmera traseira poderosa: os modelos Pro e Pro Max podem ter uma câmera principal de 48 MP (desde 2015 é de 12 MP), para possibilitar gravação de vídeos em 8K.
  • Câmera frontal sem distorção: deve ganhar uma lente com foco automático, para maior nitidez, e abertura f/1.9, para desfoque de fundo mais natural. Também é esperado desempenho superior em cenas noturnas ou de baixa luz, bem como o uso da tecnologia Sensor-Shift, para estabilizar a imagem.
  • Chip A16 Bionic: acredita-se que o novo processador deva ser exclusivo dos iPhones 14 Pro e 14 Pro Max; os dois modelos mais baratos da linha continuarão com o A15 Bionic.