Подтвердить что ты не робот

Rails 3: хорошее эмпирическое правило для размещения javascript?

При написании javascript для определенной страницы на сайте, когда вы хотите превратить javascript в функцию и включить его в application.js?

Я видел предложения об этом (и minifying или gzip-ing), чтобы минимизировать HTTP-запросы. Это имеет смысл, но как насчет ремонтопригодности? Если у меня есть js-код, специфичный для одного представления, кажется, что больше работы нужно посмотреть на потенциально массивный application.js. Этот код может быть встроен в это представление или помещен в его собственный файл .js (или .js.erb или .rjs) в этой папке просмотра.

Я видел еще одно предложение которое Rails автоматически объединяет все javascript в один файл. Это правда?

TL;DR: сколько или как мало должен заботиться разработчик об оптимизации при написании javascript?

4b9b3361

Ответ 1

Поскольку я не видел ответа примерно через месяц, я отвечу на этот вопрос в меру своих текущих знаний.

Rails 3.1 (в настоящее время в релизе-кандидате 4) представляет sprockets, который скомпилирует весь javascript в проекте rails в один файл. Он даже поставляется с инструментами для минимизации и сжатия javascript, чтобы все это сразу передавалось клиенту.

Связано со звездочками - конвейер ресурсов Rails 3.1. Насколько я понимаю, это иерархия/абстракция папок. Javascripts могут входить в 3 папки:

/apps/assets/javscripts/
Файлы Javascript, специфичные для приложения, включая application.js. Это должно содержать только манифест файлов javascript, которые вы хотите включить в свой проект. Инструмент rails new сгенерирует этот файл и включит jquery в манифест.

/lib/assets/javascripts/
Файлы Javascript, написанные разработчиком, более общие цели. (Мое впечатление, что это будет для javascript-библиотек, которые вы разрабатываете, чтобы переходить в несколько приложений)

/vendor/assets/javascripts/
Файлы сторонних javascript (т.е. JQuery, Modernizr)

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

Чтобы ответить на мой собственный вопрос

  • Поместите функции javascript в отдельные файлы, группируйте их логически. В моем тестовом приложении указано, что вложенные папки внутри .../assets/javascripts/ в порядке , если и только если путь вложенной папки включен в манифест.
    • т.е. положив //= subfolder/js_file в манифест, будет работать. Ввод //= js_file не будет, если js_file находится внутри .../javascripts/subfolder/
    • DHH упоминает "правило 13" в своем разговоре (см. ниже). Если количество javascripts в папке превышает 13, оно начинает выглядеть беспорядочным и неуправляемым. Это будет подходящее время для группировки файлов javascript в подпапки.
  • Используйте встроенный Rails 3.1 minifier и компрессор (или установите предпочтительный камень)
  • Рефакторинг javascript-кода время от времени. Перемещение функций на /lib/assets/javascripts/ с течением времени. (Цель состоит в том, чтобы в конечном счете распознать, когда вы хотите писать функции javascript общего назначения в отличие от конкретных приложений и исключить этот шаг рефакторинга)

Дополнительные ресурсы

сообщение в блоге, в котором перечислены все изменения в Rails 3.1
DHH talk on Rails 3.1 изменения, 16 мая 2011 (~ 1 час)