使用Node js加载恒定动态图像

时间:2017-12-08 06:05:05

标签: javascript node.js image express sails.js

我们的团队正在开发一个小型的Web /本机Android应用程序,其中Sails.js作为我们的服务器框架。

一个功能需要发送一个非固定数字(10-100之间)的图像,想想漫画阅读器。

我知道我们可以单页浏览并分别请求每个图像,但这似乎会造成数据库访问和用户授权的瓶颈。

有没有办法保持客户端加载图像的持续流?

我应该为每个客户压缩/优化图像吗?

感谢任何建议。

1 个答案:

答案 0 :(得分:1)

如果您显示实际的客户端和服务器代码,我们可以提供更好的帮助。在每个传入请求上授权用户不应该是昂贵的操作。如果是,那么您的代码就会出现问题。

如果您真的试图将100个图像从服务器下载为单独的图像,那么这只需要100个请求,您只需要让服务器真正有效地处理这100个请求(缓存,真正高效的数据库,等等...)。您可以在客户端中并行化请求,因此可能一次下载10个。

在某些情况下,您可以为客户配置使用精灵的内容,其中许多单独的图像组合在一个文件中,并且客户端非常聪明地显示主图像的各个部分以显示许多单独的图像。当图像分组有利于已知并且可以在服务器上预先计算并准备服务时,这是最有效的。如果客户端请求任意一组图像,那么精灵可能不实用。

  

我知道我们可以单页浏览并分别请求每个图像,但这似乎会造成数据库访问和用户授权的瓶颈。

你就是这样做的。您需要使数据库访问和授权非常有效,以便为大量下载查询提供服务。

  

有没有办法保持客户端加载图像的持续流?

您可以对客户端进行编码,以便在任何给定时间保留10个飞行请求,这样您在客户端下载时就会有一些并行性,但不会通过一次发送所有100个请求来超载服务器。

  

我应该为每个客户压缩/优化图像吗?

图像应已被压缩。如果它们是JPEG或PNG,则它们已经被压缩。您可以尝试使用压缩级别来优化压缩。不同的主题可以不同地进行优化,有时可以实现非常高的压缩而不会过度损害图像质量(完全取决于图像主题)。

您当然应该确保图片的大小最佳,这样您就不会下载比客户想要显示的分辨率更高的分辨率。当您真正需要显示1k图像时下载4k图像显然是浪费带宽和下载时间。