Cloudinary、Imgix等服务的效率

22

我想建立一个类似亚马逊、eBay、flipkart等网站,它需要大量图片和图像操作。有人建议我使用Cloudinary、Imgix等服务来调整我的图片大小,因为只需存储每个图像的一个版本,尽管我需要不同大小的几个版本。我想知道这些服务的效率如何?是否存在任何问题?我希望我的网站非常快速和响应迅速。我听说了一些关于性能问题的担忧,例如:“请考虑你至少会将传输延迟翻倍,这往往会占用完成图像操作所需的时间。”

正常情况:终端用户->您的用户->终端用户

通过这些服务:终端用户->您的用户->您->您的用户->终端用户


我们(pricejugaad.ae)最近几个月一直在使用imgix服务。最开始它运行得很好,但随着时间的推移,我们的团队遇到了太多问题,比如找不到图片等。imgix客户服务根本不好,我向他们发送了超过10封邮件,周转时间大约超过10天,但问题仍未解决。各位,请告诉我是否有其他替代服务。Cloudinary好吗? - Swamy
我们已经迁移到Cloudinary。到目前为止,它的表现良好,并且也很友好地支持SEO。 - Swamy
6个回答

48

(免责声明:我在imgix担任开发者关系,将根据我们的技术栈回答这篇文章)

您说得非常正确,对于一个完全未缓存的图像,需要更多的“跳跃”来提供图像。 对于第一个查看图像的用户,这可能会导致稍微增加延迟。 但是,之后,该图像将由我们的渲染集群和全局CDN缓存,这使得基于原始图像的任何图像的后续请求速度更快。 无论如何,通过向浏览器提供正确大小的图像所节省的字节几乎总是超过了开始请求图像时产生的任何额外延迟。

这里是一个简单的图示,展示了图像尚未被缓存时的流程:

                      ┌─────────────────┐  4. Origin responds
                      │   Your Origin   │  with full-size
                      │ (S3/web folder) │  `dogs.png` image.
                      └─────────────────┘
                        ▲             │
                        │             │
                        │             │
                        │             ▼
      3. Image is not ┌─────────────────┐  5. imgix caches the
cached at imgix, send │      imgix      │  full-size image, then
request to origin for │                 │  resizes it to 300px
           `dogs.png` └─────────────────┘  wide and caches that
                        ▲             │    derivative.
                        │             │
                        │             ▼
      2. Image is not ┌─────────────────┐  6. The imgix CDN
       cached at CDN, │ imgix CDN (edge │  caches the 300px wide
     forward to imgix │nodes worldwide) │  variant and serves it
   rendering cluster. └─────────────────┘  to the browser.
                        ▲             │
                        │             │
                        │             │
                        │             ▼
  1. Browser requests ┌─────────────────┐  7. The browser
     `dogs.png?w=300` │ User's Browser  │  receives and renders
                      │                 │  300px wide `dogs.png`.
                      └─────────────────┘

一旦图像被缓存(在单个用户请求后),循环变得更加紧凑:

 2. The imgix CDN has ┌─────────────────┐
 this variant cached, │ imgix CDN (edge │
 and serves it to the │nodes worldwide) │
             browser. └─────────────────┘
                        ▲             │
                        │             │
                        │             │
                        │             ▼
  1. Browser requests ┌─────────────────┐  3. The browser
     `dogs.png?w=300` │ User's Browser  │  receives and renders
                      │                 │  300px wide `dogs.png`.
                      └─────────────────┘

在我们的渲染集群中缓存原始图像后,生成派生版本也会更快(在此情况下,是 600 像素宽度的版本),因为它们不需要额外的访问您的起源服务器:

3. Full-size image is ┌─────────────────┐  4. imgix resizes the
    already cached at │      imgix      │  cached full-size image
     imgix, no origin │                 │  to 600px wide and
      request needed. └─────────────────┘  caches that
                        ▲             │    derivative.
                        │             │
                        │             ▼
      2. Image is not ┌─────────────────┐  5. The imgix CDN
       cached at CDN, │ imgix CDN (edge │  caches the 600px wide
     forward to imgix │nodes worldwide) │  variant and serves it
   rendering cluster. └─────────────────┘  to the browser.
                        ▲             │
                        │             │
                        │             │
                        │             ▼
  1. Browser requests ┌─────────────────┐  6. The browser
     `dogs.png?w=600` │ User's Browser  │  receives and renders
                      │                 │  600px wide `dogs.png`.
                      └─────────────────┘

没问题,很高兴能帮到你!如果你对图像处理服务或响应式图片有其他问题,尽管问我,我会尽可能地帮助你。 - Paul Straw
很好的解释。我们(pricejugaad.ae)正在使用imgix服务,并在缓存方面遇到问题,将这些问题带给了你们的团队,但他们到目前为止还无法解决。我不确定imgix是否存在任何限制。 - Swamy
很好的解释!谢谢!只是想知道处理原始图像的性能/延迟如何?比如从5000像素宽度缩小到500像素? - chh

7
我已经使用imgix一年多了。我认为通过专业的图像服务器托管图像比通过您自己的服务器托管要好得多。
高性能
1- 正如Paul Straw所说:Imgix有适当的缓存策略。它不会增加加载图像的延迟。它甚至会减少延迟,因为它不会每次页面加载时都获取主图像。它从缓存中获取图像。
2- Cloudinary和imgix都使用广泛且快速的CDN。因此,需要下载图像的用户可以从距离他位置更近的CDN边缘获取文件。因此,延迟将减少,下载速度更快。
3- 为给定设备提供正确的图像尺寸(或尽可能接近)是确保图像不会对页面加载时间产生负面影响的最佳方法。即使实际大小和期望大小之间存在微小差异,也会显著增加文件大小。图像托管服务的最基本功能是根据需要即时调整图像大小以适合任何设备。
除了这些服务的高性能外,我还看到了其他一些好处,其中我在此提到其中的一些:
响应式图像
现在许多网站所有者、销售和营销主管等都关注许多营销方面。他们精心挑选图片,以便将用户转化为购买者或在其网站中达到特定目标。虽然为不同屏幕调整图像大小可能足以实现响应式设计,但这对于提高网站的转化率来说还不够。有时您需要裁剪图像以进行调整大小。使用图像托管服务,您可以选择确切的裁剪位置,决定哪部分图像对于营销目的是必要的,并且哪些部分可以被裁剪。使用这些服务,您可以即时控制所有这些内容,而无需使用Photoshop并离线准备多张图片。 Retina支持 大多数图像在普通屏幕上可能看起来很好,但当您在高密度屏幕(例如Apple Retina或某些Android设备)上查看它们时,它们可能并不好。设备像素比用于轻松地在设备独立像素和设备像素之间进行转换。这使得在各种设备上正确显示图像的像素密度成为可能,例如Apple Retina显示器和Android设备。在imgix中,如果屏幕支持高密度图像,则可以选择加载具有更高DPR的图片。您可以使用srcset标签实现这一点。在此处阅读更多

即时图像处理

您想对图片进行的所有操作都可以在即时处理中完成。您不需要使用Photoshop进行小型图像处理,这会显著降低设计速度。

更好的SEO排名

图像大小是页面加载速度的重要贡献者,而页面加载速度又是确定页面搜索结果排名的关键指标。减小图像大小可以大大改善您的排名,特别是如果您可以让完整页面加载速度低于许多用户开始因为耐心不足而退出的阈值。


3
图片大小如何影响“第一字节时间”?在HTML文件下载并解析完成后,浏览器会请求图片等其他资源。图片越大,需要下载和传输的数据量就越大,因此会增加“第一字节时间”。 - Jarrod Mosen

4

[声明,我是提供ImageEngine服务的公司的CTO]

在这里提到我们自己的ImageEngine。ImageEngine与其他被OP提到的解决方案处于完全相同的领域,但有一些额外的优势:它的CDN从头开始就考虑了移动优化问题。除了桌面浏览器外,ImageEngine的边缘服务器可以准确检测屏幕大小、分辨率和支持的图像编解码器,并相应地优化图像。这得益于WURFL,这是Facebook和Google采用的同一设备检测解决方案,这对附加的优化(可达80%的带宽节省)和减少CDN账单至关重要。我们称这个概念为“智能字节”。

另一个重要的区别在于易于集成。ImageEngine不需要组织将图片上传到任何地方。这对于处理遗留图片的公司非常有用。虽然ImageEngine允许通过URL参数指定如何优化给定的图像,但它也支持“自动模式”,即ImageEngine将从原始网站检索图像(无需将图像托管在其他人的服务器上),并根据设备检测组件和客户端提示自动优化图片到最佳格式。例如,支持.webp的设备和浏览器将得到.webp。客户只需在其现有站点之前激活ImageEngine,就可以实现不需要额外调整的魔法。目前的客户(特别是电子商务)非常喜欢这个功能。


3

在工作中,我们使用了多种方法来优化图片:

  • 通用的流水线图像优化,例如grunt插件。
  • 让客户的设计团队使用图片优化应用程序。
  • 我们还在许多网站上使用Cloudinary。

方案通常因客户成本和预算而异,但我们发现Cloudinary实际上更便宜,特别是对于那些不想让我们或他们内部团队花时间进行图片优化,只想专注于功能的客户。

通过将图片和视频转移到Cloudinary,我们有更多的时间专注于改善网站、AB测试和其他收入产生活动。由于缓存和CDN的存在,传输延迟并不是一个大问题,这是为了节省数小时/数天的时间去专注于产品开发和业务发展所需要支付的一小笔代价。
您应该计算出自己的时间价值,并思考如果将其用于其他事情,您可以赚取多少更多的钱。您会尝试什么其他事情呢?


我很好奇,为什么要使用图像管道和其他图像优化以及Cloudinary?你说使用Cloudinary可以节省时间,但是你正在执行他们所做的所有图像优化,那么为什么还要使用Cloudinary呢?如果有原因的话,我真的很好奇。 - Hashim Aziz

0

只加载所需大小的图像绝对有优势。最大的好处将是加载时间。我们都知道用户不喜欢等待页面加载。因此,如果您有多个副本或根据屏幕大小压缩所有图像,则会提供更好的用户体验。Google还基于加载时间进行搜索显示,其中图像大小起到作用。我还建议使用提供图像CDN服务的服务,以便您可以利用缓存。


0

作为这些服务的用户并考虑到你的问题是关于这些服务中出现的任何问题,请参考以下要点。

这些服务在缓存图像方面进行了优化。当您上传图像时,它们会同时创建不同尺寸和转换的版本,并将其中一些缓存到最近的服务器上,以便下次请求时能够快速查看。
您可以指定要缓存的默认大小。例如,在您的服务器上,您将上传三个版本的图像:200x200用于移动缩略图,300x300用于平板电脑缩略图,400x400用于桌面。通过上传图像到这些服务器,它们可以在毫秒内调整大小并分发到多个缓存服务器中,从而节省时间。
您可能会遇到的问题是,如果您经常更改图像,则这些服务将需要缓存清除或更改URL等才能获取最新版本。您必须等待缓存过期等。然而,根据我的使用情况,通过在各种设备上加载图像所获得的好处远远超过了清除缓存的努力,大多数这些服务都提供了方便的方法来解决这个问题。
这些服务可以减少服务器上的空间占用,而且大多数情况下,与存储图像和服务代码一起的成本相比,使用它们来托管图像的成本要便宜得多。如果您上传高分辨率或大尺寸的图像,则差异是显著的。例如,在Web托管机器或存储Blob上存储500GB的图像,其成本是其中一个服务的4倍。备份和版本控制是这些服务提供的另一个好处。
如果您实现了一个不错的图像上传/查看/标记/删除策略,那么随着时间的推移,使用任何这些服务都可以节省大量时间和金钱。我建议寻找适合您用例的服务。例如,您可能还想使用CSS / JS缓存,或者您可能希望将图像用于私人用途,或者您想要视频上传,或者您想在项目中进行对象识别。有很多选择,只需要花时间研究哪个最好。
您所提到的“双倍延迟”问题是错误的,因为它们假设所有的调用都会命中您的服务器。这些图片服务提供了一个可以直接命中他们服务器或者更好的本地缓存版本的URL。他们处理了许多您可能尚未考虑的问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接