当您谈论使您的应用程序“快速”时,请注意“快速”可以表示“高吞吐量”或“低延迟”,两者之间存在很大差异。最好为延迟(应为每个用户提供服务的速度)和吞吐量(每单位时间应该能够服务多少用户)设置性能目标。
如果从 FB/LinkedIn 获取数据是吞吐量的瓶颈,
- 使用批处理请求。
- 如果可以重复使用相同的数据,请尽可能多地缓存它,并尽可能长时间地缓存它。
- 确保您的应用程序能够并行发出许多请求。由于通过网络发送查询是一种高延迟操作,因此您可以通过这种方式获得大量吞吐量。
如果从 FB/LinkedIn 获取数据是延迟的瓶颈,
- 同样,在本地缓存尽可能多的数据。
- 如果可以“猜到”很快需要哪些数据,请预先获取它。(例如:如果您的用户必须填写一个大表单然后提交,但该表单中有一个关键字段标识您需要的数据,您可以使用 AJAX 使页面尽快发送该字段它被填写,而不是等待整个表单被提交!)
- 如果您需要多条数据来为单个用户提供服务,请不要使用多个顺序请求来获取它们——要么使用批处理请求,要么使用多个并行请求(可能两者兼而有之)。
- 当需要让用户等待时,“分散”他们的注意力——尽你所能让等待看起来更短。
- 如果页面的某些部分可以在没有 FB/LinkedIn 数据的情况下呈现,请先将这些部分发回,并在数据准备好时使用 AJAX 调用填充其他部分。
如果您绝对必须拥有来自 FB/LinkedIn 的数据 XYZ 才能为用户提供服务,并且单个 API 请求的延迟是 N 秒,并且您为每个用户提供服务的目标最大时间是 < N 秒,那么您可以达到您的唯一可能的方式目标是通过预取数据。也许当您看到用户的第一个页面请求进入(例如主页)时,您可以开始将该用户所需的所有数据加载到缓存中(如果它不存在的话)。
无论您做什么,我都建议您将 FB/LinkedIn 数据访问代码封装在“数据访问层”中。缓存应该严格地发生在数据访问层内部——应用程序代码不需要知道缓存。是否使用批处理调用,是否并行发出多个调用也是一个实现细节,应严格保留在数据访问层内部。