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...

Links Analytics 2.0: statistiche dei links sulle tue Pagine Fan

Links Analytics 2.0: statistiche dei links sulle tue Pagine Fan

Vi ricordate di Links Analytics, la mia prima Applicazione Facebook che ho rilasciato un mesetto fa? Come promesso, l'ho aggiornata alla seconda versione, seguendo i vostri feedback! Innanzitutto, devo ringraziare tutti voi che avete ascoltato il mio appello e mi avete aiutato a diffonderla. Pur non essendo un'applicazione virale, si è diffusa a macchia d'olio, ...
Come ho creato un'Applicazione Facebook virale!

Come ho creato un’Applicazione Facebook virale!

L'ultima Applicazione Facebook sviluppata per EMP Mailorder Italia è stata un successo inaspettato! Lanciata nel periodo pasquale, EMP Eggs ha superato i 12.000 utenti in appena 2 settimane! Non male, per un'app volta a fare Brand su Facebook, no? Ma cos'è EMP Eggs?
Come creare Dialog Box nelle tue Applicazioni Facebook IFrame

Come creare Dialog Box nelle tue Applicazioni Facebook IFrame

Uno degli aspetti positivi nello sviluppare Applicazioni Facebook FBML è che puoi usare FBJS, che mette a disposizione alcuni oggetti molto comodi come le Dialog. Grazie ad esse possiamo far comparire i classici popup in stile Facebook, con una riga di codice. Passando, però, a sviluppare Applicazioni IFRAME — e pare che Facebook stia ...
Applicazioni Facebook: il meglio dal Forum di BigThink

Applicazioni Facebook: il meglio dal Forum di BigThink

Sono diversi mesi ormai che ho aperto il Forum di BigThink dedicato a Facebook, in particolare allo sviluppo di Applicazioni e al Marketing. Oggi vorrei proporti una selezione dei migliori thread relativi allo sviluppo di Applicazioni Facebook, nel caso (molto probabile) in cui te li fossi persi. Magari possono tornare utili anche a te, ...
Facebook ha ucciso le Pagine Fantasma!

Facebook ha ucciso le Pagine Fantasma!

Chi mi segue da tempo, conoscerà la mia passione per le Pagine Fantasma. Già fin dal lancio dell'Open Graph nel 2010 ho iniziato a parlarne, per poi portare l'argomento a conferenze e convegni. Nelle ultime settimane, hanno iniziato ad esserci diversi bug: inizialmente non venivano più create le Ghost Pages. Risolto quel problema, ...

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