BigThink

7 Consigli per velocizzare le tue Applicazioni Facebook

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!

Fonte: Performance

Articolo scritto da Ghido

Fondatore di BigThink.it, si occupa dello sviluppo e del coordinamento dei progetti tecnologici. Specializzato nel Marketing su Facebook e nello sviluppo di Applicazioni Social, fa consulenza e formazione ad aziende ed agenzie.

Leggi anche...

[Pesce d'Aprile!] Facebot: metti il pilota automatico a Facebook!

[Pesce d’Aprile!] Facebot: metti il pilota automatico a Facebook!

Come vi avevo già anticipato, ho finalmente finito di sviluppare un'Applicazione Facebook di cui vado particolarmente fiero e credo riceverà un ottimo riscontro. Si chiama Facebot e permette di automatizzare alcune noiose operazioni su Facebook che ci prendono parecchio tempo nella normale routine quotidiana: Fa automaticamente gli auguri ai vostri amici. Protegge le vostre foto dall'essere ...
Like Battle: una sfida all'ultimo Like!

Like Battle: una sfida all’ultimo Like!

Forse ricorderai la campagna Facebook di Terranova lanciata alcuni mesi fa: ogni giorno veniva pubblicata la foto di un prodotto sulla Bacheca e gli utenti potevano cliccare su "Mi piace". Per ogni Like il prezzo scendeva di 0,05 euro e il giorno dopo lo si poteva trovare a prezzo scontato sul sito. Il video ...
Come creare una Video Gallery sulla tua Pagina Facebook

Come creare una Video Gallery sulla tua Pagina Facebook

L'altro giorno mi ha contattato l'amico Julius, chiedendomi aiuto per inserire una video gallery sul Tab sulla sua Pagina Facebook. Voleva far sì che, cliccando sulle miniature dei suoi video, si visualizzasse in grande il video corrispondente. Gli ho dato qualche dritta ed è riuscito ottimamente nell'impresa. Ecco come è venuto il suo Tab. Vediamo ...
10 Query FQL per le tue Applicazioni Facebook

10 Query FQL per le tue Applicazioni Facebook

Il cuore della maggior parte delle Applicazioni Facebook è formato da chiamate all'API o da query FQL che chiedono alla piattaforma determinati dati da elaborare. Facebook mette a disposizione degli sviluppatori una quantità immensa di dati relativi ad utenti, Pagine, Profili, relazioni... e possiamo utilizzarli tutti nelle nostre Applicazioni, basta saperlo fare. In questo articolo ...
Facebook e il Project Spartan: facciamo chiarezza

Facebook e il Project Spartan: facciamo chiarezza

Pochi giorni fa, Facebook ha aggiornato la sua applicazione Mobile per iPhone e ha (finalmente) lanciato quella per iPad. Oltre a rinnovarla graficamente e aggiungervi nuove funzionalità, Facebook ha introdotto una novità a cui forse non è stata data abbastanza importanza: da ora, le Applicazioni Facebook saranno disponibili anche nella versione mobile!!

6 Commenti

  1. ravin lakheearam

    salve,
    la mia applicazione facebook quando mi connetto a internet io apro facebook per guardare i messaggi,quando vado aprire o quando clicco qualcosa su facebook,facebook non risponde…
    come faccio a risolvere il problema?

    cordiali daluti…

    27 luglio 2011, 18:44
  2. salve,
    la mia applicazione di facebook ad alcuni utenti restituisce pagina bianca..com’è possibile?

    impiego modalità iframe.

    16 novembre 2010, 16:40

4 Citazioni