2011-09-06 8 views
13

Facebook: http://static.ak.fbcdn.net/rsrc.php/v1/yh/r/u2OL99TwlfU.css
Google: http://ssl.gstatic.com/gb/js/sem_cf9545d69b4bd3d22ed10206010c8b23.jsIn che modo Facebook, Google e altre applicazioni di grandi dimensioni fanno i loro file CSS e JavaScript?

Ci sono altri siti, come Tagged che utilizza anche questo tipo di metodo.

In che modo questi siti e altre applicazioni di grandi dimensioni eseguono questi file? Presumo che quando aggiornano il loro file, l'URL cambia effettivamente in modo che la cache non riconosca l'URL e ricarichi il nuovo file.

In realtà sono più confuso su rsrc.php di Facebook, ma ancora non capisco il resto. Sembra che la stringa casuale di Google sia un MD5 di qualcosa.

Desidero qualcosa di simile sui miei siti web, le applicazioni di grandi dimensioni lo usano quindi deve essere utile da usare - anche se non ho deciso di usarlo, la conoscenza di esso potrebbe essere utile nel prossimo futuro.

risposta

27

(Io sono l'autore originale di rsrc.php e Haste sistema di gestione delle risorse statica di Facebook.)

È possibile trovare una descrizione di alcune delle sfide Facebook incontrati con la gestione delle risorse statiche e come li risolto qui, nella documentazione Phabricator:

https://secure.phabricator.com/book/phabflavor/article/soon_static_resources/

alla domanda specifica, gli URI rsrc.php sono così (con "rsrc.php" in loro) proprio perché non avevamo una regola di riscrittura globale Apache 2007 quando scrissi rsrc.php e aggiungendo, distribuendo e testando uno per alcuni l'URI più elegante non sembra degno di essere preso in considerazione (in PHP, puoi leggere il resto dell'URI dopo la parte del file "x.php" al runtime). Quindi quella parte è solo un artefatto di implementazione di PHP.

Gli altri componenti del percorso sono stati utilizzati per varie cose nel corso degli anni, come un numero di versione di emergenza che possiamo eseguire globalmente per rompere le cache di tutti se qualcosa va storto con la pipeline della cache, un checksum di hash così possiamo distinguere tra valido e richieste di garbage per la registrazione, flag interni che alterano la politica della cache della risorsa restituita per lo sviluppo e i sapori di una risorsa (ad esempio, adattati a un browser specifico o localizzati in una lingua specifica).

+0

Bene, ho assunto quei nomi di file casuali - beh, quello di Facebook era un checksum con il nome file originale e l'ultima data di modifica. Anche se il checksum dovrà essere invertito per ottenere il file vero e proprio. Perché me lo chiedo perché sto cercando di creare una cosa simile. So che effetto ha con la cache. Ad esempio se hai avuto image.png - quando quell'immagine viene aggiornata, non vedrai la modifica fino a quando non ti aggiornerai.Pertanto, è necessario modificare l'url effettivo in modo che sia univoco per quel file e la data dell'ultima modifica, in modo che sia possibile visualizzare gli aggiornamenti senza problemi di aggiornamento. –

+0

Questo era un articolo interessante – dave

+0

Come per Google, sembra un MD5 di qualche tipo. Di nuovo, probabilmente dovrebbe essere invertito. Sono confuso come fare il mio. –

0

Facebook e Google utilizzano entrambi un suffisso md5 nel loro nome file di risorse statiche.

In primo luogo, si tratta di un'ottimizzazione generale per le prestazioni, è possibile eseguire il controllo delle versioni di una risorsa statica utilizzare l'md5 del relativo contenuto del file (dopo la minimizzazione) e impostare il controllo della cache = 10 anni (nginx o apache). Se si preme il pulsante avanti/indietro sul browser o si visualizza la pagina una seconda volta, il file verrà recuperato dal disco locale, non attraverso la rete (tranne che si preme il pulsante di ricarica, ci sarà un 304).

In secondo luogo, quando pubblichi il codice online, puoi prima spingere tutte le risorse statiche, non saranno in conflitto con quelle vecchie. E poi si spinge tutto il codice lato server, tutti gli utenti non avranno accesso alla pagina di errore.

Problemi correlati