Ruby on rails 3 Rails的性能问题:如何发送gzip资产

Ruby on rails 3 Rails的性能问题:如何发送gzip资产,ruby-on-rails-3,performance,angularjs,nginx,gzip,Ruby On Rails 3,Performance,Angularjs,Nginx,Gzip,我在生产环境中使用rails资产管道功能。我在nginx中编写了一些设置,以gzip格式发送文件,并且文件以gzip格式正确发送。我猜浏览器正在自动解码它,因此我无法确定js文件是否以gizp格式提交 我已经输入了以下命令,并且在响应中得到了“contentencoding:zip” curl -v -H 'Accept-Encoding: gzip' -o /dev/null http://www.example.com/assets/style.css 2>&1 | grep

我在生产环境中使用rails资产管道功能。我在nginx中编写了一些设置,以gzip格式发送文件,并且文件以gzip格式正确发送。我猜浏览器正在自动解码它,因此我无法确定js文件是否以gizp格式提交

我已经输入了以下命令,并且在响应中得到了“contentencoding:zip”

curl -v -H 'Accept-Encoding: gzip' -o /dev/null http://www.example.com/assets/style.css 2>&1 | grep -i Content-Encoding
我已经在nginx中编写了以下设置,以发送gzip格式的文件,并且文件正确地以gzip格式发送

location ~ ^/(assets)/  {
        root /home/webuser/app/woa/public;
        gzip_static on;
        expires max;
        add_header Cache-Control public;
        # access_log /dev/null;
        }
我怎样才能知道文件是否采用gzip格式


另外,请建议有助于提高网站性能的任何其他选项。

不是对您的第一个问题的直接回答(如果您解决了,请务必解释),但要提高网站性能,请记住:

80-90%的最终用户响应时间花费在前端。从那里开始

下面列出了Rails应用程序中提高性能的改进领域:

诊断问题: YSlow/Google页面速度 用于识别性能问题的有用诊断工具是或它们是浏览器扩展,用于诊断和识别减慢应用程序速度的常见问题(尤其是在前端)

后端工具 对于Rails后端,我建议将诸如&之类的工具直接合并到您的开发过程中,以便在开发过程中,您可以在仍然易于修复的情况下立即发现错误查询

检查服务器控制台日志 检查服务器日志是诊断Rails应用程序的哪些组件使用时间最长的有效方法。例如,下面是在我的本地开发环境中运行的两个不相关的生产Rails应用程序的示例日志:

# app1: slowish
  Rendered shared/_header.html.erb (125.9ms)
  Rendered clients/details.html.erb within layouts/application (804.6ms)
  Completed 200 OK in 3655ms (Views: 566.9ms | ActiveRecord: 1236.9ms)

# app2: debilitatingly slow
  Rendered search/_livesearch_division_content.js.erb (5390.0ms)
  Rendered search/livesearch.js.haml (34156.6ms)
  Completed 200 OK in 34173ms (Views: 31229.5ms | ActiveRecord: 2933.4ms)
App1和App2都存在性能问题,但App2的性能问题显然非常缓慢。(34秒!)但有了这些服务器日志,我知道对于App1,我应该查看
clients/details.html.erb
,对于App2,我绝对需要调查
search/livesearch.js.haml

提高前端性能 严格控制页面大小 为了保持快速加载时间,您需要减少页面资产(JS/CSS/Images)的数量/大小。所以,像预算一样考虑页面大小。例如,Hootesuite最近宣布他们的主页现在有一个严格的1MB页面大小预算。没有例外

减少页面大小的简单方法包括剥离未使用的JS或CSS文件,只在需要的地方包含它们,以及将静态图像更改为更小的向量

根据屏幕宽度提供较小的图像分辨率 图像加载是页面加载时间缓慢的一个主要原因。在初始页面的背景中使用的5mb大图像可以很容易地缩小到200kb-400kb,并且仍然具有足够高的质量,几乎无法与更高分辨率的原始图像区分开来。页面加载时间的差异将是巨大的

你也应该对用户上传的图片做同样的改进。例如,如果您网站的用户头像大小为50px x 50px,但用户为其头像上传了5mb图像,则您必须以较低的文件大小和分辨率提供图像,以准确适应其在您网站上的显示方式

,和是AmazonS3中常用的gem,用于实现更好的图像加载。有了这些软件包,您可以根据每个用户的屏幕大小动态提供更小的图像分辨率。然后,您可以使用媒体查询,使移动设备获得的图像分辨率比使用视网膜屏幕的用户更小

使用内容交付网络加快资产加载 再加上最后一点,您可以通过使用Cloudfront等内容交付网络(CDN)加快资产/图像加载时间。CDN将资产分布在多个服务器上,然后通过距离发出请求的用户最近的服务器向用户提供资产

指纹静态资产 当对静态资产进行指纹识别时,当用户访问您的页面时,他们的浏览器将缓存这些资产的副本,这意味着下次请求时不再需要重新加载这些资产

将Javascript文件移动到页面底部 放置在页面底部的Javascript文件将在页面加载后加载。如果javascript资产放在页面顶部,则当用户的浏览器尝试加载javascript文件时,页面将保持空白。幸运的是,如果您使用资产管道或使用
javascript\u include\u标记指定javascript文件,Rails将自动将javascript文件放在页面底部

编辑:大多数现代浏览器现在自动优化Javascript加载,所以您可以忽略这个建议

提高后端性能 快,快,快! 在所有后端性能优化中,缓存是产生显著性能提升的最有效方法之一。在高可伸缩性期间,一个良好实现的缓存机制可以极大地减少后端中低效查询的损害。频繁访问但更改相对较少的内容从缓存中获益最大

缓存功能非常强大,在生产环境中,它将上述App2的页面加载时间从34秒缩短到不到一秒。后端上没有任何其他性能增强可以与我们从缓存中获得的性能接近

总的来说,在使用缓存进行性能优化时,先高后低。付出更少的努力,你将获得更大的收获

从高到低,您可以使用的缓存类型有:

  • (不缓存服务器,但涉及用户的浏览器通过rea本地缓存内容。)