Должен ли я загрузить все данные в массив и отфильтровать его? - PullRequest
0 голосов
/ 07 января 2019

Я работаю с API панк-пива https://punkapi.com/documentation/v2, чтобы создать приложение, которое может искать и фильтровать пиво по ABV. Я хочу разделить все виды пива в API на 3 категории: слабое (0-5%), среднее (5-12%) и крепкое (> 12%).

Сначала я думал о вызове API для каждого диапазона, используя параметры abv_lt и abv_gt, которые предоставляет документ. Но тогда я думаю, что было бы дорого делать вызов API каждый раз, когда пользователь нажимает на критерии.

Итак, мой следующий подход - просто загрузить все пиво в большой массив, объединив все страницы вместе и выполнив всю фильтрацию и поиск из локального мастер-массива (по умолчанию каждый запрос возвращает только 25 пива):

getAllBeers(){
  const requestURL=`${root_api}beers`;
   axios.all([
      axios.get(`${requestURL}?page=1&per_page=80`),
      axios.get(`${requestURL}?page=2&per_page=80`),
      axios.get(`${requestURL}?page=3&per_page=80`),
    ])
     .then(axios.spread(function (data1, data2,data3) {
      let beerData1 = data1.data;
      let beerData2 = data2.data;
      let beerData3 = data3.data;
      let master_data = beerData1.concat(beerData2, beerData3);
      return master_data;
     }))
}

Буду признателен, если есть лучший или эффективный подход к этой проблеме. Спасибо.

1 Ответ

0 голосов
/ 07 января 2019

Лучший подход, вероятно, состоит в том, чтобы приспособить ваш интерфейс к способу, которым API предоставляет данные. В настоящее время вы, скорее всего, получите намного больше данных заранее, чем когда-либо просматривает большинство пользователей. Это создает ненужную нагрузку на сервер и приводит к потере пропускной способности клиента. Вычислительная мощность, необходимая для сортировки массива, для современного устройства пренебрежима, пока список невелик.

Так что, может быть, лучше всего получить первую страницу нефильтрованного пива и сначала показать ее пользователю. Получить больше, только если пользователь действительно хочет применить фильтр или увидеть следующую страницу.

Также многие API поддерживают результаты кэширования и сообщают вашему клиенту, что у него уже есть актуальные данные при повторении того же запроса. Это лучше всего работает, если вы сообщаете API, какие данные вам действительно нужны.

...