;(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
Logo Pagbenk Seu dinheiro rende mais
Topo

Amazon confirma planos para nova rede de supermercados

Getty Images
Imagem: Getty Images

Matt Day e Spencer Soper

12/11/2019 08h21

A Amazon.com planeja abrir uma rede de supermercados distinta do Whole Foods Market, adquirido pela empresa há dois anos, um sinal da fome da gigante de varejo por uma maior fatia do mercado de alimentos que não se limita aos produtos orgânicos de alta qualidade.

A empresa anunciou quatro vagas de emprego para o "primeiro supermercado da Amazon" no bairro de Woodland Hills, em Los Angeles. Uma porta-voz da Amazon confirmou as vagas e disse que a loja seria aberta em 2020. A marca será diferente do Whole Foods e terá uma linha de pagamento convencional, ao contrário das lojas de conveniência Amazon Go, que não possuem caixas, disse. Os planos da Amazon para a loja foram divulgados anteriormente pela CNET.

A empresa de comércio eletrônico comprou o Whole Foods por US$ 13,7 bilhões há dois anos, mas ainda não avançou muito no setor de alimentos dos EUA, que movimenta US$ 900 bilhões. A marca Whole Foods, minuciosa sobre o que é permitido nas prateleiras com base em sua imagem saudável, entra em conflito com o desejo da Amazon de oferecer aos clientes o que eles querem. O Walmart, que captura cerca de 25% de todos os gastos de supermercado nos EUA, vende itens como Pepsi e Cheetos, marcas que consumidores não conseguem encontrar no Whole Foods. Analistas do setor de supermercados especulavam que a Amazon poderia abrir uma rede onde esses produtos não seriam vistos como traição à marca.

Quem compra produtos alimentícios online prefere opções para retirar nas lojas em vez da entrega em domicílio em uma margem de quase 2 para 1, e a Amazon precisa de mais lojas para atender a essa demanda crescente, disse David Bishop, sócio da empresa de pesquisa Brick Meets Click. A retirada nas lojas exige mais unidades próximas aos clientes - a cerca de 8 km de distância das residências - do que os serviços de entrega de compras, disse.

"A razão pela qual a Amazon precisa expandir sua presença física é uma demanda acelerada por serviços de retirada de mercadorias em vez de entrega", disse. "Os consumidores têm um senso maior de controle quando retiram suas compras na loja em um local seguro, em vez de se preocupar com o fato de serem entregues em casa."

As vendas da Amazon em lojas físicas, a grande maioria das quais são compras no Whole Foods, caíram 1,3% em relação ao ano anterior, para US$ 4,19 bilhões no terceiro trimestre. A Amazon disse que o total não inclui vendas online do Whole Foods, mas a empresa de Seattle não divulga esse número.

Woodland Hills é um bairro residencial de luxo no Vale de San Fernando. O Wall Street Journal informou no início do ano que a Amazon planejava abrir dezenas de supermercados sob uma nova marca, com a primeira loja sendo inaugurada em Los Angeles.

Veja mais economia de um jeito fácil de entender: @uoleconomia no Instagram.
Ouça os podcasts Mídia e Marketing, sobre propaganda e criação, e UOL Líderes, com CEOs de empresas.
Mais podcasts do UOL em uol.com.br/podcasts, no Spotify, Apple Podcasts, Google Podcasts e outras plataformas.

Entenda como funciona o câmbio do dólar

UOL Notícias