【问题标题】:ngx_pagespeed - Gzip static assetsngx_pagespeed - Gzip 静态资源
【发布时间】:2013-10-04 18:28:49
【问题描述】:

我正在尝试为我的 nginx 盒子寻找最佳方法。当然,我的目标是为我的用户提供最佳性能和最佳加载时间。

所以我正在对我的 nginx 进行负载测试,并且 - 在 nginx 论坛的 maxim-dounin 的帮助下 - 发现我的吞吐量问题是动态 gzipping 静态资产。

我必须在构建过程中预先对所有内容进行 gzip 压缩,这非常容易 - 并且只在 comp level @ 1 或 2 的情况下对动态内容进行动态 gzip,这应该节省一些 cpu 并允许我充当尽可能多的用户使用 aws m1.small ec2 实例。

但我也打算使用 ngx_pagespeed 来优化这些静态资产,缩小、合并,ngx_pagespeed 做得很好的东西。我的意思是,我可以处理图像并在构建过程中执行 jpgoptim 和 pngoptim,但结合 css/js 更难。

我正在使用这些 ngx_pagespeed 配置:

pagespeed on;
pagespeed EnableFilters combine_css,combine_javascript,canonicalize_javascript_libraries,collapse_whitespace,convert_meta_tags,dedup_inlined_images,flatten_css_imports,inline_import_to_link,inline_css,inline_javascript,rewrite_javascript,remove_comments,rewrite_css,rewrite_images,convert_gif_to_png,recompress_png,convert_jpeg_to_progressive,strip_image_color_profile,strip_image_meta_data,insert_image_dimensions;
pagespeed JpegRecompressionQuality 80;
pagespeed FileCacheSizeKb            256000; #256mb
pagespeed FileCacheCleanIntervalMs   3600000;
pagespeed FileCacheInodeLimit        500000;
pagespeed FileCachePath /run/shm/nginx/pagespeed_cache;
pagespeed Statistics on;
pagespeed StatisticsLogging on;
pagespeed LogDir /var/log/pagespeed;
pagespeed LowercaseHtmlNames on;

关于 ngx_pagespeed 如何与 nginx gzip_static 一起工作的任何想法?我的意思是,据我了解,ngx_pagespeed 运行在 nginx 的“前面”,因为它会将优化的所有内容缓存到 tmpfs。如果服务器从 tmpfs 获取已经优化的资产,我在缓存文件夹中查找 gzip 压缩文件,但找不到任何文件。 首先,ngx_pagespeed 自己做gzipping 吗?它是即时执行还是缓存 gzipped 版本?

当它从 nginx (gzip_static on) 接收到一个已经 gzip 压缩的资产时,它会怎么做?优化后是否需要解压再gzip?

我怎样才能两全其美 - 提供预压缩的静态资产和 ngx_pagespeed 优化?

非常感谢和最好的问候。

【问题讨论】:

  • 你为什么使用 gzip_static?如果是因为 gzipping 的 CPU 开销太高,那么 ngx_pagespeed 对你的设置来说肯定太贵了。 ngx_pagespeed 比 gzip 增加了相当多的 CPU 使用率。
  • 感谢您的帮助。 CPU 是一个限制,是的,但也是 ec2 机器的网络吞吐量为 30.000 KB/s,所以我需要平衡一些东西。我使用 gzip_static 是为了在不浪费 CPU 的情况下获得最佳压缩级别。我知道 pagespeed 增加了很多 cpu 使用率,但我真的很想优化、组合、缩小我的资产,而且我无法控制源代码。我的问题是 - ngx_pagespeed 正在将我的静态优化资产缓存到 tmpfs。每次用户点击优化的资产,ngx_pagespeed 压缩它?或者它在缓存中保留一个压缩后的资产?
  • 根据我的测试,它应该更快。例如,当用户点击像 [/css/A.print.css.pagespeed.cf.54Itr6v-Y8.css] 这样的资产时,它会直接从 tmpfs 缓存和服务器中获取。但是与提供静态内容的 nginx 相比,吞吐量并没有那么好。因此,自从我对此进行了一些测试和阅读后,我的问题发生了一些变化。当 [/css/A.print.css.pagespeed.cf.54Itr6v-Y8.css] 被击中并且资产在缓存中时,ngx_pagespeed 会做什么?它直接为它服务吗?它会压缩并提供服务吗?它是否保留压缩版本?我对此有控制权吗?
  • 我们不缓存 gzip 压缩的版本(尽管我们已经讨论过这个)。相反,未压缩的资源存储在缓存中并即时压缩。
  • 仅供参考,任何将来阅读本文的人,我都能通过将 Varnish 放在 Nginx 前面来实现我的目标。 Varnish 缓存资产和页面的压缩版本。当优化(我猜是在后台运行)完成时,ngx_pagespeed DownstreamCachePurge 通过发送 PURGE 请求到清漆来按预期工作。现在的表现很棒。最好的问候。

标签: nginx mod-pagespeed


【解决方案1】:

我能够通过将 Varnish 放在 Nginx 前面来实现我的目标。 Varnish 缓存资产和页面的压缩版本。 ngx_pagespeed 下游缓存清除(有关更多信息,请查看 nxg_pagespeed 文档)通过在优化(我猜是在后台运行)完成时向清漆发送 PURGE 请求来正常工作。现在的表现很棒。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-04
    • 2013-08-01
    • 2014-08-29
    • 2014-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多