Собственно сабж. Разрабатываю на Symfony 1/2, весь код js в виде лапши из вызовов jQuery, его плагинов и своих костылей распиханных по отдельным файлам, например: profile.js в /profile, post.js в /post и т.д. Не могу прийти к какому-то пониманию, как весь этот код организовать, возможно также собирать его чем-то (и нужно ли).
Начал гуглить по этой теме, попадаются статьи о backbone/angular/и т.п., но мне почему-то кажется это чем-то излишним, пока что шаблонизация на клиенте как таковая мне не нужна, роуты опять же на #! какие-то страшные. Вообщем прошу помочь разобраться, ибо в голове полная каша.
мне кажется надо делать так:
1. написать микроядро(в котором будет в частности упомянутый RequireJS и специфическая аритектура проекта).
2. написать макроядро(в котором будет весь весь весь js-код) во избежание всяких чудо-фич вида посреди HTTP-ответа. Это делается чудесной вещью под названием GruntJS и указанного автором набора скриптов «на каждый URL».
По умолчанию всегда грузится легковесное микроядро, при необходимости подгрузки чего-либо оно дергает макроядро(постепенно в фоне) — которое вследствие модульности постепенно кешируется.
Начал разбираться с RequireJS — кажется все только усложнилось. Теперь непонятно что лучше RequireJS/commonJS, c чего начать. Но это уже пол беды, спасибо за направление, куда двигаться. Только вот фразу не понял:
во избежание всяких чудо-фич вида посреди HTTP-ответа
Возможно, имеется в виду несколько десятков http-запросов, что не есть хорошо. Но при использовании requirejs это будет только во время разработки. Он тоже умеет билдить и соединять файлы в один.
Я правильно понимаю что для разных страниц requirejs будет собирать билд только из части js файлов, требуемых на конкретной странице? Как-то это не оптимально.
Если код раскладывается на дерево согласно зависимостям: общий код — в корне, частные — в подкаталогах, то можно так и хранить. Если хочется держать в одном каталоге, то или дерево подкаталогов дублируется там, или всё в одной куче, а вытаскивание из неё организуется через зависимости. Если частный код или плагин употребляется в более одном месте, его переносят к общему корню каталогов. Зависимости можно визуализировать в одном JSON-файле, чтобы скрипт мог доставать без ручной правки кодов во многих местах. Аналогичный вопрос часто свстаёт в среднесложных системах с более 2 десятками файлов. По теме, скорее, лучше гуглить на @require JS", «commonJS», AMD, хотя в них не решается вопрос о путях к файлам — это всё на усмотрение программиста.
Вопрос не столько в организации хранения файлов, я может не совсем точно описываю что мне нужно. Хочется понять какие-то best practise, уйти от лапши к какой-то модульности, что ли.
Для автора возможно уже не актуально, но для тех кто нагуглит топик - недавно написал статью об этом habrahabr.ru/post/218485
Простой подход к структурированию кода на клиенте
Выкинуть из головы весь код и сделать декомпозицию задачи в целом. И сразу станет понятно куда какой код «класть». Ну или может даже и код тоже декомпозировать.
Да пробовал, пришел к созданию какого-то подобия моделей сущностей в виде функций-конструкторов в файлах навроде
Phrase.js
function Phrase() {
var phrase_list,
phrase_current,
phrase_first,
current_class;
this.getPhrases = function(list, class_name) {
//...
}
this.next_phrase = function() {
//...
}
}
var phrase = new Phrase();
$(function() {
phrase.getPhrases($('.phrase-item'), 'phrase-current');
//и тут та же самая лапша, к тому же вылезла проблема использования этого же экземпляра phrase в других местах
});