переписать javascript_tag, чтобы поместить все встроенные javascript-скрипты в конец страницы (для повышения производительности) - PullRequest
0 голосов
/ 09 ноября 2009

Для повышения производительности внешнего интерфейса рекомендуется размещать сценарии в самом конце HTML-кода.

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

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

Я нашел довольно простой способ собрать все встроенные скрипты и вывести их в конец HTML-кода, переписав метод javascript_tag.

Но так как я новичок в рельсах, я хотел бы знать, если это хороший путь или есть лучший путь.

Вот как выглядит мой код:

def javascript_tag(content_or_options_with_block = nil, html_options = {}, &block)
  content =
    if block_given?
      html_options = content_or_options_with_block if content_or_options_with_block.is_a?(Hash)
      capture(&block)
    else
      content_or_options_with_block
    end

  javascript_code = content_tag(:script, javascript_cdata_section(content), html_options.merge(:type => Mime::JS))
  @_inline_javascript_code ||= ''
  @_inline_javascript_code << content

  return request.xhr? ? concat(javascript_code) : nil
end

Затем я вывожу переменную @_inline_javascript_code прямо перед закрывающим тегом HTML. Мне это немного не по себе, но работает.

Есть мысли?

1 Ответ

2 голосов
/ 09 ноября 2009

У вас проблемы со скоростью загрузки страницы? Если нет, то я думаю, что вы оптимизируете преждевременно за счет усложнения вашего проекта. Если да, то я бы посмотрел на различные стратегии оптимизации (минимизация, объединение сценариев и т. Д.), Прежде чем смотреть на изменения, которые требуют изменения поведения фреймворка по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...