现在我想制作应用程序来显示来自服务器的图片。但是发现让图片出来的速度太慢了。有什么方法或代码可以使http请求更快吗?
1 回答
从不同的角度解决问题。将其视为熵/经济事物。
您所描述的问题中有两个遥远的点,他们想在它们之间传输数据。可以说,在理想条件下实现这将花费 100 个单位。再次假设不可能进一步降低此成本。这个成本是转移所需能量最小的地方
现在假设传输率不受我们控制。以下是一些理论上的“看似”改进,实际上只是不同的权衡集。
前向缓存/缓存:尽可能预加载/下载所有图像,以便在用户请求时准备好。首次安装时安装所有静态文件。
权衡:您将 100 分中的大部分都花在了磁盘空间和预处理能力上,这可能会使您的应用程序运行速度总是慢一些,但是一旦将它们加载到磁盘上,性能就会很好。随着您想要的图像频繁更改,效果会降低
压缩/映射:如果您的瓶颈在于传输速率,请尽可能多地压缩/映射图像,以便以低成本传输它们,但是当它们到达应用程序时,您将使用大量处理器能力。
权衡:CPU 功率的使用比以前更多,但在传输过程中它们会快速移动。压缩的一方使用更多的内存,而解压缩的一方也使用更多的内存和 CPU。仅当您的图像移动缓慢时才好,因为它们很大,那么您将看到这种权衡的好处。如果您想尝试这个安装 7z 并检查高级压缩设置并尝试非常大的地图。
绘图算法:如果您的图像是绘图而不是位图/真实图片。仅发送矢量图形格式,将您的所有图片(技术上的光栅图像)更改为矢量图像。将大大减少将图像传输到应用程序的字节数,但最终需要更多的处理器能力。
权衡取舍:除此之外,并非所有图片都可以转换为矢量图形。您将使用更多的 CPU 和内存,但是已经内置了非常优化的优秀库。您也可以将其视为“数学压缩”,其中一条无限线不能存储在宇宙中的任何计算机中,一个简单的单线数学表达式(例如 x = y + 1)将使其发生。
编写自己的服务器:如果您确定瓶颈在于与服务提供商的通信时间(在这种情况下,可能是非常高效的 http 服务器)。编写您自己的服务器,它会非常快速地回答您并开始发送文件。这种改进的可能性很低,甚至无法谈论权衡。
永远不要被迫发送重复信息:以这种方式设计和标记您的信息和图片。您将只发送非重复块,接收方将存储接收到的任何块以进一步改进其信息缓存。
权衡:1,2 和 3 的组合你这只是另一种令人不安的 100 点成本。你明白了。
BitTorrent理念:如果瓶颈是您的服务器带宽,那么有一个简单的公式可以查看使用您的用户带宽是否合乎逻辑并产生积极影响。同样,它可能仅在您的数据集非常大时才有效。
权衡:这是一个讨论权衡的有趣选项。您将使用您的用户带宽和邻近度来弥补您的服务器带宽不足。与传统的数据获取方式相比,它需要更多的 CPU(维护更多的 TCP 连接)
作为结束语:不可能有一个函数调用可以提高传输信息的成本,并使传输信息的成本从 100 点提高到 95 点。在目前的技术水平上,我们似乎真的很接近有效地转移。我的意思是压缩、映射和其他各种技术都非常成熟,包括网络传输方法,但总有改进的余地。例如,目前我们认为以光速发送数据是绝对最大值,因为它们是电信号,但量子纠缠观察技术否认了这一限制,理论上两个纠缠粒子在宇宙中以无限速度发送和接收信息(??)。此外,如果你能开发出一种更好、更有效的压缩方式,那将是很棒的。
无论如何,正如您提出的一个问题,该问题没有提供太多我们可以讨论的信息。我强烈建议像工程师一样思考,创建一个测试环境,指出主要原因并用你所拥有的一切来攻击它。如果你能用更好的数学表达式来定义问题或指出瓶颈,我们就能比一般信息论更好地回答它。
还有最后一点。我并不是说信息传输不会变得更有效率,它明天可能会上升 1000%,我只是说这个领域已经非常成熟,可以在不从事数学和理论多年的情况下获得任何巨大的改进。像任何其他研究领域一样。