2015-07-27 7 views
2

Мои настройки конфигурации являются динамическими, поэтому я решил сохранить их в базе данных. Эти конфигурации классифицируются по NODE_ENV, поэтому я хочу загрузить конфигурацию, запросив базу данных после запуска сервера, из-за необходимости иметь конфигурацию для каждого запроса. Итак, я сохраняю конфигурацию в глобальном объекте.Сохранение 100+ объектов в «глобальной» переменной Node.js

Мои вопросы:

  1. ли это выполнимо подход?
  2. Есть ли способ загрузить конфигурацию?
  3. Сохранение этого объекта приведет к утечке памяти?
  4. Сколько места потребуется для хранения конфигурации в глобальной сети?
  5. Собирают ли глобальные объекты сбор мусора?
+0

Нет, глобальные объекты не собираются с мусором, но они не «просачиваются», потому что вы не создаете многие из них, которые накапливались бы со временем. – Bergi

+0

Будет ли это увеличивать мою память огромно? Подумайте о 100 объектах, которые могут иметь как минимум 3 пары ключей и значений, и я храню все в глобальном масштабе. – Sathish

+0

Не более, чем их хранение локально. 100 объектов незначительны. Измерьте это самостоятельно, но я предполагаю, что это не занимает больше 1 МБ. – Bergi

ответ

4
  1. Это определенно возможно. Однако я не знаю контекста вашего приложения, поэтому не могу сказать, будет ли это хорошо.
  2. Для загрузки конфигурации вам необходимо будет подключиться к базе данных и выполнить загрузку до того, как вы попытаетесь получить к ней доступ. Это будет зависеть от вашего приложения, но вы всегда можете подключиться к базе данных, прежде чем отказаться от контроля над приложением. Тогда было бы просто выбрать глобальное имя для его хранения и сохранить его в глобальном.
  3. № Нет, если вы продолжаете создавать объекты снова и снова бесконтрольно и каким-то образом ссылаетесь на них с какого-то объекта, который находится в области где-то, что крайне сложно сделать, не замечая.
  4. Честно? Немного. Стандартная библиотека node.js, вероятно, намного больше, чем ваша конфигурация. Черт, вероятно, библиотека, которую вы будете использовать для подключения к базе данных для получения вашей конфигурации, будет больше, чем ваша конфигурация.
  5. Нет. Пока вы не сможете получить к нему доступ. Node.JS использует сильно модифицированный сборщик мусора маркировки и разметки; это означает, что Node.JS имеет список объектов, которые никогда, никогда мусор собрал («корни») и отмечает каждый объект, к которому он может получить доступ с этих объектов. Все, что не отмечено, собирается и освобождается. Глобальное пространство имен является одним из этих корней, что означает все, что глобальные ссылки пространства имен не собираются.

Надеюсь, что это поможет.

+0

Будет ли это зависеть от моего приложения? Учтите, что перед привязкой к порту (запуску сервера) я собираюсь подключиться к базе данных и запросить его и сохранить этот объект в глобальном. – Sathish

+0

Для «третьего» ответа я буду ссылаться на эту глобальную переменную во многих местах, полагая, что глобальная конфигурация будет {«clientId»: «aaaa», «key»: «hehe»}, и мое приложение будет действовать как прокси, поэтому я буду использовать этот clientId во всех этих прокси-сервисах. Это приведет к утечке памяти? Просто хочу очистить свои мысли от него, прежде чем реализовать этот код. – Sathish

+0

Я не уверен, что понимаю, что вы просите. –