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

Cosa significa la mail di Facebook "Notice of Violation: Privacy Policy"?

Cosa significa la mail di Facebook “Notice of Violation: Privacy Policy”?

Oggi, come tanti altri sviluppatori Facebook, ho ricevuto una mail da Facebook con un oggetto piuttosto minaccioso: "Notice of Violation: Privacy Policy". Il testo della mail recita: Hi, We've found the following policy violation with your app and you need to address this issue by Tuesday April 17, 2012 at 5:00pm PST or your app may be ...
Come sviluppare Applicazioni Facebook in locale

Come sviluppare Applicazioni Facebook in locale

Uno dei principali problemi che si riscontrano nello sviluppare Applicazioni Facebook — in particolare quelle FBML - è l'impossibilità di testarle in locale. Uno sviluppatore alle prime armi cosa fa? Inizia a creare la sua Applicazione direttamente sul server remoto, uploadando i file via FTP ad ogni singola modifica. Un vero suicidio! E' impossibile ...
Come creare un Tab avanzato sulla tua Pagina Facebook

Come creare un Tab avanzato sulla tua Pagina Facebook

Qualche tempo fa ti ho spiegato come creare un Landing Tab personalizzato, utilizzando l'applicazione Static FBML. Tramite essa è possibile creare un Tab con contenuti base come semplici immagini e testi. Ma se volessi creare un Tab con contenuti avanzati, dinamici, magari recuperati da database? La soluzione è presto detta: devi creare un'Applicazione Facebook ...
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 ...
Leggi, guarda, compra... L'evoluzione del Facebook Like!

Leggi, guarda, compra… L’evoluzione del Facebook Like!

Facebook è cambiato. Se nell'Aprile 2010 il buon Zuck aveva lanciato l'ormai famoso Like Button, pochi giorni fa ha davvero deciso di rivoluzionare il modo di relazionarsi su Facebook. Prima, l'unico modo per connettersi con un oggetto dell'Open Graph era mediante l'azione di Like: cliccando sul pulsante Mi piace, creavo una connessione tra me ...

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