Файлы конфигурации приложения [закрыто]

Не уверен, что я опоздал, но вы можете использовать script-ext-html-webpack-plugin . Это может установить сценарий как defer, который может отложить выполнение до синтаксического анализа DOM. Кроме того, вы можете внедрить этот скрипт в head html, чтобы начать получать его параллельно, но выполнить в конце:

plugins: [
  new HtmlWebpackPlugin({ template: 'template.ejs', inject: 'head'}),
  new ScriptExtHtmlWebpackPlugin({ defaultAttribute: 'defer' }),
]

37
задан 14.12.2015, 12:59

13 ответов

XML XML XML XML. Мы говорим файлы конфигурации здесь . Нет никакого "налога угловой скобки", если Вы не сериализируете объекты в интенсивной производительностью ситуации.

Файлы конфигурации должны быть человекочитаемыми и человеческие понятный, в дополнение к машиночитаемому. XML является хорошим компромиссом между двумя.

, Если Ваш магазин имеет людей, которые боятся той новомодной технологии XML, я плохо себя чувствую для Вас.

10
ответ дан 10.10.2019, 11:59

Может быть, это немного касательно, но я считаю, что файл конфигурации должен быть прочитан в словарь / хэш-таблицу значений ключей при первом запуске приложения и с этого момента всегда вызываться через этот объект для скорости. Обычно таблица ключ / значение начинается как строка за строкой, но вспомогательные функции в объекте делают такие вещи, как DateTime GetConfigDate (string key) и т. Д.

0
ответ дан 10.10.2019, 11:59

Насколько я знаю, реестр Windows больше не является предпочтительным способом хранения конфигурации, если вы используете .NET - большинство приложений теперь используют System.Configuration [1, 2]. Поскольку это также основано на XML, кажется, что все движется в направлении использования XML для конфигурации.

Если вы хотите остаться кроссплатформенным, я бы сказал, что использование какого-либо текстового файла было бы лучшим путем. Что касается форматирования указанного файла, вы можете принять во внимание, будет ли человек манипулировать им или нет. XML кажется более дружественным к ручным манипуляциям, чем файлы INI из-за видимой структуры файла.

Что касается налога на угловые скобки - я не слишком беспокоюсь об этом, поскольку библиотеки XML позаботятся об его абстрагировании. Единственный раз, когда это может быть рассмотрено, если у вас очень мало места для хранения, и каждый байт имеет значение.

[1] Пространство имен System.Configuration - http://msdn.microsoft.com/en-us/library/system.configuration.aspx

[2] Использование конфигурации приложения Файлы в .NET - http://www.developer.com/net/net/article.php/3396111

0
ответ дан 10.10.2019, 11:59

Ре: комментарий

epatel я думаю исходный вопрос, спрашивал о конфигурации приложения, которую администратор будет делать, не просто храня пользовательские настройки. Предложения, которые Вы дали, кажутся больше для пользователя prefs, чем конфигурация приложения и обычно не являются чем-то, что пользователь когда-либо имел бы дело с непосредственно (приложение должно обеспечить параметры конфигурации в UI, и затем обновить файлы). Я действительно надеюсь, что Вы никогда не делали бы пользователя, должны просматривать/редактировать Реестр.:)

Что касается фактического вопроса, я сказал бы, что XML, вероятно, в порядке, поскольку много людей привыкнет использовать это для конфигурации. Пока Вы организуете значения конфигурации простым в использовании способом тогда, "налог угловой скобки" не должен быть слишком плохим.

0
ответ дан 10.10.2019, 11:59

На какой платформе вы работаете? Я бы порекомендовал использовать для этого предпочтительный / общий метод.

  1. MacOSX - списки
  2. Win32 - реестр (или здесь есть новый, давно я его разработал)
  3. Linux / Unix - ~ / .apprc (имя -значение возможно)
-3
ответ дан 10.10.2019, 11:59
  • 1
    Вопрос теперь определяет " крест platform". – hippietrail 05.11.2012, 10:05
  • 2
    " " будет создан однажды на блок, или однажды на AppDomain (производительность незначительна, но я хотел указать на подход that' s более читаемый). – Matija Grcic 14.11.2012, 09:26

XML, JSON, INI.
у них всех есть свои достоинства и недостатки.
В контексте приложения, я чувствую, что уровень абстракции является важной вещью.
, Если можно выбрать способ структурировать данные, которые являются хорошим компромиссом между человеческой удобочитаемостью и как Вы хотите получить доступ/абстрагировать к данным в коде, Вы являетесь золотыми.

Мы главным образом используем XML, где я работаю, и я не могу действительно полагать, что конфигурационный файл загрузился в кэш как объекты, когда сначала считанный или после того, как это было записано в, и затем абстрагировало далеко от остальной части программы, действительно не так большая часть хита ни на ЦП, ни на дисковом пространстве.
И это довольно читаемо также, пока Вы структурируете право файла.

И все языки на всех платформах поддерживает XML через некоторые довольно общие библиотеки.

2
ответ дан 10.10.2019, 11:59
  • 1
    Программист C во мне съеживается в количестве объектов, созданных и уничтоженных на этой простой операции разделения/поп:), Вероятно: массив, 2 строки, другой массив, другая строка. – Gui13 19.10.2019, 22:34

Не запуская новую священную войну, чувства 'налогового сообщения' угловой скобки являются одной областью, где я чрезвычайно не соглашаюсь с Jeff. Нет ничего неправильно с XML, это довольно человекочитаемо (целый YAML или JSON, или файлы INI), но помните, что его намерение состоит в том, чтобы быть считано машинами. Большинство комбинаций языка/платформы идет с каким-то синтаксическим анализатором XML бесплатно, который делает XML довольно хорошим выбором.

кроме того, при использовании хорошего IDE как Visual Studio, и если XML идет со схемой, можно дать схему VS, и волшебно Вы получаете intellisense (можно добраться один для NHibernate, например).

Ulimately необходимо думать о том, как часто Вы собираетесь быть касанием этих файлов однажды в производстве, вероятно, не настолько часто.

Это все еще говорит все это для меня о XML и почему это - все еще допустимый выбор для файлов конфигурации (от Tim Bray ):

, "Если Вы хотите обеспечить данные общего назначения, что получатель мог бы хотеть сделать непредвиденные странные и сумасшедшие вещи с, или если Вы хотите быть действительно параноиками и требовательными в отношении i18n, или если, какая отправка you’re больше похожа на документ, чем структура, или если порядок вопросов данных, или если данные потенциально долговечны (как в, больше, чем секунды) XML, является способом пойти. Мне также кажется, что комбинация XML и XPath поражает зону наилучшего восприятия для форматов данных, которые должны быть расширяемы; то есть it’s, довольно легкий записать код обработки XML, который won’t приводят к сбою в присутствии изменений в формате сообщения, что don’t касаются части, о которой Вы заботитесь".

9
ответ дан 10.10.2019, 11:59
  • 1
    Жаль, что я мог бы поддержать это больше – Cheeso 19.05.2009, 19:45

Мы используем файлы свойств, просто потому что Java поддерживает их исходно. Несколько месяцев назад я видел, что Платформа приложений SpringSource использует JSON для конфигурирования их сервера, и это выглядит очень интересным. Я сравненные различные нотации конфигурации и пришли к выводу, что XML, кажется, лучшее соответствие в данный момент. Это имеет хорошую поддержку инструментов и довольно независимо от платформы.

0
ответ дан 10.10.2019, 11:59
  • 1
    That' s право, таким образом, upvote для Вас, но habib было первым: P – Mathlight 14.11.2012, 09:20

Мы используем конфигурационные файлы в стиле ini. Мы используем библиотеку Nini для управления ими. Нини делает его очень простым в использовании. Nini изначально был для .NET, но был перенесен на другие платформы с использованием Mono.

2
ответ дан 10.10.2019, 11:59
  • 1
    ini isn' t определенный любым стандартом, и имеет некоторые ограничения для того, чтобы быть только хранилищем ключа/значения – CharlesB 12.03.2013, 11:12
  • 2
    @xgbi: да, у JavaScript и разработчиков C есть довольно различные основные положения, хотя;-) – Andy E 19.10.2019, 22:34

YAML, по той простой причине, что он делает для очень удобочитаемых файлов конфигурации по сравнению с XML.

XML:

<user id="babooey" on="cpu1">
    <firstname>Bob</firstname>
    <lastname>Abooey</lastname>
    <department>adv</department>
    <cell>555-1212</cell>
    <address password="xxxx">ahunter@example1.com</address>
    <address password="xxxx">babooey@example2.com</address>
</user>

YAML:

    babooey:
        computer : cpu1
        firstname: Bob
        lastname: Abooey
        cell: 555-1212
        addresses:
            - address: babooey@example1.com
              password: xxxx
            - address: babooey@example2.com
              password: xxxx

Примеры были взяты с этой страницы: http://www.kuro5hin.org/story/2004/ 10/29/14225/062

28
ответ дан 10.10.2019, 11:59
  • 1
    Kuro5hin процитировал строку и символьное количество как причины использовать YAML по XML. Интересно, почему он забыл цитировать " количество поддержки инструментов и libraries"? YAML: 2, XML: 2,000,000. – Cheeso 19.05.2009, 19:48
  • 2
    Yaml имеет намного больше библиотек, чем 2. yaml.org – engtech 21.01.2011, 00:14
  • 3
    Мне нравится YAML, и приблизительно 12 языков со сторонними библиотеками перечислены по yaml.org. Но единственный язык, который поставлется с поддержкой YAML по умолчанию, кажется, Ruby (начиная с 1.9.2). Есть ли какие-либо другие? Добавление зависимостей может быть стычкой. – nealmcb 21.03.2012, 18:22
  • 4
    Я не уверен, было ли это намерением @ cheeso, но я вижу, что есть только две библиотеки на выбор (а не 2M) как преимущество, а не недостаток (особенно, если они правильно поняли эти две ...) – bacar 15.05.2012, 17:31
  • 5
    что, если это doesn' t запускаются с теста? – NullVoxPopuli 19.10.2019, 22:33

Во-первых: Это - действительно большая проблема дебатов, не быстрый Q+A.

Мой фаворит прямо сейчас должен просто включать Lua, потому что

  • я могу разрешить вещи как width=height* (1+1/3)
  • , я могу сделать пользовательские функции доступными
  • , я могу запретить что-либо еще. (невозможный в, например, Python (включая соленые огурцы.))
  • я, вероятно, захочу язык сценариев где-то в другом месте в проекте так или иначе.

Другая опция, если существует много данных, состоит в том, чтобы использовать sqlite3, потому что они правы к Маленькому заявлению

  • .
  • Быстро.
  • Надежный.

Выбирают любые три.

, К которому я хотел бы добавить:

  • резервные копии являются защелкой. (просто скопируйте файл дб.)
  • легче переключиться на другой дб, ODBC, безотносительно. (чем он из fugly-файла)

, Но снова, это - большая проблема. "Большой" ответ на это, вероятно, включает некоторую матрицу функции или список ситуаций как:

Объем данных или короткое время выполнения

  • Для больших объемов данных, Вы могли бы хотеть эффективное устройство хранения данных, как дб.
  • Для коротких промежутков времени (часто), Вы могли бы хотеть что-то, для чего Вы не должны делать большого парсинга, рассматривать что-то, что может быть mmap:ed в непосредственно.

, Что реализовывает конфигурацию, касаются?

  • Хост:
    • мне нравится YAML в / и т.д., который повторно реализован в окнах?
  • Пользователь:
    • Вы разрешаете пользователям редактировать конфигурацию с текстовым редактором?
    • это должно быть централизованно управляемо? Реестр / gconf / удаленный дб?
    • май пользователь имеют несколько отличающиеся профили ?
  • Проект:
    • Файл (файлы) в каталоге проекта? (Управление версиями обычно следует этой модели...)

, Сложность

  • Является там только несколькими плоскими значениями? Рассмотрите YAML.
  • данные вкладываются, или зависимый в некотором роде? (Это - то, где это становится интересным.)
  • это могла бы быть желательная функция для разрешения некоторой формы сценариев?
  • Шаблоны могут быть просмотрены как своего рода конфигурационные файлы..
14
ответ дан 10.10.2019, 11:59

конфигурация @Guy

Но приложения является не всегда просто парами ключ/значение. Посмотрите на что-то как конфигурация кота для того, на каких портах она слушает. Вот пример:

    <Connector port="80" maxHttpHeaderSize="8192"
           maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
           enableLookups="false" redirectPort="8443" acceptCount="100"
           connectionTimeout="20000" disableUploadTimeout="true" />


    <Connector port="8009" 
           enableLookups="false" redirectPort="8443" protocol="AJP/1.3" />

у Вас может быть любое количество коннекторов. Определите больше в файле, и существует больше коннекторов. Не определяйте больше, и ничто больше не существует. Нет никакого хорошего пути (по моему скромному мнению), чтобы сделать это с простыми парами ключ/значение.

, Если конфигурация Вашего приложения проста, то что-то простое как файл INI это читается в словарь, прекрасен, вероятно. Но для чего-то более сложного как конфигурация сервера, файл INI был бы огромной болью для поддержания, и что-то более структурное как XML или YAML будет лучше. Все это зависит от проблемного набора.

5
ответ дан 10.10.2019, 11:59

@Herms

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

то, Что Вы часто получаете тогда, является также рекомендуемыми способами, которыми они должен/могут быть измененными. Как меню конфигурации в программе или панель конфигурации в "системе prefs" приложение (для программных обеспечений системных служб т.е.). Не разрешение конечным пользователям изменить их непосредственно через RegEdit или NotePad...

, Почему?

  1. конечные пользователи (=customers) привыкли к своим платформам
  2. , Система для резервных копий может лучше сохранить "безопасные установки" и т.д.

@ninesided

О " выбор библиотеки ", попытайтесь связаться в (статическая ссылка) любая выбранная библиотека для понижения риска вхождения в войну конфликта версий с машинами конечных пользователей.

1
ответ дан 10.10.2019, 11:59
  • 1
    Аргумент в пользу этого пути был бы намного более сильным, если мы могли бы найти некоторые библиотеки, которые предлагают объединенный API различным форматам файла конфигурации. – hippietrail 05.11.2012, 10:03
  • 2
    Посмотрите Andy E' s ответ. – BoltClock♦ 19.10.2019, 22:33

Теги

Похожие вопросы