Как ваше приложение Rails включает в себя Javascript? - PullRequest
6 голосов
/ 13 сентября 2010

Мне очень любопытно, как ваши приложения на Rails включают JavaScript. Например:

  • Вы упаковываете весь свой js-код в один файл и обслуживаете его для всех запросов?
  • вы условно загружаете определенные js в зависимости от контроллера / действия?
  • Какие инструменты или методы вы используете, например: asset_packager, компрессор yui, звездочки, реализация, вдохновленная BigPipe?

Немного предыстории: я работаю над огромным Rails-приложением, очень тяжелым для JS. В настоящее время все js минимизированы и обслуживаются из одного файла. Это делает вещи очень удобными, так как все рамки и виджеты доступны везде. Я начинаю подвергать сомнению этот подход, кажется немного сумасшедшим заставлять всех пользователей платить цену за некоторые js, которые они, возможно, никогда не увидят. Засорение кода скриптом включает в себя глупость и сложность, так как большие части сайта доставляют контент через ajax.

У кого-нибудь есть совет, которым можно поделиться?

Большое спасибо!

Ответы [ 2 ]

3 голосов
/ 13 сентября 2010

Есть несколько компромиссов, которые следует учитывать:

  • Если у вас есть один большой JS-файл, он должен быть кэширован для всех ваших страниц. Но если только несколько страниц используют JS, это нехорошо.
  • Если ваши страницы не разделяют JS, вы можете использовать загрузку «по мере необходимости» для каждого отдельного JS каждой страницы. Но вам не нужно слишком много загрузок, поскольку каждая выборка JS имеет свои издержки.

Примечания

  • Убедитесь, что все ваши JS будут постоянно кэшироваться на ваших клиентах. Используйте номера версий в именах файлов или URL-адресах (foo.js? 123)
  • Убедитесь, что файлы JS свернуты.
  • Убедитесь, что на веб-сервере включена кодировка gzip.
  • Возможно, вы захотите использовать недорогую сеть доставки контента для своего JS, например Amazon 10 * Cloudfront или одного из их конкурентов.

Ответы на ваши конкретные вопросы

Вы упаковываете весь свой js-код в один файл и обслуживаете его для всех запросов?

Все запросы получают большой файл JS с библиотечным кодом и JS, используемым на большинстве страниц. Некоторые определенные страницы также получают дополнительный файл JS.

вы условно загружаете определенные js в зависимости от контроллера / действия?

Да, для пары очень тяжелых страниц JS эти страницы получают дополнительный файл JS. Все страницы получают файл reg JS, и он кэшируется / доступен для всех страниц.

Какие инструменты или методы вы используете, например: asset_packager, компрессор yui, звездочки, реализация, вдохновленная BigPipe?

  • YUI Compressor
  • S3 для обслуживания моего домена assets.foo.com
  • rake задачи для объединения / минимизации нескольких исходных файлов JS
1 голос
/ 13 сентября 2010

Прежде всего, попробуйте этот плагин для Firefox: http://developer.yahoo.com/yslow/. Он поможет вам определить источники медлительности, проанализировать использование вашего скрипта и предложить улучшения.

Кроме того, ознакомьтесь с этой статьей Yahoo о передовых методах для быстрых веб-сайтов: http://developer.yahoo.com/performance/rules.html. Этот совет применим ко всем веб-сайтам, а не только к рельсам.

...