繁体   English   中英

覆盖javascript_tag以将所有内联javascript放在页面末尾(以提高性能)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM