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

Novo Mac da Apple pode reacender guerra dos processadores, dizem analistas

Logo da Apple
Imagem: Logo da Apple

Stephen Nellis

Da Reuters, em San Francisco

09/11/2020 11h39

A Apple deve lançar na terça-feira novos computadores Mac usando seus próprios processadores, um movimento que pode reacender a corrida para controlar o mercado de chips de computadores e beneficiar empresas como a Qualcomm.

O mercado tem sido dominado pela Intel e pela AMD desde 2006, quando a Apple se juntou à maioria das outras grandes fabricantes de computadores no uso de chips baseados na arquitetura de computação 'x86' da Intel.

Na terça-feira, a Apple deve iniciar um processo de dois anos para encerrar seu relacionamento de quase 15 anos com a Intel, introduzindo computadores Mac com chips projetados pela própria empresa e baseados na tecnologia de arquitetura de computação da Arm, que a Nvidia concordou em comprar do SoftBank em um negócio de 40 bilhões de dólares.

A Apple desenvolverá os chips usando a tecnologia Arm e os fabricará por um parceiro, provavelmente a Taiwan Semiconductor Manufacturing, que produz processadores para o iPhone.

A entrada da Apple no mercado provavelmente chamará a atenção do consumidor para a emergente mudança tecnológica, especialmente se a Apple começar a desenvolver chips que rivalizam com o desempenho da Intel.

Os PCs baseados tecnologia da Arm têm diferenças importantes em relação às máquinas baseadas em chips da Intel. Como os chips são derivados de smartphones em que o consumo de energia é uma preocupação importante, eles tendem a reivindicar uma vida útil de bateria melhor do que os dispositivos convencionais. Como os smartphones, eles também são ligados rapidamente e podem permanecer constantemente conectados a redes de dados de celular.

Ben Bajarin, principal analista de inteligência de mercado de consumo da Creative Strategies, disse que o teste crucial para computadores baseados na tecnologia da Arm será se os desenvolvedores reescreverão o software usado por grandes empresas, que ainda são os maiores compradores dos dispositivos. A entrada da Apple no mercado não garante que isso aconteça.

"A maior parte da base de desenvolvedores hardcore da Apple usará ferramentas de desenvolvedor próprias da Apple", disse ele. Mas com a Microsoft também fornecendo ferramentas de desenvolvimento para Windows, uma mudança mais ampla "não está fora das possibilidades".