Velocizzare le proprie applicazioni su facebook

admin
7 Min Leggere
Facebook Apps

In molti mi chiedono come fare a velocizzare le Applicazioni Facebook che, tra chiamate API e server lenti, possono risultare davvero poco performanti.

Se la mia prima risposta è “Trovati un ottimo server con dei buoni tempi di risposta”, d’altra parte ci sono anche numerosi accorgimenti che si possono applicare per aumentare le performance della propria Applicazione.

Vediamo quali.

1. Usa i tag FBML o XFBML

Utilizzare tag FBML o XFBML come <fb:name> velocizza la tua Applicazione, rispetto ad effettuare chiamate lato server. Sì, perchè Facebook ottimizza le chiamate in modo che tutti i dati necessari per renderizzare i tag vengano richiesti con una sola chiamata ai server di Facebook.

I tag FBML, infatti, sostituiscono una chiamata API da parte dell’Applicazione. Un bel risparmio di tempo!

I tag XFBML, usati invece nelle Applicazioni IFRAME, vengono renderizzati tramite una unica chiamata Javascript da parte del browser, che permette il caching dei dati.

2. Combina più richieste possibili

Invece di effettuare decine di chiamate con i metodi della vecchia REST API, è molto più performante fare un’unica query FQL che combina le richieste.

Così, ad esempio, invece di chiamare:

$friends = $facebook->api_client->friends_get();
$friends_locations = $facebook->api_client->users_getInfo($friends, ‘hometown_location’);

… si possono recuperare i risultati con una semplice query:

$friends_locations = $facebook->api_client->fql_query(
‘SELECT hometown_location from user where uid IN ‘ .
‘(SELECT uid2 FROM friend WHERE uid1 = ‘ . $user_id . ‘)’);

Quando, tuttavia, non ci sono relazioni tra le due query, si possono comunque eseguire più FQL assieme grazie al metodo fql.multiquery.

Tutto ciò permette di guadagnare diversi secondi!

3. Effettua il caching dei dati

Invece di richiedere ai server di Facebook gli stessi dati ad ogni caricamento, puoi salvarteli in locale e risparmiare tantissimo tempo di caricamento! Ora è possibile in quanto è stata rimossa la limitazione delle 24 ore.

Certo, il problema poi è quello di averli sempre aggiornati. Puoi allora risalvarli una volta al giorno, ad esempio, oppure iscriverti al servizio di notifiche in real-time di Facebook.

Invece di fare continua richiesta (polling) per verificare se i dati degli utenti sono stati aggiornati, sarà Facebook stesso a mandare una notifica al tuo server (push), non appena l’utente aggiorna i dati che ti interessano.

4. Ottimizza le query

Nello scrivere le tue query, devi fare attenzione che non restituiscano un numero di risultati troppo alto (e magari inutile), perchè rallenterebbe di molto l’Applicazione. E’ buona norma, quindi, limitare il numero di risultati.

Ad esempio:

SELECT hometown_location
FROM user
WHERE uid IN
(SELECT uid2 FROM friend WHERE uid1 = {*user*} LIMIT 40)
LIMIT 25

Questa query limita la sottoquery a 40 risultati e la query finale a 25. Visto che non tutti inseriscono la loro città di nascita è probabile che riceveresti comunque meno di 40 risultati. Si spera che una query di 40 record fornisca abbastanza città per completare la lista finale di 25 record.

A seconda della query, il primo LIMIT potrebbe non essere necessario. Prova a calcolare il tempo della query e verifica le performance, testando in particolare con un oggetto con tante connessioni.

Un’altra tecnica è quella di ordinare le query in modo corretto.

Se, ad esempio, volessimo i nomi degli amici di un utente che partecipano ad un certo evento, potremmo scrivere:

SELECT first_name
FROM user
WHERE uid IN
(SELECT uid2 FROM friend WHERE uid1 = {*user*})
AND uid IN
(SELECT uid FROM event_member WHERE eid = {*event*})

In questa query le due sottoquery sono sullo stesso livello: entrambe vengono eseguite completamente e poi intersecate.

La stessa query può essere scritta in altri due modi:

SELECT first_name
FROM user
WHERE uid IN
(SELECT uid2 FROM friend WHERE uid1 = {*user*}
AND uid IN
(SELECT uid FROM event_member WHERE eid = {*event*}))SELECT first_name
FROM user
WHERE uid IN
(SELECT uid FROM event_member WHERE eid = {*event*}
AND uid IN
(SELECT uid2 FROM friend WHERE uid1 = {*user*}))

In queste due query le sottoquery sono annidate, quindi il motore FQL esegue prima quella più interna e poi controlla la query esterna per ogni risultato.

Come puoi immaginare, l’ultima query è la più performante perchè seleziona per prima gli amici. Un utente ha, in media, circa 100 amici, ma un Evento può averne molti di più. Questa query, quindi, fa un ciclo su una media di 100 amici e verifica se questi partecipano all’Evento.

La seconda query, al contrario, deve fare un controllo su un numero potenzialmente molto elevato di persone che partecipano all’evento e verificare se queste sono amiche dell’utente.

5. Richiedi il minor numero di colonne possibile

Quando effettui una query, seleziona accuratamente le colonne che desideri, richiedendo solo quelle che ti servono davvero.

Ogni campo in più spende ulteriore tempo per essere processato e non tutti sono creati allo stesso modo. Ad esempio, selezionare la lista di interessi di un utente, richiederà tanto più tempo quanti più interessi ha l’utente.

6. Fai il Preload delle query

Nelle Applicazioni FBML è possibile utilizzare lo strumento di Preload FQL, in modo che, al caricamento delle pagine, Facebook già sa di quali query hai bisogno e ti restituisce i risultati via POST.

Il tempo risparmiato è quello che impiegherebbe il tuo server a fare la richiesta a Facebook.

7. Ottimizza Javascript

E’ bene evitare Javascript bloccanti: utilizza la nuova Javascript SDK per caricare gli script in modo asincrono e non bloccare il caricamento delle pagine.

Questi sono i consigli che dà Facebook stesso. Se hai altri suggerimenti, contribuisci lasciando un commento!

Condividi Questo Articolo
Lascia un commento
Subscribe
Notificami
guest

0 Commenti
Inline Feedbacks
View all comments