【问题标题】:Laravel - What is the best way to store images so that images can Load fasterLaravel - 存储图像的最佳方式是什么,以便图像可以更快地加载
【发布时间】:2016-06-29 05:23:34
【问题描述】:

我正在使用 Laravel 制作需要扩展图像上传和图像存储的项目。请告诉我存储图像的最佳方式是什么,以便图像可以更快地加载。

【问题讨论】:

    标签: image laravel


    【解决方案1】:

    存储和加载图像的最快方法是在主内存中。然而,这可能是不切实际的,因为图像是大文件,主内存是有限的,并且在重新启动之间不是持久的。您应该将它们存储在磁盘上。

    我强烈建议不要将图像作为 blob 存储在数据库中。

    【讨论】:

    • 所以我应该存储最小文件系统?而不是将它们作为 blob 存储在数据库中?
    • 解释您的用例。你正在建造什么?
    • 我正在构建一个应用程序,用户可以在其中使用封面照片和个人资料图片制作他们的个人资料,就像 facebook 一样。除此之外,用户将被允许创建一个包含 3 张图片的画廊,他们可以在其中展示他们的 3 张图片。他们可以根据需要创建任意数量的画廊。
    • 那么你绝对想把它存储在文件系统中。
    • 但是与 blob 存储相比,在文件系统中存储如何更快地获取图像?因为来自文件系统和 blob 的图像将来自服务器。
    【解决方案2】:

    不要害怕将图像放在您的文件系统上。将其直接放入数据库是一种不好的做法。它会伤害数据库服务器。而是将图像的路径存储到数据库中。

    如果您真的想提高速度,可以缓存它,或者只使用 CDN。另外,请注意,CDN 在某些地方可能不会真正加快加载速度。

    如果 CDN 服务器仅在美国(例如,只是为了获得想法)并且您在美国很好,它会很快。否则会很慢。

    只有位置也会影响速度,服务器的磁盘速度也会影响速度。如果您的系统在 SSD 上,那也会很快。

    【讨论】:

      【解决方案3】:

      我要做的是将它们存储在磁盘中,并在有人请求它们时使用 Redis 之类的内存数据库将它们缓存在内存中,并在清除每次更新的内存之前给数据库中的图像一个非常小的生命周期再次请求相同的图像(在 redis 中很容易完成),因此最常看到的图像总是被缓存并快速到达用户,但最少使用的图像不使用额外的内存空间。

      如果页面中有一些长滚动,您也可以逐渐加载它们,以便初始反馈更快一些。

      【讨论】:

      • 这实际上取决于存储的图像数量和服务器上的主内存量。 Ram 并不便宜,因此很少推荐使用此解决方案。最终的问题是,额外的性能有多重要,您愿意为此付出多少?
      • 如果他有 4GB 的内存,假设他的内存中没有操作系统或任何其他开销,他只能存储 4000 个 1MB 的图像。这不应该被认为是一个可行的解决方案,除非您存储的图像数量非常少且永远不会增加。
      • 这就是为什么我说他应该给数据库中的密钥一个生命周期,定期看到这 4000 张图像的机会是极不可能的,如果你有大量用户需要为了让它们不断地在记忆中存活,你可以买得起更多的 ram。键的生命周期很短,因此几乎一直只缓存真正流行的图像。
      猜你喜欢
      • 2013-08-10
      • 2013-05-23
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      • 2023-03-15
      • 2012-11-17
      • 2019-02-13
      • 1970-01-01
      相关资源
      最近更新 更多