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

Bactérias "gritam" ao morrer e avisam "colegas" pra resistir a antibióticos

Bactérias contam com mecanismos para avisar grupo sobre ameaça mortal - iStock
Bactérias contam com mecanismos para avisar grupo sobre ameaça mortal Imagem: iStock

Nicole D'Almeida

Colaboração para Tilt

25/08/2020 15h32

Cientistas descobriram que as bactérias que vivem em comunidade "gritam" ao morrer, avisando as bactérias vizinhas do perigo. Esses "gritos" não são audíveis, mas sim alarmes químicos emitidos pelas bactérias moribundas. Essa ação é conhecida como "necrosignaling", neologismo em inglês que pode ser traduzido como necrosinalização.

Neste novo estudo publicado pela revista Nature e realizado pelos pesquisadores da Universidade do Texas, em Austin, foram observadas colônias de bactérias enquanto interagiam com antibióticos. O objetivo era descobrir como as células mortas podem ajudar a salvar o resto do grupo.

Em estudos anteriores, os pesquisadores notaram que as populações em colônia mostravam resistência aos antibióticos, apesar de cerca de 25% da colônia sofrer morte celular. De acordo com eles, as bactérias mortas pareciam proteger as sobreviventes de alguma forma, mas ainda não se sabia como.

O novo estudo explicou, então, como funcionaria a necrosinalização. Uma bactéria da colônia avisa aos seus companheiros que há uma ameaça mortal, como um antibiótico. Estes, por sua vez, começam a se adaptar rapidamente à ameaça, aumentando, assim, suas chances de sobrevivência.

Os cientistas notaram que as células vivas foram vistas migrando para longe da fonte de antibiótico, ou seja, da célula atingida, levando a uma sugestão de que a morte celular que emana em torno desta fonte libera um "sinal" de perigo que contribui para a resistência das demais.

Entretanto, as bactérias moribundas não enviaram apenas um alerta, mas também ativaram uma bomba de efluxo (a saída de uma substância para fora da célula) na membrana externa das células vivas para que começassem a liberar o antibiótico para fora delas.

Essa ação fez mais do que proteger os sobreviventes. Ela promoveu uma resistência futura aos compostos que mataram as bactérias vizinhas. Essas descobertas são um grande o para criação de uma estratégia melhor para derrotar as infecções bacterianas.