只是想知道什么时候谈到基本的GET/POST。 (即获得用户个人资料简单而不像从每张专辑中获取图片那样复杂)Graph API vs FQL哪个更快?
哪个更快? 图表或FQL。
我知道FQL比图更新,但不确定它是否更有效。
只是想知道什么时候谈到基本的GET/POST。 (即获得用户个人资料简单而不像从每张专辑中获取图片那样复杂)Graph API vs FQL哪个更快?
哪个更快? 图表或FQL。
我知道FQL比图更新,但不确定它是否更有效。
这绝不是这样的可比性。虽然您可以从 中获得相同的数据(在某些情况下),但它们的意图完全不同:FQL是查询语言,Graph是API。
如果采用新的JS SDK是一套图形API调用本身调用到FQL查询......
可以(并且可能应该,如果你担心真正的比较,而不是理论推测)比较调用返回相同的速度数据,但是,你应该考虑一些事情:
Field Expansion
数据过滤
SELECT uid, name, pic_square FROM user WHERE uid = me()
OR uid IN (SELECT uid2 FROM friend WHERE uid1 = me())
这根本不可能实现只需一个Graph API调用。
(请参阅更新)
一旦您定义了所需的数据子集,以便您可以根据您的要求选择合适的检索方法。
BTW,FQL比图大年纪了,我们必须让它在一边FBML(RIP)和FBJS(RIP)
更新:
Graph API为Batch Requests提供方式和操作之间的指定依赖请求。例如相同的样品如以上可在单个呼叫来实现图形API
POST https://graph.facebook.com/
POST Data:
batch=[
{
"method": "GET",
"name" : "get-friends",
"relative_url": "me/friends?fields=id",
},
{
"method": "GET",
"relative_url": "?ids={result=get-friends:$.data.*.id}&fields=id,name,picture"
}
]
更新2:
截至2012年8月30日图形API也支持Field Expansion作为附加(非常强大的)数据的机制检索(包括嵌套数据)
这个例子不好,因为你可以用图形调用来做到这一点。但仍然是货物。唯一缺少的是您可以使用图形API进行批量请求,这可以在某些情况下提高速度。 – bkaid
您可以通过**两个**图表调用,一个获取朋友ID列表,第二个返回所需的数据集。我同意这个例子在现实生活中几乎没有意义(当前用户的名字和ID可能是你已经拥有的东西,a)nd pic_square可以模仿http://graph.facebook.com/USER_ID/picture?type=正方形) –
您可以执行批处理图形调用(最多可将50个图形调用合并为一个),甚至可以引用其他每个结果。非常接近multiquery,呵呵。实际上,批处理图形调用可以包括FQL查询。 https://developers.facebook.com/docs/reference/api/batch/ – nisc
我跑使用PHP SDK一个简单的测试(获得封面照片ID):
public $microtime_start = 0;
public function getExecutionTime() {
return round(microtime(true) - $this->microtime_start, 4);
}
public function getFQL($request, $filter = true, $multiFilter = true) {
if(is_array($request)) {
$query = '{';
foreach ($request as $key => $q) {
$query .= '"'.urlencode($key).'":"'.urlencode(addslashes($q)).'",';
}
$query = substr($query, 0, -1).'}';
$data = $this->callAPI('/fql?q=' . $query);
if($filter) {
$data = $data['data'];
if($multiFilter) {
$data = $data[count($data)-1]['fql_result_set'];
}
return $data;
}
} else {
$data = $this->callAPI('/fql?q=' . urlencode($request));
if($filter) {
return $data['data'];
}
}
}
public function callAPI($path) {
$params = array('access_token' => $this->getAccessToken());
return $this->api($path, 'GET', $params);
}
public function getCoverPhotoId($uid) {
$time = $this->getExecutionTime();
$albums = $this->api("/me/albums");
$album_id = "";
foreach ($albums["data"] as $item) {
if ($item["name"] == "Cover Photos") {
$album_id = $item["id"];
$profile_picture_id = $item["cover_photo"];
break;
}
}
$time2 = $this->getExecutionTime();
echo 'graph api: '.($time2 - $time).'<br/>';
$data = $this->getFQL(array(
'query1' => 'SELECT cover_object_id FROM album WHERE owner = ' . $uid.' AND name = "Cover Photos"'
));
$time3 = $this->getExecutionTime();
echo 'graph api with FQL: '.($time3 - $time2).'<br/>';
$data = $this->api(
array(
'method' => 'fql.query',
'query' => 'SELECT cover_object_id FROM album WHERE owner = ' . $uid.' AND name = "Cover Photos"'
)
);
$time4 = $this->getExecutionTime();
echo 'FQL via rest api: '.($time4 - $time3).'<br/>';
}
结果:
图形API:1.28320002556
与FQL图形API:0.544199943542
基本FQL快得多,通过图形API的FQL是确定的:0.744100093842
通过REST API FQL ,但图api waaay太慢...而你会得到一堆无用的东西与图api
不是一个真正的答案,但我认为netwo的延迟与CPU处理的延迟相比,rk更受关注。 Facebook必须有良好的缓存策略才能加快速度。 –