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

Felipe Zmoginski

Enquanto Huawei é alvo dos EUA, celulares da Xiaomi comem pelas beiradas

Loja da Xiaomi, marca que se destaca pela sua ascensão na China - Divulgação
Loja da Xiaomi, marca que se destaca pela sua ascensão na China Imagem: Divulgação

01/12/2020 04h00

Receba os novos posts desta coluna no seu e-mail

Email inválido

A fabricante de eletrônicos Xiaomi é um exemplo icônico da ascensão tech de seu país. Conhecida nos anos 1990 e 2000 por suas cópias baratas e baixa qualidade, a indústria de smartphones da China começou a virar o jogo com o surgimento da Xiaomi. Uma das primeiras marcas locais de gadgets a obter reconhecimento internacional por sua qualidade, a Xiaomi formou uma legião de fãs pelo mundo com a mais simples fórmula de marketing: seus produtos são bons e baratos.

Com preços que representam uma fração do cobrado por smartphones equivalentes das grifes Apple e Sansumg, a desenvolvedora de sucessos como Redmi Note e Mi Note 10 galgou ano a ano posições mais altas no ranking de maior vendedora de celulares do mundo. Em 2020, superou a Apple, consolidando-se como a 3ª maior vendedora de smartphones do mundo, atrás apenas da Huawei e da líder global Samsung.

Relatório apresentado pela companhia ao mercado na semana ada revelou que a Xiaomi faturou U$$ 11 bilhões no 3º trimestre de 2020, ao embarcar 47,1 milhões de smartphones, um "modesto" crescimento de 45% sobre igual período do ano anterior.

Nos mesmos três meses, a Huawei, penalizada por uma ativa campanha de boicote liderada pelo governo dos Estados Unidos, viu suas vendas caírem 23%, o que (ainda) lhe dá o posto de segunda maior fabricante do mundo, com 51,7 milhões de dispositivos embarcados.

As curvas desenhadas pelas vendas das duas empresas apontam que, salvo surpreendente reação da Huawei, esta será ultraada pelo fenômeno Xiaomi. Enquanto a primeira sofre com duras restrições para ar mercados estrangeiros e obter processadores, segmento da indústria de eletrônicos onde a China não possui posição predominante no mundo, a Xiaomi nada de braçada, ao ponto de a maior parte das vendas da companhia ocorrerem no chamado mercado "overseas". Atualmente, 52% das vendas da empresa acontecem fora da China.

Se até o momento, a guerra tec fez da Huawei sua maior vítima, a Apple pode sofrer perdas também. Afinal, o maior mercado estrangeiro para os iPhones é justamente a China, e as restrições a apps chineses, como TikTok e eventualmente WeChat, podem fazer declinar as vendas da maçã no multibilionário mercado asiático.

Se isto ocorrer, a Xiaomi, que joga parada, deve herdar mais um bocado de consumidores.

Não se deve descartar a hipótese de, em algum momento, a própria Xiaomi ser vítima de seu sucesso, entrando na mira de restrições feitas pelos Estados Unidos, embora tal cenário seja cada vez mais improvável, já que o novo governo americano parece mais disposto a ir à mesa de negociação com seus pares chineses e fazerem menos espalhafato que o atual ocupante da Casa Branca.