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

Sete restaurantes brasileiros estão entre os 100 melhores da América Latina

Peixe e siri, prato do Origem, de Salvador - Reprodução/Instagram
Peixe e siri, prato do Origem, de Salvador Imagem: Reprodução/Instagram

Colaboração para Nossa

03/11/2022 16h45

Sete restaurantes brasileiros estão entre os 100 melhores da América Latina em lista anunciada nesta quinta (3) na décima edição do Latin America's 50 Best Restaurants. Por enquanto, foram elencados do 51 ao 10º lugar e a lista completa, com os 50 primeiros, será revelada no dia 15 de novembro, em Mérida, Yucatán.

O brasileiro melhor colocado, por enquanto, é o Origem, de Salvador, que ficou em 52º lugar. Em seguida estão Glouton, de Belo Horizonte (64); Kotori (65), Fame Osteria (83), Fasano (94) e Corrutela (95), em São Paulo; e Oro, Rio de Janeiro.

Em postagem no Instagram, o chef do Origem, Fabrício, agradeceu: "Obg a todos que um dia acreditaram junto conosco que sim é possível. Lembro como se fosse hj o dia que escolhemos empreender e tínhamos como missão fortalecer a cultura local através da gastronomia criando um menu que iria além do já esperado".

Agradecimentos também nas redes sociais do mineiro Glouton: "Lista de melhores é um negócio que a gente sabe que nem sempre condiz com a realidade. No entanto, quando aparecemos nelas, dá aquela alegria, aquela sensação de termos feito algo certo, sobretudo se olhamos para o lado e vemos tanta gente bacana junto."

O paulistano Kotori também comemorou a colocação: "Que orgulho fazer parte dessa lista com tantos outros brasileiros incríveis! Parabéns equipe!! Agora bora pro México comemorar e torcer para os brasileiros que estão no top 50!!"

Veja a lista completa a seguir:

100 Animalón, Valle de Guadalupe
99 Quitu, em Quito
98 La Calma by Fredes, Santiago
97 Mikka, Guayaquil
96 Salvo Patria, Bogotá
95 Corrutela, São Paulo
94 Fasano, São Paulo

93 Prudencia, Bogotá
92 Oro, Rio de Janeiro
91 El Xolo - Maíz Criollo, San Salvador
90 Sach'a Huaska, Santa Cruz de la Sierra
89 La Docena, La Roma, Mexico City
88 Sambombi Bistró Local, Medellín
87 Narda Comedor, Buenos Aires
86 Sikwa, San José
85 Popular Cocina Boliviana, La Paz
84 Phayawi, La Paz
83 Fame Osteria, São Paulo
82 La Mar, Lima
81 Mercado 24, Guatemala City
80 El Baqueano, Salta
79 Koli, Monterrey
78 Casa Julian, Guayaquil
77 Lo de Tere, Punta del Este
76 Cantina del Tigre, Panama City
75 Niño Gordo, Buenos Aires
74 Humo Negro, Bogotá
73 Anchoita, Buenos Aires
72 Ambrosía Bistro, Santiago
71 Demencia, Santiago
70 Intimo, Panama City
69 Manzanar, Montevideo
68 Olam, Santiago
67 Ali Pacha, La Paz
66 Crizia, Buenos Aires
65 Kotori, São Paulo
64 Glouton, Belo Horizonte

63 Ancestral, La Paz
62 Isolina, Lima
61 Cosme, Lima
60 Cara de Vaca, Monterrey
59 X.O., Medellín
58 Nicos, Mexico City
57 Fonda Lo Que Hay, Panama City
56 Harry Sasson, Bogotá
55 Anafe, Buenos Aires
54 Manzanilla, Ensenada
53 Alo's, Buenos Aires
52 Origem, Salvador
51 Flor de Lis, Guatemala City