Как стать автором
Обновить
6
0
Александр Пройденко @proydenko

Front-end Developer

Отправить сообщение
Обновил статью, добавил решение №0. Всем спасибо.
Действительно, вся проблема в логически неверном коде, но когда на большом проекте появляются утечки, то не всегда очевидно где их искать. Очень здорово, что появились более красивые решения, чем мои костыли. Цель статьи помочь тем, кто пытается найти утечку памяти у себя.
Огонь, все звезды сошлись
Я дебажил память и видел, что там находятся Vue'ые элементы, да и держать в памяти 10к функций это не сильно ресурсозатратно, я проводил тесты, на которых рендерелись тяжелые страницы, и в этом случае нода падала через 20-40 запросов, а когда рендерилась легкая страница, то могла упасть на 1000ом, в обоих случаях память не вычищалась.
только что попробовал сделать таким образом и действительно оно помогло, но есть 1 нюанс, если использовать плагин кеширования, то ничего кешироваться не будет
import baseAxios from 'axios';
import LRUCache from 'lru-cache';

import { cacheAdapterEnhancer } from 'axios-extensions';


export default function () {
  return baseAxios.create({
    timeout: 10000,
    adapter: cacheAdapterEnhancer(baseAxios.defaults.adapter, {
      defaultCache: new LRUCache({
        maxAge: 1000 * 60 * 5,
        max: 50,
      }),
      enabledByDefault: true,
      cacheFlag: 'useCache',
    }),
  });
}

это нужно если я например не хочу каждый раз ходить на апи для получения какой нибудь статической информации, которая меняется не чаще чем раз в час
Не всегда является возможным быстро заменить в проекте axios на nuxt'овый, особенно, когда до конца не уверен что дело в этом, идея статьи помочь тем, кто столкнулся с этой проблемой, и есть надежда, что он прочитает эту статью и выберет любое решение приведенное в ней или в комментарии.
Очевидно что суть в замыкании, garbage collector не мог за собой память почистить, потому что компоненты вью ссылались на data, которую вернул axios, и когда он прошел через интерцептор, осталась ссылка интерцептора на data, и поэтому gc ничего не почистил за собой. Когда я столкнулся с этой проблемой, я и понятия не имел что дело в этом, а статья написана в помощь тем, кто столкнется с данной проблемой и чтобы проверили у себя в проекте этот кейс, описанный в статье. В любом случае спасибо за комментарий
Можно попробовать, одно из решений данной проблемы
каким образом?
в данном случае через плагин происходит явное записывание axios в контекст приложения, который создан 1 раз. Везде использовать import axios from 'axios' может не совсем подходить из-за того, что может быть конфиг какой нибудь типа кеширования запросов или общие заголовки, и делать это каждый раз не совсем хорошо

Информация

В рейтинге
Не участвует
Откуда
Одесса, Одесская обл., Украина
Дата рождения
Зарегистрирован
Активность