tools tool developers facebook facebook-graph-api facebook-fql

facebook - tool - Graph API vs FQL que es más rápido?



facebook developers tools (2)

solo me pregunto cuando se trata solo del GET / POST básico. (es decir, algo tan simple como obtener el perfil de los usuarios y no algo complicado como obtener imágenes de cada álbum)

¿Cual es mas rápido? Gráfico o FQL.

Sé que FQL es más nuevo que el gráfico, pero no estoy seguro si es más eficiente.


De ninguna manera es comparable a esto. Si bien puede obtener los mismos datos (en algunos casos) de ambos, sus intenciones son completamente diferentes: FQL es un lenguaje de consulta, Graph es una API.

Llamar a la consulta FQL si usa el nuevo JS SDK es una llamada Graph API en sí misma ...

Puede (y probablemente debería, si se preocupa por la comparación real y no por la especulación teórica) comparar la velocidad de las llamadas que devuelven los mismos datos, pero debe tener en cuenta algunas cosas:

  • Graph API todavía apesta en condiciones de filtrado de datos y agregación de datos
  • FQL simplemente no puede proporcionarle demasiadas funcionalidades requeridas en las aplicaciones actuales (como actualizaciones en tiempo real )
  • Graph API tiene una capacidad de llamadas por lotes , lo que puede acelerar mucho las cosas, esto también se puede usar para llamar a fql.query y fql.multiquery (de una manera algo engorrosa).
  • Graph API rocks en el filtrado de datos con Field Expansion

Considere seguir el ejemplo de la documentación de FQL , subconsulta que recupera toda la información de usuario para el usuario activo y amigos:

SELECT uid, name, pic_square FROM user WHERE uid = me() OR uid IN (SELECT uid2 FROM friend WHERE uid1 = me())

Esto simplemente no es posible de lograr con una sola llamada Graph API. (ver Actualización)

Una vez que haya definido el subconjunto de datos deseado para obtenerlo, puede elegir el método de recuperación apropiado según sus requisitos.

Por cierto, FQL es mucho más antiguo que Graph, lo teníamos aparte para FBML (rip) y FBJS (rip)

Actualizar:

La API de gráficos proporciona un camino para las solicitudes por lotes y especifica las dependencias entre las operaciones en la solicitud. Por ejemplo, se puede obtener la misma muestra que anteriormente en una sola llamada a Graph 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" } ]

Actualización 2:
A partir del 30 de agosto de 2012 Graph API también es compatible con Expansión de campo como mecanismo adicional (muy potente) de recuperación de datos (incluidos los datos anidados)


Ejecuté una prueba simple (obteniendo la identificación de la foto de portada) usando el PHP SDK:

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/>''; }

Resultados:

api del gráfico: 1.28320002556

API gráfica con FQL: 0.744100093842

FQL a través de la API de reposo: 0.544199943542

El FQL básico es mucho más rápido, el FQL a través de la API gráfica está bien, pero la API gráfica es demasiado lenta ... Y obtendrás un montón de cosas inútiles con el API api