0

我正在尝试使用 facebook FQL 从用户的新闻提要中获取前 50 个帖子(朋友的帖子),以及每个朋友的个人资料信息。我有两个查询,总共需要 10 秒的处理时间:

SELECT actor_id, message FROM stream 
  WHERE filter_key IN 
     (SELECT filter_key FROM stream_filter WHERE uid= me() AND type='newsfeed') 
  AND actor_id in (SELECT uid2 FROM friend WHERE uid1 = me()) 
  LIMIT 50

即使消息是“”,此查询也会返回用户(我找不到 NOT 运算符来过滤掉以“”作为消息的行)

第二个查询:

SELECT pic_big, name,url from profile WHERE id IN 
  (SELECT actor_id, message FROM stream WHERE filter_key IN 
    (SELECT filter_key FROM stream_filter WHERE uid= me() 
    AND type='newsfeed') 
  AND actor_id in (SELECT uid2 FROM friend WHERE uid1 = me())) 
  LIMIT 50

我尝试了其他方法来获取数据(更快),但是它以随机顺序返回它(facebook 不保证数据以它进入的方式出现)。

我可以在我的网站上放置一个“加载”动画,但我不想这样做,因为我认为这可以优化但我不确定如何。

过去,我使用图形 api,但我必须自己处理结果,而且效率非常低(需要 30 多秒)。

4

1 回答 1

1

对于这两个查询,您应该能够通过将它们组合成一个多查询来加快速度,特别是因为您的第二个查询包含您的第一个查询。这是最复杂的,如果您在单独的 API 调用中发送它们,Facebook 必须执行两次。

{
 'q1':"SELECT actor_id, message FROM stream 
        WHERE filter_key IN 
         (SELECT filter_key FROM stream_filter WHERE uid= me() AND type='newsfeed') 
          AND actor_id IN (SELECT uid2 FROM friend WHERE uid1 = me()) 
        LIMIT 50",
  'q2':'SELECT pic_big, name, url, id FROM profile WHERE id IN 
         (SELECT actor_id FROM #q1)'
 }

当我在 Graph API 资源管理器中运行它们时,您的两个查询需要 4072 + 1304 = 5376 毫秒。多查询需要 3475 毫秒。通过运行两个单独的查询消除了网络延迟,这应该会大大加快您的应用程序的速度。

AND strlen(message) > 0您可以通过添加到WHERE第一个查询的部分来过滤掉空白消息。

您可以使用ORDER BY column强制以特定顺序返回数据,但不能保证您将获得结果中的所有行。

于 2012-08-13T17:14:12.760 回答