2010-09-12 5 views
6

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

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

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

У кого-нибудь есть совет по обмену?

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

ответ

1

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

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

3

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

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

Примечания

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

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

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

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

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

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

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

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