Come migliorare le prestazioni di Drupal?


54

Drupal è in rapido sviluppo, ma le prestazioni sono così scarse. È difficile raggiungere 50 richieste al secondo.

E ci sono così tante query SQL in una semplice pagina Web. Se testate il tempo richiesto per l'invio di un modulo in Drupal.org, ci vorranno sempre pochi secondi per terminare.

Come si migliora la velocità del proprio sito Web?


3
Hai effettivamente cercato nel sito? Non riesco a immaginare che questo non sia stato discusso più volte prima.
Letharion

1
Acquista le mie diapositive goo.gl/30yi39 dovrebbe aiutarti
mikeytown2

Risposte:


61

Memorizzazione nella cache, memorizzazione nella cache e memorizzazione nella cache.

Alcuni suggerimenti che ho già dato a una domanda simile su fare

  1. Mettere Varnish o un altro proxy inverso davanti al tuo http-deamon è probabilmente la cosa migliore che puoi fare.
  2. Durante DrupalCon Copehagen, Rasmus ha affermato che l'uso di una cache opp php, come APC , è una delle cose migliori che puoi fare per accelerare PHP in generale. Le prestazioni migliorano con le nuove versioni di PHP. Ci sono anche ulteriori vantaggi nell'aggiornamento di PHP quando si aggiorna Drupal. Da 6 a 8, Drupal subirà un grande spostamento verso l'orientamento agli oggetti, che è anche il caso in cui la maggior parte dei miglioramenti delle prestazioni avviene nelle nuove versioni di PHP.
  3. Memcache è una scelta popolare per accelerare la cache, mettendo la cache in memoria anziché su disco.
  4. Pannelli + cache combinati con le azioni della cache possono aumentare significativamente le prestazioni, anche per gli utenti che hanno effettuato l'accesso, poiché supportano una logica piuttosto complessa.
  5. L' Entity Cache è un bel potenziamento della velocità a zero conf per chiunque usi Drupal 7.
  6. I siti pesanti in scrittura hanno meno soluzioni "ben consolidate". Alcune opzioni includono.
    1. Spostare le scritture frequenti interamente, ad esempio statistiche, da qualche altra parte, come google analytics.
    2. Memorizzazione nella cache di frequenti operazioni di scrittura con una soluzione personalizzata in qualcosa come NodeJS che scriverà su DB una volta ogni Xth secondo.
    3. Sacrifica l' ACID sacro e usa un database come MongoDB . (Vedi il commento di Berdir sotto)
    4. Cluster il tuo database SQL. Legge da un database, scrive in un altro. Questo è nativo di D7 e Pressflow può aiutare con quello in D6.

Tutto questo è stato aggiunto, ma tutto ciò è per la memorizzazione nella cache di lettura, non va bene per i siti che hanno un sacco di scrittura.
Bruce Dou

Non hai detto nulla di specifico sulle scritture. :) Aggiungerò qualcosa al riguardo nella mia risposta.
Letharion

1
Chiarimento su MongoDB. Non è possibile passare il database completo a MongoDB. MongoDB è qualcosa di completamente diverso da un DBMS come MySQL e, ad esempio, non utilizza SQL. È possibile sostituire solo alcuni componenti collegabili e utilizzarli per archiviare una parte dei dati in MongoDB, ad esempio campi, registri, blocchi e così via.
Berdir,

@Letharion >> Cluster il tuo database SQL. Legge da un database, scrive in un altro. Pressflow può aiutare in questo. Come si può ottenere questo?
GoodSp33d,

1
Bella risposta! Definitivo. Per aggiungere questo, dai un'occhiata al modulo Advanced CSS / JS Aggregation poiché la mia comprensione è che l'aggregazione riduce le richieste di singoli file CSS e JS contribuendo così a migliorare le prestazioni.
therobyouknow,

23

Queste sono note delle mie esperienze e potrebbero variare rispetto a quelle degli altri. Uso principalmente lo stack LAMP e ho considerato lo stesso nei miei suggerimenti.

Regole del pollice per la memorizzazione nella cache che generalmente seguo.

  1. Elabora una volta Utilizzare più volte.
  2. Vivere con dati non aggiornati quando possibile
  3. Cancella le cache di rado e mantienile molto specifico.
  4. Quando possibile, apportare le modifiche al livello più basso nella pila. LAMPADA - DCCc: Linux, Apache, Mysql, PHP, Drupal Core, Contrib e modulo personalizzato.

Migliora le prestazioni di un sito Drupal (in ordine crescente di complessità)

  1. Tieni aggiornato il core, il modulo contrib e i temi aggiornati. Sì, è importante.

  2. Installa APC sul tuo server. (Spostato all'inizio in base al suggerimento di Letharion)

  3. Caching delle pagine: admin / config / development / performance Differenza tra durata minima della cache e scadenza delle pagine memorizzate nella cache

  4. Blocco nella cache https://drupal.org/project/blockcache_alter Opzioni di memorizzazione nella cache per tutti i blocchi.
  5. File javascript e css aggregati - Miglioramenti del front-end https://www.drupal.org/project/advagg
  6. Disabilita i moduli non necessari. Ogni modulo aggiunge la quantità di codice che deve essere disponibile per un caricamento della pagina. E aumenta anche il numero di ricerche. Laddove possibile, utilizzare un modulo generico al posto di più moduli che svolgono funzionalità specifiche.
  7. Contenuto di Cache Views: memorizzazione nella cache con riconoscimento dei contenuti per Views https://www.drupal.org/project/views_content_cache
  8. Disabilita registrazione DB - Usa https://drupal.org/project/syslog_ng
  9. Ridurre gli errori 404 - http://www.brokenlinkcheck.com/
  10. 404 risposte rapide - https://drupal.org/project/fast_404 - Prova a gestirlo a livello di server.
  11. Convalide lato client - https://www.drupal.org/project/clientside_validation
  12. Comprimi immagine - https://www.drupal.org/project/imageapi_optimize
  13. Caricamento pigro delle immagini - Non caricare immagini non necessarie - https://www.drupal.org/project/lazyloader
  14. Usa Sprite Sheets - https://www.drupal.org/project/spritesheets

  15. Imposta il Valore minimo della durata della cache su un numero più alto e usa i moduli di svuotamento della cache per cancellare le cache per pagine specifiche - Ogni volta che modifico / aggiorno un nodo, tutte le cache delle pagine per utenti anonimi vengono perse

  16. Usa il modulo Devel per guardare le domande.
  17. Riscrivi query Views / evita Views se è eccessivo.
  18. XHProf - https://www.drupal.org/project/XHProf
  19. FPM, HHVM.
  20. Profilazione e messa a punto del database - https://www.drupal.org/project/dbtuner
  21. Usa Boost , non Bootstrap DB se non richiesto. https://drupal.org/project/boost Per la maggior parte dei siti di dimensioni medio-piccole, Boost è abbastanza buono e potresti non aver bisogno di proxy inversi o giù di lì.
  22. Usa CDN - https://www.drupal.org/project/cdn È facile da configurare.
  23. Se le tue tabelle di cache sono enormi usa Memcached - Se puoi installare memcached e configurare la RAM per esso, non è così complesso come sembra.
  24. Etags: configura Etags correttamente. https://developer.yahoo.com/blogs/ydnfiveblog/high-performance-sites-rule-13-configure-etags-7211.html
  25. Usa Reverse Proxy Server - Varnish (almeno per le risorse). Aiuta molto se la maggior parte dei tuoi utenti è anonima.
  26. Trasferimento compresso - Abilita la compressione gzip
  27. Mantieni vivo: utilizza connessioni persistenti ove possibile.
  28. JPEG progressivi -
  29. CACHING IN CODICE - Il blog di Eaton è fantastico. http://www.lullabot.com/blog/article/beginners-guide-caching-data-drupal-7
  30. Implementare il riscaldamento della cache - https://www.drupal.org/project/cache_warmer - Cache Warm the page prima che l'utente finale li colpisca.
  31. Master Slave DB Config - https://www.drupal.org/project/autoslave ti semplifica la configurazione.
  32. Cluster di database - https://stackoverflow.com/questions/1163216/database-cluster-and-load-balancing
  33. Load Balancers - http://it.wikipedia.org/wiki/Load_balancing_(computing)
  34. Usa il riscaldamento euristico della cache - https://www.drupal.org/project/cache_graceful
  35. Caching utente autenticato - https://www.drupal.org/project/authcache

Ripubblicando la risposta che avevo scritto per drupal.stackexchange.com/questions/118990/… . A proposito, è stato chiuso dicendo che era troppo ampio. Non sono sicuro che ci sia molta differenza in queste due domande :)
Gokul NK,

18

Il modulo Boost è anche abbastanza utile, crea cache di file statici dalle tue pagine web. È principalmente per siti Web con molto traffico di utenti anonimi.

Boost fornisce la memorizzazione nella cache statica delle pagine per Drupal consentendo un aumento delle prestazioni e della scalabilità molto significativo per i siti che ricevono traffico prevalentemente anonimo. Per l'hosting condiviso questa è l'opzione migliore in termini di miglioramento delle prestazioni. Su server dedicati, invece, potresti prendere in considerazione Varnish.

Apache è completamente supportato, con Nginx, Lighttpd e IIS 7 semi-supportato. Boost comprime nella cache e gzip comprime html, xml, ajax, css e javascript. Aumenta la logica di scadenza della cache è molto avanzata; è abbastanza semplice avere diverse durate della cache per diverse parti del tuo sito. Il crawler integrato assicura che i contenuti scaduti vengano rapidamente rigenerati per un caricamento rapido della pagina.


1
Boost funziona alla grande per Drupal 7 ora imao. Su una soluzione di hosting condiviso questo è un ottimo modo di procedere (poiché spesso non consentono a Varnish, ad esempio).
Salvia il

5

Vale la pena ricordare che se si utilizza il driver del database SQLIte potrebbe essere necessario disabilitare la sincronizzazione del disco.

/**
 * Implements hook_init().
 */
function HOOK_init() {
  db_query('PRAGMA synchronous = OFF');
}

Su alcune configurazioni del server migliorerà notevolmente le prestazioni.


2
Poiché questo lo disabilitava ad ogni caricamento della pagina, stavo pensando se esiste un modo migliore per disabilitarlo in modo permanente. Dovresti dedicare un po 'di tempo a provarlo.
Gokul NK,

1
È possibile farlo in siti / default / settings.php, aggiungendo un elemento 'init_commands' all'array $ d Database. Ho trovato un esempio di "PRAGMA sincrono = OFF" qui: bitacoles.enging.com/node/210
dinopmi

4

Il segreto dell'esecuzione di Drupal sta nella memorizzazione nella cache e nel seguire le buone pratiche. suggerimenti:

Drupal back-end

  • Abilita la memorizzazione nella cache nella sezione Prestazioni .
  • Controllare i moduli Elenco di controllo prestazioni e prestazioni e scalabilità .
  • Controlla Drupal 7 Opzioni di ottimizzazione delle prestazioni ed elenco di controllo .
  • Disabilita i moduli non utilizzati e non di produzione (come Devel, UI Views, UI delle regole, ecc.).
  • Disabilita i moduli instabili.
  • Disabilita le statistiche .
  • Disabilitare il modulo dblog core e sostituirlo con syslog .
  • Disabilita il modulo principale di Update Manager .
  • Cron: usa il cron incorporato di Drupal, non il poormanscron (considera Elysia o Ultimate cron).
  • Viste: utilizzare la cache per le viste a diversi livelli (query del database, markup, in base al tempo).
  • Blocchi: utilizzare la memorizzazione nella cache dei blocchi se la vista è un blocco (per pagina, utente, ecc.).
  • Blocchi: considerare la modifica delle impostazioni della cache per blocco dal modulo Alter cache cache .
  • Pannelli: usa la cache il più possibile (per D7 controlla i moduli PCC e PHC ).
  • Entità: abilita cache entità .
  • Quando si utilizzano più ambienti, considerare il modulo mancante che può migliorare il caricamento della pagina.
  • Abilitare la cache delle pagine degli utenti autenticati con il modulo Authcache .
  • Evita reindirizzamenti che rallentano l'esperienza dell'utente.
  • Migliora l'invalidazione della cache utilizzando il modulo Expire .
  • Utilizzare la profilazione PHP prima della produzione (ad es. XDebug ).

Drupal front-end

  • Riduci a icona le richieste HTTP di:
    • Abilita l'aggregazione JS / CSS nella sezione Prestazioni .
    • Usa CSS Sprites per ridurre il numero di richieste di immagini.
    • Usa immagini piccole come dati incorporati (URI in un foglio di stile).
    • Utilizzare le mappe immagine per combinare più immagini in una singola immagine.
    • Considera anche l'utilizzo del caricamento di immagini pigre (vedi: Image Lazyloader ).
    • Installa il modulo BigPipe per ridurre i tempi di caricamento.
    • Considera caricamento pigro vs valutazione pigro.
    • Vedi: Utilizzo della cache del browser - Esposto!
  • Prendi in considerazione l'idea di rendere JavaScript e CSS esterno (in alcuni casi è più veloce).
  • Minimizza JavaScript e CSS (vedi: modulo Speedy ). Evita in linea.
  • Quando si fa riferimento a un JS, utilizzare uno defero gli asyncattributi.
  • Ridurre al minimo il numero di iframe.
  • Ottimizza immagini, caratteri, CSS Sprite, rendi favicon piccola la cache e riduci le dimensioni dei cookie.
  • Ridurre il numero di elementi DOM e riferimenti di cache agli elementi a cui si accede.
  • Rendi più veloce il caricamento delle tue 404 pagine utilizzando il modulo Fast 404 .
  • Abilita l'aggregazione e la memorizzazione nella cache delle risorse front-end con Advanced CSS / JS Aggregation .
  • Metti i fogli di stile in alto e gli script in basso.
  • Aggiungi un'intestazione Expires o Cache-Control , anche ETags per ridurre le risposte.
  • Usa GET per AJAX e rendili memorizzabili nella cache.
  • Componenti precaricati e post-caricamento per sfruttare il tempo di inattività del browser.
  • A volte la suddivisione dei componenti tra domini può massimizzare i download paralleli.
  • Non ridimensionare le immagini in HTML e mantenere i componenti sotto i 25k.
  • Evita filtri, espressioni CSS, elementi HTML con src o href vuoti.
  • Utilizzare il proxy inverso per eseguire il debug delle richieste Web (ad esempio Charles ).
  • Utilizzare strumenti come Y-Slow e PhantomJS per i controlli di base delle prestazioni.
  • Utilizza gli strumenti di Google Page Speed per analizzare e ottimizzare il tuo sito web.
  • Leggi le specifiche sui tempi di navigazione del W3C ( GitHub ).

PHP

  • Abilita la memorizzazione nella cache PHP (ad es. OpCache , APC ) e modifica le impostazioni.
  • Prendi in considerazione l'utilizzo di PHP-FPM invece di mod_php più Nginx invece di Apache.

Banca dati

server

Siti Web ad alto traffico

Se ti aspetti un carico elevato per il tuo sito Web, usa Varnish. Valuta anche l'uso di CDN.

Maggiori informazioni su: Esperienza nel mondo reale nel ridimensionamento e ottimizzazione delle prestazioni


Ulteriori risorse:


3

Esiste un libro chiamato High Performance Drupal che fornisce le migliori pratiche, esempi e spiegazioni approfondite per risolvere diversi problemi di prestazioni e scalabilità. Imparerai come applicare le tecniche di codifica e infrastruttura a interni Drupal, prestazioni delle applicazioni, database, server Web e analisi delle prestazioni.

Nell'articolo Prestazioni e scalabilità in Drupal 7 puoi trovare alcuni esempi su Drupal 6 e Drupal 7 e il seguente elenco:

Drupal 7 progetti di performance e scalabilità da guardare:


2

Ci sono state molte modifiche per ottimizzare le prestazioni del tuo sito Drupal - ma non tutti sono imperativi. Dobbiamo cercare alcune alternative e tecniche che porterebbero a una piattaforma ottimizzata di Drupal. Cache, sì, è un modo per ottimizzare il sito Web in diversi modi, ma alcuni ulteriori componenti aggiuntivi e suggerimenti possono aumentare e ottimizzare il tuo sito Web senza processi senza problemi da intraprendere.

Di recente abbiamo pubblicato un articolo simile al nostro sito Web, che credo possa aiutarti a fare qualche modifica.

Fonte: http://www.cloudreviews.com/blog/drupal-performance-optimization-tips


2

Ci sono alcune possibilità per migliorare la velocità di Drupal a un livello ragionevole senza installare nuovi moduli. Sì, Drupal ha una configurazione delle prestazioni.

  1. Puoi configurarlo andando su: YourSiteDomain / admin / config / development / performance
  2. Abilita "Pagine della cache per utenti anonimi" in Chaching
  3. Durata minima della cache: 1 giorno (se non si eseguono aggiornamenti regolari)
  4. Scadenza delle pagine memorizzate nella cache: 1 giorno (se non si eseguono aggiornamenti regolari)
  5. Abilita 'Comprimi pagine cache'
  6. Abilita 'Aggrega e comprimi file CSS'
  7. Abilita "File JavaScript aggregati"

  8. Una volta impostate queste configurazioni, vai a: YourSiteDomain / admin / reports / status

  9. Controlla se ci sono problemi di autorizzazione per le directory 'css' e 'js'
  10. Correggere l'autorizzazione come definito nella pagina Rapporto stato

E ora hai finito con l'ottimizzazione della velocità per il tuo sito drupal 7.

Esistono pochi strumenti di test della velocità online per verificare la velocità. Assicurarsi di utilizzare uno degli strumenti di controllo della velocità ed eseguire un test prima di aggiornare le impostazioni di cui sopra. E una volta che hai aggiornato l'impostazione delle prestazioni, esegui di nuovo il test di velocità. Vedrai sicuramente un miglioramento.

Pingdom e HTTP Fox (plugin FireFox) sono gli strumenti migliori per controllare la velocità del sito.

Le impostazioni di cui sopra non solo memorizzano nella cache le tue pagine per utenti anonimi, ma comprimono anche i file CSS e JS. Esempio se il tuo sito sta caricando 80 file, pubblica queste impostazioni il numero di richieste ridurrà almeno del 50%, quindi qui hai un miglioramento della velocità 2x sul tuo sito Drupal.


2

Come sviluppatore di backend c'è sempre spazio per migliorare il tuo codice per migliorare le prestazioni del sito web. Alcune linee guida per gli sviluppatori di backend potrebbero essere:

1) Pulisci il tavolo del tuo cane da guardia

2) Non abusare dell'API variabile

3) Invia richieste HTTP in numero minore o migliore

4) Mantieni corto il tuo "modulo punti"

Quando si tratta di font-end e di costruttori di siti si può ottenere molto di più, ma è importante prendere in considerazione le prestazioni da ogni punto di vista.

Fonte: ottimizza prima di andare in diretta


2

Un sito Drupal 7 non ottimizzato con 2 GB di RAM può soddisfare in modo soddisfacente circa 20-25 richieste al secondo. Se vuoi andare oltre, il sito richiederà alcune modifiche. Ciò che modifichi dipende dal fatto che la maggior parte degli utenti sul sito sia anonima o autenticata. Ecco le principali cose che puoi fare per migliorare le prestazioni:

Il sito serve principalmente utenti anonimi:

1) Installa e configura sicuramente APC, memcache ed entitycache.

2) Metti il ​​proxy Varnish davanti al server web. L'installazione e la configurazione richiedono circa 30 minuti, ma ridurranno drasticamente i tempi di caricamento della pagina. Infatti, Varnish può gestire circa 300 richieste al secondo su una macchina da 2 GB se tutte le pagine sono memorizzate nella cache. Utilizzare il modulo Scadenza per far scadere solo le pagine selezionate sull'aggiornamento / eliminazione del contenuto.

3) Utilizzare il modulo Advanced CSS / JS Aggregation per aggregare file CSS e JS. Prova a spostare tutti i file JS nella parte inferiore della pagina. Ma nota che ciò potrebbe danneggiare il tuo sito, quindi implementalo sulla produzione dopo test approfonditi. Sperimenta anche con l'integrazione di CSS critici. Nella mia esperienza, ridurrà il tempo di caricamento della pagina di circa mezzo secondo.

4) CSS / JS / images dovrebbero avere un'intestazione di scadenza molto futura. Ciò garantirà che i browser non richiedano più e più volte gli stessi CSS / JS / immagini.

5) Assicurati che il server web stia servendo pagine compresse / CSS / JS.

Dopo aver implementato i 5 passaggi precedenti, il tuo server RAM da 2 GB dovrebbe essere in grado di gestire 50 richieste al secondo abbastanza facilmente.

Il sito serve principalmente utenti autenticati:

L'ottimizzazione di tale sito è più complessa. Tali siti rientrano in una delle due sottocategorie a fini di ottimizzazione:

(a) La maggior parte delle pagine del sito sono identiche, tranne 1 o 2 blocchi con informazioni specifiche dell'utente. Ad esempio il sito di Drupal Commerce.

(b) La maggior parte delle pagine è completamente personalizzata per l'utente. Ad esempio il sito Drupal Commons.

Se il tuo sito rientra nella categoria (a), applica la maggior parte delle tecniche di cui abbiamo discusso per il sito che serve principalmente utenti anonimi. L'unica differenza è che per le pagine non amministrative, Varnish dovrà rimuovere il cookie SESSION dall'intestazione e servire le pagine memorizzate nella cache. Utilizzare il modulo AJAX Block per bloccare i server con informazioni specifiche dell'utente utilizzando AJAX. In questo modo la maggior parte della pagina verrà pubblicata in modo estremamente rapido utilizzando Varnish e quindi le informazioni specifiche dell'utente verranno fornite su AJAX.

Se il tuo sito rientra nella categoria (b), utilizza il modulo Authcache. Preferisco non usarlo il più possibile perché richiede un bel po 'di configurazione e manutenzione. Ma funziona davvero bene. Non sarà veloce come usare Varnish ma sarà in grado di gestire 50 richieste al secondo che stai cercando.

Se stai cercando di andare oltre ciò di cui abbiamo discusso qui, dai un'occhiata alla lista di controllo per l'ottimizzazione delle prestazioni di Drupal . Divulgazione: è stata scritta da me. Cita un elenco esaustivo di cose che puoi fare per rendere il tuo sito Drupal velocissimo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.