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

Indústria de SP fecha 3 mil vagas em outubro e acumula perda de 12,5 mil postos

Divulgação
Imagem: Divulgação

Cícero Cotrim

São Paulo

14/11/2019 14h11

A indústria paulista fechou 3 mil postos de trabalho em outubro, o equivalente a uma variação de -0,25% ante setembro, com ajuste sazonal. Os dados foram divulgados hoje na pesquisa de Nível de Emprego Industrial da Federação das Indústrias do Estado de São Paulo (Fiesp).

No acumulado do ano, o saldo do emprego continua negativo, com fechamento de 12,5 mil vagas na indústria até outubro. Frente ao mesmo período de 2018, a variação no nível de emprego é de 0,60%.

Segundo a Fiesp, o resultado do mês foi pressionado pelo início do período de demissões dos safristas que trabalham no setor sucroalcooleiro e dos trabalhadores do setor do vestuário, seguindo a tendência esperada para este período do ano.

"Apesar do saldo negativo, a baixa para o emprego na indústria paulista é comum para outubro, visto que a média para esse mês é de fechamento de 4 mil vagas", disse, em nota, o 2º vice-presidente da Fiesp, José Ricardo Roriz.

Setores

Metade dos 22 setores acompanhados pela pesquisa tiveram variação negativa no mês, enquanto outros sete contrataram e quatro tiveram variação estável. Os destaques negativos foram nos segmentos de confecção de artigos do vestuário e órios (-1.414), coque, derivados de petróleo e biocombustíveis (-1.236) e veículos automotores, reboques e carrocerias (-697).

Por outro lado, três setores apresentaram criação mais robusta de vagas em outubro: produtos diversos (600); produtos de minerais não metálicos (415) e produtos de borracha e material plástico (332).

Regiões

Entre as 37 regiões acompanhadas pelo levantamento, 22 (59%) apresentaram saldo negativo nos empregos. Outras nove tiveram mais contratações do que demissões e seis ficaram com nível de emprego estável.

Os destaques negativos foram Presidente Prudente (-2,08%), com fechamento de 850 vagas, e Mogi das Cruzes (-2,06%), que encerrou 1.250 vagas no período. Entre as áreas que tiveram saldo positivo no número de empregos, a maior variação foi de Botucatu (1,50%), que criou 550 vagas em outubro, seguida por Sorocaba (0,58%), também com 550 novos postos.