【问题标题】:Google Cloud Storage requests are slow using Paperclip and Rails使用 Paperclip 和 Rails 的 Google Cloud Storage 请求很慢
【发布时间】:2016-12-09 13:51:24
【问题描述】:

我有一个使用 Google Cloud Storage 存储图像的 Rails 应用程序。每个视图大约有 8 张图像,当用户尝试加载页面时,由于对 GCS 的请求,需要 5 秒以上才能完成。

Paperclip 使用以下配置发出请求:

config.paperclip_defaults = {
  storage: :fog,
  fog_credentials: {
    google_storage_access_key_id: myAccessKey,
    google_storage_secret_access_key: mySecretKey,
    provider: 'Google'
  },
  fog_public: true,
  fog_directory: 'mybucket'
}

在我看来,我这样称呼每张图片:

<%= image_tag myAsset.image.url %>

有没有更快的方法来达到同样的效果?

在我看来,延迟加载是一种解决方法,而不是一种解决方案,我错了吗?

Here New Relic 臭名昭著的分析(绿色属于 Google Cloud Storage 请求)

【问题讨论】:

  • GCS 资源有多大?只是一张图吗?存储桶的类是标准、DRA 还是近线?
  • 每个视图有大约 8 个图像,每个图像大约 300kb。那么这个桶就是一个标准的了。
  • 所以如果加载图像需要 5 秒,并且页面上有 8 300kb 图像,那大约是 480kbps。有很多互联网用户的互联网速度被限制在这个范围内。您知道相关用户的互联网速度有多慢吗?
  • 我认为我无法获得用户的互联网速度。无论如何,此时延迟加载是加快页面加载时间的唯一解决方案,不是吗?
  • 或者,先加载较小版本的图像,然后延迟加载实际图像。

标签: ruby-on-rails performance paperclip google-cloud-storage


【解决方案1】:

是否每次都从后端提取给定请求的图像?如果是这样,请为图像使用缓存,这样您就只需要在第一个请求上花费时间。甚至可能在用户身份验证后开始将图像拉入缓存 - 像您建议的那样延迟加载。

【讨论】:

  • 嗨@melgart,我发现速度慢是由于回形针及其生成网址的方式。你可以在这里找到更多:github.com/thoughtbot/paperclip/issues/2337
  • 不错!感谢您将这些知识带回这里,每个人都可以看到您的解决方案。您以后可能会节省几个小时的查找时间。
【解决方案2】:

我不能说这一切都解决了,但至少它加快了速度。

fog_host 似乎避开了网络请求。

# config/application.rb
module Parasite
  class Application < Rails::Application

    config.paperclip_defaults = {
      fog_host: 'http://mybucektname.storage.googleapis.com',
      # ... other options
    }

  end
end

如果你想了解更多,请查看the code 或我在Paperclip Github Page 上打开的这个帖子。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-18
    • 1970-01-01
    • 2020-06-03
    • 1970-01-01
    • 2018-04-20
    • 2021-03-22
    • 1970-01-01
    相关资源
    最近更新 更多