 Ringrazio Giustino per la bella introduzione, io sono Danilo e mi occupo su base quotidiana di sviluppo WordPress, in particolare di sviluppo server-side e sviluppo mobile. In questo talk, questa mattina andiamo un po' a vedere quale sono le possibilità offerte da WordPress per quanto riguarda WordPress e PHP, per quanto riguarda l'ottimizzazione del codice ed aumentare un po' le performance dell'eseguzione del nostro CMS preferito. In particolare possiamo vedere che con WordPress abbiamo la possibilità di avere diversi livelli di ottimizzazione. Il primo livello che ci troviamo ad avere è quello a livello di PHP e quindi effettuare un caching di codice PHP. Poi c'è un ulteriore livello di caching a livello di WordPress che è sia a livello di funzioni di WordPress che a livello di pagina intera e infine andremo a vedere un po' cosa significa eseguire del codice WordPress in maniera differita, ovvero eseguirlo non nel momento di renderizzazione della pagina affronti di una richiesta di un utente, ma di eseguirlo successivamente quando a noi resta più comodo. Iniziamo quindi con il primo tipo di caching, iniziamo a vedere un po' come è organizzato un server e i vari livelli di software che noi ci troviamo ad utilizzare tutti i giorni. In particolare vediamo che c'è il si siamo operativo, sotto il si siamo operativo c'è il server e poi c'è la rete. Questo è diciamo la normale componentistica che ci troviamo ad avere su un server. Sopra il sistema operativo abbiamo il nostro stack tecnologico che a questo punto è il protocollo HTTP, PHP e MySQL per la maggior parte delle installazioni. Sopra questo ulteriore livello si trova WordPress, quindi WordPress che sono dei file PHP, utilizza MySQL come database e il protocollo HTTP per comunicare con l'utente. A questo punto andiamo a vedere come ottimizzare l'esecuzione del codice all'interno di questi livelli che in particolare il primo livello è quello di WordPress di come abbiamo installato le differenti componentistiche software. Andiamo a vedere il database. Innanzitutto conviene usare InnoDB come motore per le tabelle, a meno che non avete una ragione per non farlo, però oggi già da tantissimo tempo che in InnoDB è performante potete usarlo tranquillamente, tra l'altro è anche quello di default di WordPress. Abilitare poi il log delle qui rilente, quindi voi anche in produzione andate a vedere quale sono le qui rilente che impiegano più tempo e poi su queste qui rilente andate ad eseguire un explain, ovvero andare a capire perché queste qui rilente. La maggior parte delle volte perché gli indici magari sono sbagliati, gli indici sulle tabelle non sono ottimizzate quindi queste qui rilenti e vanno poi ad inficiare tutta l'esecuzione del vostro WordPress. Naturalmente qui sto parlando di tabelle che è scritte da voi, non le tabelle di default di WordPress perché già sono ottimizzate a monte, ma se voi scrivedo un plugin che introduce una nuova tabella, mi raccomando utilizzate sempre il log delle qui rilmente e andate a vedere poi perché sono lente ottimizzando gli indici. A questo punto cambiamo di livello, finora abbiamo visto una semplice introduzione su Goli di bottiglia del database, ma andiamo a vedere un po' cosa possiamo fare a livello di PHP. Allora, cosa succede? Il vostro utente apre il browser, inserisci l'indirizzo della vostra pagina web e effetto una richiesta. A questo punto viene contatato il vostro server, il web server prende in carico la richiesta da un certo punto, chiamerà PHP. PHP che cosa sono WordPress? Sono dei file scritti in PHP che vengono letti dalle interpreti di PHP, convertiti, parzerizzati, si fa l'analisi elettriciale del codice e via dicendo, alla fine si fa il file, il listato PHP viene convertito in bytecode e questo bytecode viene seguito dall'interprete. Tutto ciò avviene ogni volta che c'è una richiesta sui vostri file. Allora, si è pensato ma non è possibile ottimizzare questo scrivendo in qualche parte delle volte in memoria direttamente il bytecode e reutilizzarlo. Sì, questo è possibile. Infatti PHP permette attraverso il caching di bytecode diciamo ottimizzare questa fase. Quindi alla vostra prima richiesta viene creato il bytecode del file PHP e alle richieste successive questo bytecode viene interpretato nuovamente dall'interprete deseguito e quindi ci ritroviamo da avere un bytecode che è già stato precaricato in memoria e tutta la fase di parsing e di creazione del bytecode viene, diciamo, saltata. Adesso questo è un piccolo aumento di performance. Questo è una richiesta classica, cioè la lettura del file, la parterizzazione, la compilazione, l'eseguzione e alla fine l'output. Nel caso in cui dovessimo mettere un caching a livello di bytecode, tutte le prime tre parti, lettura, parterizzazione e compilazione in bytecode vengono, diciamo, eseguiti una sola volta e successivamente vengono saltate. Questo tipo di cache naturalmente ha bisogno di alcuni settaggi a livello di PHP ma ormai dalle ultime versioni di PHP, l'opcode caching è già abilitato all'interno, bisogna solo attivarlo a livello di PHP, mentre in precedenza si utilizzavano quegli acceleratori come APC, ma tutt'ora si utilizzano, magari se avete una versione un po' più datata di PHP. E già questo semplice ottimizzazione c'è un incremento di prestazioni che è di circa 4 volte la normale eseguzione, quindi prima voi riuscivate ad eseguire 10 richieste contemporaneamente effettuando questo tipo di ottimizzazione riuscite a fornire 40 richieste contemporanei. E questo è il livello di PHP. Ora trasferiamoci ad un livello ancora più alto, in questo caso siamo dentro WordPress. WordPress cosa fa? Voi avete le vostre funzioni e supponiamo che ad un certo punto nel vostro plugin si andate ad effettuare una query che impiega un po' di tempo. Questa query che cosa succede? Viene eseguita ogni volta c'è una richiesta a livello di WordPress. Quindi voi contatate il database, il database fa la query e ritorna i risultati. WordPress fortunatamente fornisce al suo interno già un modo per salvare questi risultati e riutilizzarli successivamente. Quindi che succede? Se voi vi trovate ad avere 10 richieste contemporanea alla stessa pagina la query viene eseguita una sola volta e le 9 restanti richieste utilizzeranno i valori che sono stati letti dal database alla prima richiesta. WordPress già di suo metta a disposizione le funzioni per effettuare il caching. Naturalmente voi dovete installare qualcosa sul server per fornire questo supporto dove andare a memorizzare questi valori. In particolare con WordPress ci sono i transients che sono semplicemente delle funzioni che ti permettono di scrivere i memori a qualcosa che sia un query, un valore, in particolare se voi non installate niente all'interno del vostro ambiente quindi avete solo PHP e MySQL senza nessun motore che vedremo successivamente questo viene scritto all'interno del database, all'interno delle option table a quel punto e già questo è un piccolo aumento di performance partiamo dall'idea che se io ho una query che per essere eseguita impiega tre secondi, io le seguo una volta, tre secondi vengono impiegati per le questioni della query, scrivo il valore con le transients all'interno del database e nella table option con una chiave, la chiave naturalmente sarà anche l'indice quindi nelle successive richieste per prendere quel valore io ci vado direttamente con quella chiave e la lettura è quasi in tempo istantaneo, non impiego più tre secondi ma mi porto già ai memori a valori precedentemente scritti con l'introduzione dei transients WordPress quindi ci permette di effettuare questo tipo di salvataggio temporaneo in memoria con i transients poi noi andiamo a specificare anche un tempo per cui questi sono validi quindi quando è passato quel tempo i transients non saranno più validi c'è poi un altro tipo di caching sempre che WordPress mette a disposizione che è l'object cache sono delle altre funzioni che sono molto semplici da usare e sono più o meno come transients se voi siete in dubbio su quale usare è consigliabile usare i transients perché i transients nel momento in cui nella vostra installazione avete un motore di caching che andremo ad illustrare successivamente automaticamente passano ad usare l'object cache di WordPress quindi quelle chiamate dei transients che sono semplicemente delle set e delle get andranno ad utilizzare queste altre funzioni che sono dei cache aggiungi imposta e prendi quindi in maniera automatica trasparente WordPress utilizzando i transients va a fare l'object cache se poi voi siete sicuri che nella vostra installazione avete un motore di caching potete addirittura chiamare direttamente le funzioni di caching di WordPress e quindi andare a scriverli dentro quello che voi meglio credete cosa succede però che WordPress mette a disposizione queste funzioni che sono una specie di Europa però i valori che queste funzioni andranno a scrivere da qualche parte dovranno essere scritti e entra qui in gioco un altro server in questo caso anche altri plugins dipende poi dal tipo di ambiente software che voi avete che dovete scegliere anche il plugins più opportuno per esempio se io decido di installare come server di backend che tiene in memoria questi valori di caching un server memcache da imon a questo punto utilizzerò botretto dal cache oppure memcached come plugin se io a PC installato nella mia installazione vado ad utilizzare questo altro tipo di plugin lo stesso se io dovesse avere Redis vado ad utilizzare il plugin di Redis perché è quello che mi permette di scrivere questi valori all'interno della mia installazione di Redis nelle vecchie versioni di WordPress c'era anche il caching su file che cosa succedeva? semplicemente WordPress andava a scrivere all'interno di un file i valori che noi passavamo a queste funzioni diciamo che è meglio non utilizzare questo tipo di di approccio per il caching ed andare a scrivere cose su disco perché l'accesso al disco potrebbe essere lento il file system potrebbe essere distribuito fra diversi hosting e soprattutto se avete un ambiente distribuito su diversi data center la cache poi è singola su ogni server quindi se voglio già avete due server e in questo caso il file system diciamo all'interno di un solo server a meno che non è distribuito quindi vi troverete a avere due valori di cache diverse per i diversi server andiamo a vedere qual è quello diciamo più utilizzato al momento di server che permette di effettuare il caching si chiama memcachedemon open source è possibile installarlo molto facile da usare quindi voi potete avere un vostro primo livello di web server e successivamente avere dietro diverse installazioni di memcached in questo caso queste installazioni andranno a comunicare con PHP e a scrivere in memoria tenere quei valori che noi a livello di WordPress diciamo di effettuare il caching semplicemente cosa fa è come se fosse una grande tabella che ad una determinata chiave corrisponde un valore quindi voi come WordPress andate a scrivere chiave e valore all'interno di quest'altro sistema e successivamente lo possiamo andare a riprendere questo è l'indrizzo dove si trova tutto il software naturalmente se avete un hosting condiviso magari non vi faranno installare questo tipo di software però se avete accesso la macchina potete anche tirare su un'istanza sola di questo memcachedemon e all'interno addirittura della sesta macchina dove gira il web server quindi non c'è bisogno di configurazioni esoteriche per già vedere dei miglioramenti anche con macchine semplici si può vedere come WordPress scala molto bene utilizzando la cache questo tipo di cache di WordPress se voi andate ad aprire i file nativi del CMS vedete che viene usata molto soprattutto quando andate a caricare i utenti magari nelle regioni le richieste delle pagine quando vengono mostrati i post e i nomi degli utenti che hanno creato quel post WordPress automaticamente effetto alla cache degli utenti e dei dettagli degli utenti nelle successive chiamate se voi avete un motore di caching installato tutti quelle informazioni ce le troviamo già in memoria ma perché WordPress, i sviluppatori di WordPress nelle funzioni predefinite hanno utilizzato la cache quindi basta abilitarla e già iniziamo a vedere un miglioramento delle performance se poi, come ho detto prima, voi avete il vostro plugin supponiamo che il vostro plugin per qualche motivo deve chiamare un altro servizio esterno tramite una chiamata HTTP GET questa chiamata HTTP GET impiega 5 secondi per essere eseguita e a questo punto voi cosa potete fare effettuare questa chiamata HTTP GET alla prima esecuzione della pagina prendere il valore, salvarlo nella cache e riutilizzarlo successivamente viene da sé che, avendo un motore di cache siano delle performance soprattutto quando interrogate servizi esterni o avete qui di complesse un aumento di performance veramente notevole ed è qui che memcache demon entra in gioco, si va ad inserire tra PHP masivo e level pressing ed è uno strato intermedio di accesso ai dati questo tiene tutto in memoria, quindi se voi riavviate il vostro server memcache succede che i dati che avete scritto in precedenza vengono versi, quindi tutto questo che significa che voi quando scrivete il vostro codice ogni volta che andate a controllare se un valore di cache appresenta o meno dovete stare attenti perché quel valore potrebbe non essere presente anche se è sicuro che voi l'avete scritto due righe in precedenza e due righe sotto le ho riutilizzate, no va sempre controllato che la cache sia presente perché l'istanza di memcache di potrebbe essere in crisi, potrebbe non aver scritto il valore in cache e anche successivamente voi quando andate a leggere vi ritornano un valore che è nullo quindi controllate sempre la cache e questo qui diciamo cosa avviene quando c'è una chiamata a livello di PHP con WordPress e abbiamo il motore di caching all'interno questo motore di caching come già detto diverse volte e il lavoro per conto suo può essere utilizzato anche per un'altra funzionalità che è delle volte anche molto interessante abbiamo visto che viene usato per scrivere dei valori o dei valori che voglio scrivere io li butto dentro, lui e poi me li dà quando io gli chiedo ma non posso usarlo anche per fare un caching della pagina completa in questo caso per esempio se io ho un sito dove i studenti non sono loggati e visitano moltissime volte le pagine per dire l'on page oppure la pagina dei contatti oppure anche dei singoli articoli ma gli studenti non sono loggati tutti questi studenti vederanno sempre la stessa pagina allora perché andare a chiamare WordPress effettuare tutto il giro classico è possibile installare un plugin che in questo caso io ne ho elencati 3 bad cache, super cache total cache che mi permettono di fare il caching della pagina questi funzionano la maggior parte solo per gli utenti che non sono loggati che cosa fanno? alla prima richiesta bad cache si legge il file php, lo esegue il risultato lo scrive all'interno della cache alla seconda richiesta se l'utente non è loggado rispetto a determinati parametri bad cache intercetta la richiesta si legge la pagina intera dalla cache e la ritira fuori così come era stata creata in precedenza la forniscia all'utente questo tipo di caching che è chiamato caching della pagina intera permette di aumentare le prestazioni in maniera considerevole poi farò vedere dei dati su una semplice istanza diciamo vi consiglio di usarlo cioè da dire però che questo tipo di di cache può essere usato solamente sui utenti che non sono loggati perché altrimenti un utente quando è loggato potrebbe avere delle personalizzazioni per cui ogni pagina è diversa e cosa fa questo plug-ins che in questo caso è bad cache utilizza memcache l'altro server di cui è parato in precedenza per scrivere i valori e rilege ogni volta la pagina da quel server e la ritira fuori saltando completamente tutta quella parte di accessual database parcelizzazione dei file e eseguzione delle funzioni interne di warpress questo mi permette di aumentare naturalmente le performance e avendo diciamo dei buoni settaggi riesco anche a fornire diverse vagine per i diversi browser per esempio io in posto bad cache che tutti gli utenti microsoft la cache viene effettuata separatamente diversamente dagli utenti che stanno per esempio su Safari con il mio plug-in con la mia installazione gli utenti microsoft io gli fornisco un sito diverso rispetto a quello che vedono gli utenti che usano Safari quindi quando andrò a effettuare la cache della pagina devo impostare bad cache per effettuare due cache differenti quindi diciamo che è un attimo da personalizzare come plug-in possono avvenire dei comportamenti diciamo anomali se il vostro sito si comporta diversamente in base allo user agent o in base ad altri parametri della richiesta faccio un esempio se io ho una funzione all'interno del mio sito warpress che a seconda dell'ora della richiesta cambia il background della pagina io affetto la richiesta a mezzogiorno lui affetto la cache della pagina a mezzogiorno se la richiesta viene effettuata per dire a mezzogiorno a mezzogiorno è 5 e il background cambia perché a mezzogiorno è 5 e io ho specificato che il background deve essere diverso ma cosa succede che la cache mi fornisce indietro la pagina con il background precedente quindi anche qui bisogna stare attenti sul come impostiamo bad cache su quanto deve durare la cache perché con bad cache è possibile anche andare a specificare determinati valori per cui la cache viene effettuata diversamente quindi è un po' da configurare non c'è una formula generica per cui è possibile usarlo ma bisogna insomma andarsi a calare nel progetto che state andando ad ottimizzare e naturalmente anche cose tipo che andate a leggere il cookie oppure andate a leggere lo user agent per fornire risposte diverse per la pagina non è possibile effettuarlo in questo caso dovete fare due cache diverse a seconda dello user agent che è stato fornito nella richiesta e questo diciamo un po' quello che mette a disposizione php orpress senza andare a scommodare altri server quale sia varnish quale sia un ottimizzatore di richiesta http qui ho buttato giù alcuni esempi di un'installazione molto semplice molto vuota quindi diciamo che lasciano il tempo che trovano come numeri però già questi numeri possono farvi vedere come orpress può essere ottimizzato in questo caso la prima liga è un php semplice orpress installato classica selezione php mySQL a paci e con 10 richieste concorrenti ho impostato 10 richieste concorrenti ripetute per 100 volte alla fine questa è la media di richiesta che il mio server riusciva a fornire contemporaneamente quindi nemmeno una richiesta al secondo successivamente ho abilitato il caching del bytecode attraverso opcode che è già fornito in php cambia una direttiva di phpini e questo inizia già a funzionare e già qui vediamo che c'è un aumento delle performance naturalmente questo era un sito quasi bianco quindi diciamo questi numeri lasciano il tempo che trovano per quello poi dipende molto dall'installazione che fate da come distribuito il server, l'hardware sia geograficamente che a livello di software all'interno dello stesso e però già abbiamo visto che con il caching del bytecode c'è un incremento delle performance andiamo ad installare quindi un object caching a livello di WordPress qui in questo caso c'era il plugin memcached object cache più un memcached server con l'altro software installato sulla stessa macchina andiamo a vedere che già riusciamo ad arrivare a 7 richieste al secondo in contemporanea andiamo ad aggiungere ancora con badcache il page caching ovvero l'ultimo concetto che ho trattato e qui l'ho provato con diversi tipi di plugins v3do.cache su memcache v3do.cache su disco e quindi i valori sono quasi identici e poi abbiamo badcache memcached server e qui diciamo è dove c'è stata la performance maggiore questo tipo di naturalmente di caching system è quello che vi consiglio perché vi permette di scalare su istanze diverse di server di memcached e quindi potete avere due web server e 3, 4 server memcached dietro a questi riuscite a spegnere e tutto continua a funzionare perché memcached scala bene eventualmente potete anche effettuare caching distribuito su diverse location sparse sul territorio e diciamo che fino a qui abbiamo visto quello che WordPress permette di effettuare a livello di caching caching di badcode di PHP caching delle funzionalità di WordPress e caching di pagina e sono abbastanza semplici di utilizzare quindi andiamo a vedere un altro concetto che cosa succede che ogni volta che un file PHP viene chiamato il processo legge il file, esegue la richiesta esegue quello che c'è scritto all'interno del file PHP e fornisce la risposta all'utente e questo avviene per ogni pagina che noi andiamo ad eseguire ci sono però delle volte che quello che a me è quello che ha scritto nel file PHP alcune chiamate, alcune funzioni non servono per renderizzare la pagina non servono all'utente finale per vedere qualcosa sullo schermo quindi diciamo che se io ho dei task comunque delle chiamate di PHP di database che non servono a creare la pagina ma mi servono perché devo scrivere della roba sul database per essere usata successivamente queste possono essere demandati a dei task successivi vi faccio un esempio io ho il mio server ho il dei commenti aperti qualcuno inserisce specia un commento all'interno di un post cosa succede che WordPress inserisceaveso il commento e poi a un certo punto io, perché ho un dispositivo mobile l'applicazione WordPress devo ricevere la notifica push in tutto questo e devo inserire che l'informazione che qualcuno ha lasciato un commento all'interno del mio sito per questa pagina ha scritto questa cosa in un'altra tabella deve contattare il server e deve inviare questi dati per i device che ho registrato all'interno del mio sito che io utilizzo per gestire WordPress ma tutte queste informazioni all'utente che ha inserito il commento non interessa quindi tutto questo tipo di potenza computazionale e tempo impiegato per scrivere il database, la push notification contattare Google, Apple, server windows per inviare la push notification all'utente che ha inviato il commento non interessa ed è qui che entrano in gioco i task oppure i job differiti di WordPress ovvero io nell'execuzione del file PHP per scrivere altrove un task, un oggetto dentro questo oggetto ci sono le informazioni che io voglio riutilizzare successivamente e quindi WordPress cosa fa scrive all'interno di questa tabella di questo sistema il task e continua con l'eseguizione della pagina e viene renderizzato la risposta che nel caso dell'esempio che ha inserito il commento è in fase di rappresentazione da parte dell'autore del sito quindi questo è un po' quello che fa l'utente scrive su WordPress, scrive nel job system WordPress immediatamente passa alla fase di renderizzazione del contenuto e poi fornisce la risposta all'utente il job system in questo caso ci sono diverse implementazioni che voi potete trovare in giro in particolare in questo caso io sto parlando del job che voi trovate a questo indirizzo che è quello che bene anche utilizzato da WordPress.com è praticamente basato anche questo su PHP e MySQL e voi lo mettete in eseguzione dopo che l'avete installato avete configurato WordPress per comunicare con il job system e succede che ogni volta che voi andate a scrivere un job dentro questo nuovo sistema a chiamare il job system scrive questo blog di informazioni e continua la sua eseguzione il job system successivamente che è scritto in PHP e sostesso a dei demoni che girano dei processi sempre in eseguzione prendono quello che è scritto all'interno del job eseguono la diciamo la richiesta e elaborano quello che è il codice del job in questo caso per esempio facciamo un esempio della push notification cosa avviene che venne caricato il job system carica il job dal database controlla che lo user reddisi anche l'autore del post controlla che l'autore del post abbia un device registrato controlla le sue preferenze di notifica della push notification controlla il tipo di device e poi va a chiamare il server remoto per inviare la notifica tutte queste attività diciamo che sono super fle per essere eseguite nel momento di renderizzazione della pagina, possono essere differite e in questo caso noi abbiamo fatto utilizzando il job system che ho illustrato precedentemente che è anche disponibile qui sul track di WordPress quello ufficiale un po' complicato da installare però diciamo che una volta installato riesce a darvi delle ottime prestazioni soprattutto per quello che riguarda tutti quei task che voi volete seguire al momento di elaborazione della richiesta ci sono anche altre implementazioni che magari sono un po' più semplici da installare un po' più semplici da usare però sono diciamo sono anche implementazioni più semplici di quello che ufficiale proposto da WordPress queste due diciamo potete vederle ma non offrono diciamo la libertà di installazione che vi offre questo anche se è più complesso da installare diciamo che con con l'eseguzione differida del codice abbiamo visto tutto un insieme di cose che possono essere utili per aumentare le vostre performance di WordPress con pochi semplici di attività di installazione sui vostri server e poi con questo è tutto lo so che siamo ritosti del pranzo ma abbiamo 10 minuti per le domande ciao diciamo che ci sono due concetti un po' diversi perché la chiamata diciamo che viene effettuata poi successivamente dal client verso il server e il server viene comunque impegnato ad eseguire quella chiamata quella chiamata hijacks arriverà al tuo web server che a meno che tu non la vai viene eseguita sul web server quindi andrà ad occupare delle risorse del web server l'utilizzo di un job system invece è diverso perché tu potresti avere un'altra macchina che esegue quello che va a leggere un altro database eventualmente i dati che tu avevi scritto e volevi eseguire successivamente quindi è proprio di saccoppiare l'esecuzione non la divieta di fare una chiamata hijacks successivamente che però va all'inizio sul tuo web server e immediatamente scrive un nuovo job però comunque tu avresti lo stesso due chiamate verso web server e quindi ti conviene inserirlo nella prima chiamata perché inserire un job all'interno della tabella è veramente facile perché la tabella del job sono tabelle sequenziali praticamente senza indicio comunque con l'indice ottimizzato che si sono scritture e letture sequenziali da quella tabella quindi andare a scrivere su quella tabella che occupa veramente pochissimo tempo allora, l'altro server è quando mi arriva una richiesta in io dei CSS in base al dispositivo che mi sta facendo la richiesta facendo la caccia della pagina cosa succede allora io ho affrontato questo problema per quanto riguarda la pagina di WordPress.org per scaricare le applicazioni mobile se io visito la pagina da un file da un dispositivo Android voglio vedere il link al Google Store se io visito una pagina dal dispositivo iOS voglio vedere il link all'Apple Store e lo stesso la pagina veniva personalizzata c'erano immagini diverse lo sfondo era diverso quindi diversi CSS per carare la pagina è possibile utilizzare le funzioni di personalizzazione nel caso che ho effettuato io era Backcash come caching di pagina, dovete creare dei gruppi e all'invisivo del codice per cui dici che quando arriva questo tipo di user agent lo scrive in questo gruppo poi anche utilizzare all'interno del codice della pagina all'interno del codice di personalizzazione di Backcash l'ID della pagina addirittura quindi se tu sa che quella pagina ha questo titolo oppure questo è di andare a fettuare il caching selettivo solo di quella pagina quindi tutto il tuo sito verrà casciato in maniera indifferente per i dispositivi però quella pagina tu la vuoi casciare come vuoi diciamo che con Backcash il livello di personalizzazione è estremo era anche abbastanza facile poi te cambia un file PHP effetto una richiesta sta succedendo quindi è possibile farlo diciamo che nel migliore dell'ipotesi si stalle via però poi devi andarlo a personalizzare in base ai tuoi server quindi quello che ti consiglio è cercare online e effettuare diverse richieste diverse ricerche perché online io ho trovato buone informazioni di casi reali e quindi tu già inizia a vedere cosa a cambiare, cosa a non cambiare e poi devi effettuare delle prove mettendo sotto carico il tuo server io lì l'ho fatto con 10 richieste concorrenti un test veramente semplice ma non ho voluto creare situazioni diverse perché poi molto dipende dal sistema operativo dalla topologia della rete dal tipo di database comunque se tu trovi online trovi tutte le informazioni per esempio cosa ho trovato io che non è il mio caso perché noi abbiamo una architettura completamente distribuita però se tu hai la stessa macchina dove c'è il server PHP non c'è nemmeno bisogno di andare a chiamare lo stack di rete tu puoi far comunicare PHP e memcash attraverso dei socket unix per esempio in questo caso tutto l'overhead della rete viene tolto via vai a limare un po' di prestazioni però ecco anche lì dipende sempre dalla macchina che hai l'unica cosa che ti posso dire è che devi fare le prove diciamo la faccia e tanto tempo