我正在尝试使用Facebook FQL从用户的新闻Feed获取前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秒)。
答案 0 :(得分: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 = 5376ms。多重查询需要3475毫秒。运行两个单独的查询可以消除网络延迟,这可以大大加快您的应用程序。
您可以通过将AND strlen(message) > 0
添加到第一个查询的WHERE
部分来过滤掉空白消息。
您可以使用ORDER BY column
强制按特定顺序返回数据,但无法保证您将获得结果中的所有行。