Size: a a a

Node.js — русскоговорящее сообщество

2020 August 09

ES

Evg Sevg in Node.js — русскоговорящее сообщество
John Travolta
А в чем проблема, может не понял?
Делаешь на фронте асинхронный аякс запрос на апи и всё
window.addEventListener('unload', logData, false);

function logData() {
   let client = new XMLHttpRequest();
   client.open("POST", "/log", false); // third parameter indicates sync xhr. :(
   client.setRequestHeader("Content-Type", "text/plain;charset=UTF-8");
   client.send(analyticsData);
} вы это имели ввиду?
источник

JT

John Travolta in Node.js — русскоговорящее сообщество
Evg Sevg
window.addEventListener('unload', logData, false);

function logData() {
   let client = new XMLHttpRequest();
   client.open("POST", "/log", false); // third parameter indicates sync xhr. :(
   client.setRequestHeader("Content-Type", "text/plain;charset=UTF-8");
   client.send(analyticsData);
} вы это имели ввиду?
С тел каша)
Сделай асинхронную функцию, в ней делай запрос к апи, удобно через async/await
источник

CM

Chingiz Mamiyev in Node.js — русскоговорящее сообщество
Влад Грибенников
Потом импортируешь как строку?
асинхронно читаю -> получаю строку
источник

ES

Evg Sevg in Node.js — русскоговорящее сообщество
John Travolta
С тел каша)
Сделай асинхронную функцию, в ней делай запрос к апи, удобно через async/await
я думал через флутер делать https://dev.to/avaq/fluture-a-functional-alternative-to-promises-21b
источник

JT

John Travolta in Node.js — русскоговорящее сообщество
Evg Sevg
window.addEventListener('unload', logData, false);

function logData() {
   let client = new XMLHttpRequest();
   client.open("POST", "/log", false); // third parameter indicates sync xhr. :(
   client.setRequestHeader("Content-Type", "text/plain;charset=UTF-8");
   client.send(analyticsData);
} вы это имели ввиду?
Типа такого

const url = 'https://your_url';
const api1 = async () => {
   return await fetch(url);
}
источник

СП

Сергей Пограничный... in Node.js — русскоговорящее сообщество
Господа эксперты, кто знает почему в puppeteer инстанс Page живет без инстанса Browser, смысл в том, что я выхожу из области видимости только с Page'ами, ссылок на Browser нет, Page'и дальше по себе живут, работают. Значит ли что ссылка в самом инстансе Page'а?
источник

ES

Evg Sevg in Node.js — русскоговорящее сообщество
John Travolta
Типа такого

const url = 'https://your_url';
const api1 = async () => {
   return await fetch(url);
}
Огромное спасибо вот еще библиотечку нашел, вы случаем с ней не знакомы? https://github.com/vercel/swr
источник

JT

John Travolta in Node.js — русскоговорящее сообщество
Evg Sevg
Огромное спасибо вот еще библиотечку нашел, вы случаем с ней не знакомы? https://github.com/vercel/swr
Не, первый раз вижу
Все они так или иначе делают тот же фетч, просто для кого-то с более удобной обёрткой
источник

ES

Evg Sevg in Node.js — русскоговорящее сообщество
John Travolta
Не, первый раз вижу
Все они так или иначе делают тот же фетч, просто для кого-то с более удобной обёрткой
А по кешам не подскажите, я вижу вы очень опытный разработчик, как мне реализовать, что бы данные которые уже были подгружены ранее больше не подгружались🤷🏻‍♂️🤏🏼
источник

ES

Evg Sevg in Node.js — русскоговорящее сообщество
John Travolta
Не, первый раз вижу
Все они так или иначе делают тот же фетч, просто для кого-то с более удобной обёрткой
имеется ввиду данные полученные по АПИ🤏🏼🤷🏻‍♂️
источник

JT

John Travolta in Node.js — русскоговорящее сообщество
Evg Sevg
А по кешам не подскажите, я вижу вы очень опытный разработчик, как мне реализовать, что бы данные которые уже были подгружены ранее больше не подгружались🤷🏻‍♂️🤏🏼
Я не очень опытный))
На джиэс не так давно перекатился
Кеш я бы хранил на сервере
Например, с помощью редиса
Когда дёргают какой-то апи, достаёшь это из бд и кладешь в редис, если второй раз его же дергают, проверяешь вначале редис, если результат прошлого вызова там лежит, то сразу отдаешь
источник

JT

John Travolta in Node.js — русскоговорящее сообщество
В редисе можно хранить разные типы данных, так же можно и в виде ключ-значение
Так и делаешь ключ api1result, только с нормальным именем, а значение его - то, что пришло из бд
источник

ES

Evg Sevg in Node.js — русскоговорящее сообщество
я вот такое решение нашел https://web.dev/cache-api-quick-guide/ , правда не знаю насколько оно подойдет. Я расте пишу, думал там копать
источник

ES

Evg Sevg in Node.js — русскоговорящее сообщество
Мне сказали что эта задача на 15 минут и очень простая!🤓
источник

JT

John Travolta in Node.js — русскоговорящее сообщество
Evg Sevg
я вот такое решение нашел https://web.dev/cache-api-quick-guide/ , правда не знаю насколько оно подойдет. Я расте пишу, думал там копать
Это кеш на фронте
Но проблема в том, что этот апи сейчас поддерживает только фф и хром, на моб так же
источник

JT

John Travolta in Node.js — русскоговорящее сообщество
У него статус Рабочий черновик
источник

ES

Evg Sevg in Node.js — русскоговорящее сообщество
тогда можно использовать кеш более высокого уровня  class LRUCHACHE {
   constructor(max = 10) {
       this.max = max;
       this.cache = new Map();
   }

   get(key) {
       let item = this.cache.get(key);
       if (item) {
           // refresh key
           this.cache.delete(key);
           this.cache.set(key, item);
       }
       return item;
   }

   set(key, val) {
       // refresh key
       if (this.cache.has(key)) this.cache.delete(key);
       // evict oldest
       else if (this.cache.size == this.max) this.cache.delete(this.first());
       this.cache.set(key, val);
   }

   first() {
       return this.cache.keys().next().value;
   }
}
источник

ES

Evg Sevg in Node.js — русскоговорящее сообщество
юзается так let cache = new LRUCHACHE(3)
> [1, 2, 3, 4, 5].forEach(v => cache.set(v, 'v:'+v))
> cache.get(2)
undefined
> cache.get(3)
"v:3"
> cache.set(6, 6)
> cache.get(4)
undefined
> cache.get(3)
"v:3"
источник

ES

Evg Sevg in Node.js — русскоговорящее сообщество
я думал что чем ниже тем лучше...😚
источник

JT

John Travolta in Node.js — русскоговорящее сообщество
Мне нравится северный кеш больше тем, что он гарантирует тебе результат на любом устройстве в любом браузере
источник