10

我知道我可以在 KB 中节省的不多,但是为了在 Google PageSpeed Insights 中获得更好的分数,从而可能获得更好的 SEO 排名,我该如何解决这个问题?

来自https://developers.google.com/speed/pagespeed/insights/?hl=en&url=www.tradebench.com

Minify JavaScript for the following resources to reduce their size by 2.8KiB (2% reduction). Minifying http://d2bfamm4k6zojq.cloudfront.net/…tion-ea806932c941fb875b7512a557ebead3.js could save 2.8KiB (2% reduction) after compression.

它对我的 CSS 文件告诉我同样的事情。

从我的 production.rb 文件中:

config.assets.compress = true
config.assets.js_compressor  = Uglifier.new(:mangle => true)
config.assets.css_compressor = :yui

查看 uglifier 文档/选项,我看不出如何配置它以获取最后的 2KB。

任何人都知道如何让它压缩最后一点以删除关于它的 PageSpeed 通知?也许使用除 Uglifier 之外的其他压缩机?

谢谢 :-)

4

1 回答 1

15

如果您只是检查缩小的 js,您会看到代码已缩小,但您包含的每个 js 库在顶部都有自己的版权和许可信息(这是正确的),如下面的片段:

/**
 * Copyright 2009 SomeThirdParty.
 * Here is the full license text and copyright
 */

如果您真的想在 Rails 应用程序上实现完全缩小并摆脱 pagespeed 洞察力的 2% 额外压缩通知,您可以通过以下设置来实现:

config.assets.js_compressor = Uglifier.new(copyright: false)

或者

config.assets.js_compressor = Uglifier.new(output: { comments: :none })

注意 1:以上两种方法都会最小化您的 application.js 而无需任何注释。

注意 2:通过上述两种设置,uglifier 会从您的缩小 js 中删除所有版权信息,因此您的应用程序实现了 google pagespeed 所需的总缩小,并且您的分数获得了+1分。

但是,您不应避免包含您正在使用的代码的版权。大多数许可证(MITBSDGPL ...)都要求您在重新分发库时保留版权和许可信息。当您允许浏览器从您的服务器或您的 CDN 下载该库的压缩副本时,您重新分发该库算作。因此,您应该在应用程序的某个位置包含版权和许可信息

如何

您可以做的一件事是收集您在应用程序上使用的 js 库的所有版权信息,并将它们全部添加到 licenses.txt 中,并将其放在您的公共文件夹中。您的public/licenses.txt应该如下所示:

/**
 * Unobtrusive scripting adapter for jQuery
 * https://github.com/rails/jquery-ujs
 *
 * Requires jQuery 1.8.0 or later.
 *
 * Released under the MIT license
 *
*/
[...and the rest copyrights here one after the other]

然后通过使用链接标签在应用程序的 html 头部指定此文件的位置(layouts/application.html):

<head>
  <!-- License information of used libraries -->
  <link rel="license" href="../licenses.txt">
</head>

rel=license表示:当前文档的主要内容被引用文档所描述的版权许可所覆盖

最后,如果你想更正确地使用这个,你应该在缩小的 application.js 上只包含一条评论,以便让某人在哪里可以找到所有版权信息(以防万一……)。为此,请在 application.js 文件顶部添加以下注释:

/*!LC
 * Copyright and Licenses: http://www.example.com/licenses.txt
*/

因此您的 application.js 可能如下所示:

/*!LC
 * Copyright and Licenses: http://www.example.com/licenses.txt
*/ 
//= require jquery
//= require jquery_ujs
//= [..rest of your requires]

注意:我在开始时将此评论与!LC区分开来。您需要这个将正则表达式传递给 uglifier,因此它只允许对缩小的 js进行此评论。为此,请转到您的 production.rb 并放置以下内容:

config.assets.js_compressor = Uglifier.new(output: { comments: /^!LC/ })

Uglifier 将只允许在缩小的 js 文件顶部添加 !LC 注释,您不会仅收到一条评论的 pagespeed 洞察警告。如果你做了所有这些,你会完全没问题,你会在 pagespeed 洞察力上获得满分,你已经完全缩小了 .js 以获得最佳交付,并且你拥有所有版权以解决任何法律问题。

于 2015-12-14T16:10:53.653 回答