Что такое разумный рабочий процесс для разработки веб-приложений?


9

Прошло много времени с тех пор, как я занялся какой-либо существенной веб-разработкой, и я хотел бы воспользоваться новейшими практиками, но я изо всех сил пытаюсь визуализировать рабочий процесс, чтобы включить все.

Вот что я хочу использовать:

  • CakePHP Framework
  • JSMIN (JavaScript Minify)
  • SASS (Synctactically Awesome StyleSheets)
  • Гит

CakePHP:

Довольно понятно, внесите изменения и обновите источник.

JSMin:

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

SASS:

Мне действительно нравится то, что предлагает SASS, но я также знаю, что код SASS не поддерживается браузерами по умолчанию, поэтому в какой-то момент код SASS необходимо преобразовать в обычный CSS. На каком этапе рабочего процесса это сделано.

Гит

Я с ужасом признаю это, но в прошлый раз, когда я занимался какой-либо существенной веб-разработкой, я не использовал систему контроля версий SCM (IE, я действительно использовал систему контроля версий, но она состояла из очень подробного журнала изменений с резервными копиями).

С тех пор у меня был большой опыт использования Git (а также Mercurial и SVN) для разработки десктопов, но мне интересно, как наилучшим образом реализовать его для веб-разработки).

Является ли обычной практикой внедрение удаленного репозитория на веб-хосте, чтобы я мог перенести изменения непосредственно на рабочий сервер, или есть какой-то кроссплатформенный (windows / linux) инструмент, который позволяет легко загружать только измененные файлы на рабочий сервер , Существуют ли веб-хостинговые компании, которые облегчают внедрение удаленного репозитория, нужен ли мне доступ по SSH и т. Д ...

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

Дополнительно:

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

Что-то подобное уже существует? Уже есть проект с открытым исходным кодом, который реализует нечто подобное, что я мог бы использовать и внести свой вклад?

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

Ответы:


2

Вы можете проверить расширение Google PageSpeed ​​для Apache : afaik, есть возможность объединять и минимизировать Javascript и CSS автоматически и в сочетании с кэшированием, это будет соответствовать тому, что вы упомянули в конце своего поста.


1
Круто, я не осознавал, что все это можно сделать с помощью одного модуля Apache. Сокращение Javascript / CSS, конкатенация Javascript / CSS, а также множество других дополнительных улучшений производительности. После некоторого поиска в Google я даже узнал, что Dreamhost предоставляет его с их общим / VPN-хостингом. Я удивлен, что нет больше информации об этом на webmasters.stackexchange.com или stackoverflow.com.
Эван Плейс

5

JSMin

Если у вас нет тонны JS, вы можете настроить что-то, чтобы минимизировать каждый раз, когда вы нажимаете сохранить. Если у вас много JS, включите его в процесс развертывания (см. Git ниже).

SASS

Используйте Compass Framework . Он включает в себя SASS, а также небольшой скрипт, который «следит» за вашим каталогом SASS и компилирует файлы в CSS (включая уменьшенный CSS, если хотите) каждый раз, когда вы сохраняете. Он построен с учетом RoR, но вы можете легко использовать его с любым веб-фреймворком, создав файл конфигурации Compass и выполнив команду «compass watch». Compass также включает в себя множество других удобных инструментов, таких как Blueprint , полезные миксины и автоматическую генерацию спрайтов с помощью плагина Lemonade (который должен быть встроен в Compass в следующем выпуске ).

Гит

В зависимости от размера / сложности сайта, рассмотрите следующие Capistranoмодель развертывания. Не уверен, что вы можете использовать Capistrano напрямую с CakePHP, но суть такова: у каждого производственного сервера есть «текущая» папка, которая содержит весь код, работающий в данный момент. Каждый раз, когда вы хотите развернуть новый код, вы запускаете сценарий, который ssh ​​на каждом рабочем сервере, и он (а) копирует содержимое «текущей» папки в резервную папку (с именем выпуска / отметкой времени на нем), ( б) извлеките последний код из Git в «текущую» папку и (в) начните обслуживать этот новый код из «текущей» папки. Таким образом, вы можете откатиться до любого предыдущего выпуска, если это необходимо, и точно сказать, какая ревизия находится в производстве. Capistrano также позволяет добавлять все виды пользовательских задач в рамках процесса развертывания, включая минификацию JS / CSS,

дополнительный

Да, есть куча. Google для чего-то вроде "CSS / JS concat". Вот быстрый пример, который я нашел для CakePHP: Asset Packer .


Большое спасибо за вклад. Мне очень нравится то, что я видел с Compass Framework. Я только хотел бы знать, как развернуть его в PHP. Я погуглил, но не могу найти альтернативу. Capistrano также выглядит очень интересно, но вместо дорогой и хрупкой модели копирования файлов, я бы просто использовал ssh, чтобы сказать клиенту git на всех удаленных серверах выполнить «git pull --rebase» после проверки того, что он работает на тестировании. сервер первый.
Эван Плейс

(продолжение) Упаковщик активов также выглядит очень интересно. Единственная причина, по которой я выбрал другой ответ вместо вашего, заключалась в том, что он содержал все это в одном кадре с обработкой, выполняемой на самом сервере (поэтому никаких дополнительных сценариев не требуется). Единственный недостаток, который я вижу в pagepeed, - это дополнительная обработка статического контента (который легко решается с помощью статического кэширования контента и / или CDN. Я действительно хотел бы принять 2, потому что ваш ответ содержит много ценной информации.
Эван Плейс,

Вы не «развертываете» среду Compass с помощью PHP. Вы просто запускаете его во время кодирования, он компилирует ваши CSS-файлы каждый раз, когда вы нажимаете save, и CSS-файлы - это то, что фактически развертывается. Чтобы «запустить» компас, сначала нужно сгенерировать файл конфигурации (compass.rb) - используйте его для генерации параметров командной строки: jsfiddle.net/chriseppstein/PG46q/3 . После того, как вы настроили файл конфигурации со всеми вашими путями, просто запустите «compass watch» в той же папке, что и файл конфигурации, и компас начнет перекомпиляцию SASS каждый раз, когда вы нажимаете save. Попробуйте это на каком-то стороннем проекте: это ОЧЕНЬ легко и быстро.
Евгений Брикман

Кроме того, насколько я знаю, Капистрано мало копирует. Каждый раз, когда вы развертываете, он проверяет последний код и просто меняет имена папок. Преимущество заключается в том, что вы всегда можете вернуться к более ранней версии, просто поменяв местами имена папок.
Евгений Брикман

Я нашел статью о том, как запустить его в PHP. Легче использовать вне проекта Ruby, чем я ожидал. Поцарапайте мой последний комментарий о Capistrano. Я думал, что он был использован для отправки распределенной команды на несколько серверов. Если у меня есть ssh-доступ к удаленным серверам, я бы предпочел отказаться от git-клиента, чтобы получить последние изменения из производственной ветви. ИМХО, обмен папками - плохая идея. Я бы предпочел пометить ревизии в цикле выпуска и просто проверить предыдущий тэг, если у текущего есть проблемы.
Эван Плейс
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.