只是想知道什麼時候談到基本的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必須有良好的緩存策略才能加快速度。 –