;(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; // 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(); })();

Topo

Chester recheado com farofa de bacon é a cara do Natal; aprenda a fazer

De Nossa

23/12/2021 04h00

O chester é maior que um frango comum. Além asas e peito rechonchudos, ele tem espaço suficiente no interior para receber um recheio caprichado, digno de ceia de Natal.

Em clima de festas de fim de ano, este episódio de 2em1 traz o preparo do chester recheado com farofa de banana, bacon e pimenta biquinho e apresenta duas sugestões de molho para acompanhar.

Chester recheado

Dificuldade Fácil
10 porções
180 min
Ver receita completa

De olho no chester

Muita gente adora as aves típicas de Natal, mas acha difícil de fazer. A boa notícia é que a própria embalagem dá recomendações de preparo de acordo com o produto escolhido.

O Chester Azeite e Ervas Perdigão, por exemplo, come uma etapa do processo caseiro porque já vem marinado — é praticidade que você quer, @?

Depois de tostar a farinha de mandioca na frigideira com todos os ingredientes, basta tirar o saquinho de miúdos de dentro da ave e acomodar a farofa na cavidade.

Chester temperado da Perdigão não precisa de marinada - Salted Caramel - Salted Caramel
Chester temperado da Perdigão não precisa de marinada
Imagem: Salted Caramel

As perninhas do chester costumam ser amarradas com um fio ou espetadas com um palito para não abrirem no calor.

A etapa do forno é dividida em três partes. São 20 minutos a 250 graus, 60 minutos a 200 graus tampado com papel alumínio e mais 1 hora a 200 graus descoberto e com pinceladas de manteiga a cada 20 minutos.

Quase pronto

Chester no forno: líquido da assadeira rende dois molhos - Salted Caramel - Salted Caramel
Chester no forno: líquido da assadeira rende dois molhos
Imagem: Salted Caramel

Resista à tentação de comer o chester e deixe a ave descansando por pelo menos 20 minutos. Enquanto isso, é hora de escolher qual molho fazer para acompanhar.

As duas receitas do vídeo usam o saboroso líquido que ficou na assadeira após a cocção.

O chamado cítrico se vale de raspas e suco de limão, taiti ou siciliano, para garantir um sabor a mais. A segunda opção, mais aveludada, leva cebola, vinho branco, manteiga e farinha.

Clique nas imagens abaixo e confira cada o a o:

Molho cítrico para aves

Dificuldade Fácil
10 porções
10 min
Ver receita completa

Molho aveludado para aves

Dificuldade Fácil
10 porções
10 min
Ver receita completa

Vamos cozinhar!

Quer mais dicas e receitas ótimas para o seu cardápio? Do básico da culinária para cozinheiros de primeira viagem aos truques do churrasco e petiscos de clássicos botecos cariocas. Confira todos os programas de Nossa em nosso canal no YouTube