Для повышения производительности внешнего интерфейса рекомендуется размещать сценарии в самом конце 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.
Мне это немного не по себе, но работает.
Есть мысли?