Сначала вам нужно выяснить, что для вас важнее - точная настройка предпочтений сервера, производительность на стороне пользователя, модульность или что-то еще.
Таким образом, вы можете загрузить конфигурацию для каждого модуля отдельным способом с отдельным классом или даже жестко закодировать некоторые вещи в JS. Вы получите ловкость, но это будет полный беспорядок, но это может быть в основном рабочий беспорядок. Вероятно, зависит от того, насколько изолированы команды разработчиков кода или разработчики модулей.
Вместо распределения конфигурации по модулям вы можете разделить различные виды конфигурации:
- Некоторые временные настройки могут быть сохранены в localStorage (или аналогичных, даже cookie), и вы получите выгоду от добавления событий, которые могут перенести конфигурацию на все открытые вкладки. Конечно, это было бы здорово, только если у одного пользователя только один компьютер, но вы все равно можете разрешить сохранение этой конфигурации на своем сервере.
- Пользовательские настройки могут быть помещены в один сериализованный объект (JSON довольно легок) и отправлены с вызовами AJAX. Вы можете кэшировать эти настройки на стороне PHP после того, как пользователь изменит их и просто сериализует пары ключ-значение.
- Конфигурацию всего сайта, вероятно, следует сделать отдельной, поскольку она редко изменяется и может храниться в файле JS. Вы хотите загрузить его после загрузки страницы? Хорошо - вы можете сделать это с AJAX и затем запустить eval. Что бы вы получили? Вы также можете статически загрузить один и тот же файл JS, и он будет кэшироваться браузером и не загружаться каждый раз, а интерпретатор PHP вообще не затронет его.
И вы можете смешать все это, как это обычно происходит в большинстве случаев с большими веб-сайтами, которые я видел.
Что касается формата, я бы предпочел JSON. Он довольно легкий (особенно при сравнении с XML), и вы можете красиво его GZIP, чтобы сделать его еще легче. JSON также легко расширяется с течением времени (вы можете добавлять и удалять опции без фатальных сбоев) и почти полностью поддерживает JS.
Что касается того, как генерировать JSON ... Хорошо, КЭШИТЕ ЭТО. Помимо некоторых специфических предпочтений, большинство параметров конфигурации не будут меняться слишком часто (не так часто, как при чтении).
Также обратите внимание, что конфигурацию можно понимать по-разному - в MediaWiki / Wikipedia вы можете добавить свой собственный JavaScript.
Также вы можете указать больше параметров, чем это необходимо, если вы хотите, чтобы ваши пользователи создавали дополнительные сценарии.