我正在创建一个类似Zillow的IOS应用程序。我使用Azure SQL(S-0版本)和C#作为后端。我存储用户数据,包括每个用户的化身和人去过的旅程(另一个表),其中每个用户可以有多个旅行图片。我使用varbinary(max)来存储这些图像类型。因此每个用户实体平均有3张图片。
我的C#app在我的linq-to-sql查询中使用延迟加载检索所有用户及其所有图像和旅行信息和图像。
问题自然是在用户能够在iphone客户端(用Swift编写)中使用它之前加载所有这些日期所花费的时间。最终用户需要所有数据滚动浏览所有这些图像。他首先加载用户,查看他的图像并阅读他,然后向上滚动,看到其他用户去过的旅行。用户只能看到头像然后等待所有行程,例如每次打电话都没有意义。
我应该采取什么策略来减少加载时间!?
到目前为止我的想法:
- 使用Azure Blob存储图像并从我的快速客户端中消费,以查看它是否会更快。我放弃了这个选项,因为文件的检索速度很慢,因为我必须首先从我的C#代码访问图像文件,然后从中创建二进制文件,这样我就可以将它传输到我的iphone客户端应用程序了。
- 使用good ole ADO.NET来最小化额外的linq-to-sql层,而不是使用linq-to-sql。我甚至没有看到太大的差别,甚至没有第二次额外的。
- 通过在where子句中尽可能多地添加来优化我的linq查询,并避免使用循环。使它们成为一个选择语句。 linq-to-sql的查询spat似乎是正确的。它并没有太大变化,因为问题是要检索的额外巨大的二进制文件。
- 我上面已经提到过,使用静默调用,我只加载用户相关的图像,然后当用户看到摘要时,在场景后面我开始加载所有这些行程,但用户将很快需要检查行程。他将面临不得不再次等待看到这些旅行的问题。我将不得不发起新的DB调用,这是昂贵的。非常不受欢迎!
醇>
我应该尝试哪些其他建议?