【问题标题】:Best Practice for delivering 10 base 64 images交付 10 个 base 64 图像的最佳实践
【发布时间】:2011-09-20 09:11:55
【问题描述】:

我正在开发一个 phonegap 应用程序,该应用程序的一部分是大约 10 个经过 base64 编码的图像,每个用户大约每周下载一次(现在有 100 个用户,希望增长很多) 我的服务器很慢,我也在努力,所以这些图像的传递很慢。 我的问题是: 在 php 和服务器方面,一次生成这些 base64 图像并将其保存到数据库并根据请求从数据库中获取图像或每次请求图像时对图像进行 base64 编码会更快吗?

感谢您的帮助。

【问题讨论】:

    标签: php mysql cordova base64


    【解决方案1】:

    base64 编码图像并存储编码会绝对更快。

    这是一个经典的内存与速度权衡,您可以支付较低的计算成本,以获得更高的内存成本。在这种情况下,这意味着存储 更多 数据(8/7 如果仅保留编码版本,则多 8/6,如果保留原始版本,则多 2 倍也)。

    您可以做的最好的事情是将图像保存在内存中,因为这样可以避免访问磁盘的成本。您可以使用shared memory functions 来执行此操作,或者通过滥用会话变量并分配固定的会话 ID 来检索内容。

    【讨论】:

    • Base 64 是原始数据大小的 8/6,因为它将 6 位映射到 8 位(不是 8/7)
    • 或“只是 memcached”——尽管应该对原始方法和解决方案进行基准测试。 base64 是一种 fast 算法,所以我相信问题出在其他地方。
    【解决方案2】:

    在不知道您的应用程序的详细信息的情况下,在我看来,只有 10 个图像的数据库是多余的。在慢速服务器上运行 db 的额外开销可能会扼杀您从使用 base64 编码获得的任何好处。

    我会将 base64 编码的图像存储为文件而不是数据库,以便您的网络服务器可以将它们直接提供给客户端。

    如果客户端可以处理,我还会确保您可以交付 gzip 压缩的数据,因为 base64 数据压缩得非常好。这将大大减少到您的服务器的流量。见this

    【讨论】:

    • +1 建议使用 FS(并让服务器来做这件事):但在这种情况下,将发送实际图像(而不是用于发送嵌入在毫升)。
    【解决方案3】:

    在您的服务器受限于处理器之前,您很可能会受限于带宽。我的想法:

    • 不要发送 base64 编码的图像。而是发送正确压缩的二进制数据。
    • 除非需要,否则不要更新客户端(即,如果没有更新的图像可抓取,则不要抓取图像)。使用 304 标头和相关来跟踪。
    • 一旦情况开始恶化,请使用 memcache/Redis 而不是数据库来存储“预先消化”的图像数据。

    【讨论】:

    • +1 我非常喜欢使用 HTTP 协议。还有 ETag,在这里可能很有用。
    猜你喜欢
    • 1970-01-01
    • 2011-03-13
    • 2014-05-23
    • 1970-01-01
    • 2010-10-18
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 2015-05-30
    相关资源
    最近更新 更多