Rails 4 - 有没有办法压缩大图像以使它们加载更快?

时间:2015-10-05 19:59:23

标签: ruby-on-rails ruby image caching assets

在Rails 4应用程序中,我们的主页上有一些大图像(尺寸类似于宽度为2400像素),当然,它们的加载速度非常慢。

加快加载速度的选项有哪些?一种方法是降低其质量=>他们的尺寸=>加载速度更快。

但Rails是否有预先缓存/压缩它们的方法?

谢谢。

3 个答案:

答案 0 :(得分:2)

没有" Rails方式"去做这个。无论您使用何种框架/语言,这都是一个问题,最好用content delivery network (aka CDN)

解决

答案 1 :(得分:1)

一个好的做法是在最终提交到代码库之前通过ImageOptim运行所有图像。此工具执行无损压缩,这意味着像素不会发生变化,但仍会缩小文件大小。

那不是" Rails"解决方案,但这是我知道减少文件大小的最佳方式(通常大约10%),而不会牺牲任何质量。

答案 2 :(得分:1)

为了让googler对此有所了解,以下是事实:

  • 使用 assets
  • 实现此功能没有核心Rails功能
  • 通过上传图片实现目标的方法

您遇到的问题是,由于资产是手动添加到Rails的,因此您无法执行pre-processing。如果您想针对不同的环境优化图像,则必须创建不同的图像分辨率,然后使用一些逻辑来定义它们:

<h1>Cute Animals & <br> 
Monster Vehicles</h1>

<div id="gallery">

   <div class="brick">
      <img src="http://drive.google.com/uc?export=view&id=0Bwx-OwnNeIvwaFZXVzVmMl9ILUU">
   </div>

   <div class="brick">
      <img src="http://drive.google.com/uc?export=view&id=0Bwx-OwnNeIvwVk1DTEpnR0J6VHc">
   </div>

   <div class="brick">
      <img src="http://drive.google.com/uc?export=view&id=0Bwx-OwnNeIvwblBHLVEza0hxY2s">
   </div>

 <!-- and so on ... -->

</div>

然后,您就可以使用辅助方法来定义所需的图像:

- assets 
-- images
--- backgrounds
---- original.jpg
---- medium.jpg
---- small.jpg

参考:Get file name and extension in Ruby

这将允许您致电:

#app/helpers/application_helper.rb
class ApplicationHelper
   def size size, image
      assets_path("#{File.basename(image)}/#{size.to_s}#{File.extname(image)}")
   end
end

如果你想让它变得动态,你必须使用CSS并设置背景图像,相应的<%= image_tag size(:original, "backgrounds.jpg") %> 查询根据需要分配不同的图像。

如果您正在谈论上传的图片,那么您最好先了解Paperclip如何做到这一点:

  必须安装

ImageMagick 并且Paperclip必须能够访问它。要确保它在您的命令行上运行哪个转换(ImageMagick实用程序之一)。

Paperclip使用ImageMagick将图像分割成不同的大小。然后将它们存储在@media文件夹中,这就是您在使用时调用/public/system的原因。

我上面描述的基本上是Paperclip的工作方式,除了自动使用ImageMagick制作不同的图像尺寸