[英]overwrite javascript_tag to put all inline javascripts at the end of the page (for better performance)
为了获得更好的前端性能,最佳实践是将脚本放在HTML代码的最后。
我这样做的原因是我现在正在处理一个相当大而复杂的页面,并且遇到的问题是视图中的许多内联脚本,这些脚本大多是由Rails的内置JavaScript帮助器生成的。 这些脚本取决于以前在头中加载的库,因此很多东西停止工作。
我知道,最好将JavaScript代码与HTML视图完全分开,我对此非常拥护,但这不是该项目的选择,我想避免在此讨论这一点。
我发现了一种非常简单的方法来收集所有内联脚本,并通过覆盖javascript_tag方法将它们输出到HTML代码的末尾。
但是,由于我是Rails的新手,所以我想知道这是一个好方法还是有一个更好的方法。
这是我的代码的样子:
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
然后,我在结束HTML标记之前输出@_inline_javascript_code变量。 这对我来说有点不客气,但是行得通。
有什么想法吗?
您是否对页面加载速度有疑问? 如果没有,那么我认为您过早地进行了优化,但要付出使项目复杂化的代价。 如果是这样,那么在查看需要修改框架默认行为的更改之前,我将研究各种不同的优化策略(最小化,组合脚本等)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.