• CACHE, gioie e dolori

    Ciao,
    Facciamo che ho un sito non WordPress, faccio un bel po' di modifiche grafiche e funzionali, .js e.css, metto online i nuovi file.
    Io vedo il nuovo layout ma gli utenti vedono ancora la vecchia versione.

    Per esempio, può essere molto utile assegnare ai file un n. di versione, nomefile.css?v=1.0 e modificarlo dopo le modifiche, ma secondo me non basta.. Alcuni browser come Firefox e Safari hanno una cache tosta..

    Esiste una soluzione? A parte quella di contattare uno a uno gli utenti telefonicamene e dirgli di svuotare la cache del browser 😂


    giulio.marchesi 1 Risposta
  • Scusate ho sbagliato categoria, avrei dovuto postare in HTML e CSS


  • User Attivo

    @mpmisco in pratica devi svuotare la cache di WordPress, puoi farlo in diversi modi:

    • con plugin: a seconda del plugin di caching che usi (uno dovrai usarlo!!), trovi l'impostazione, ad esempio io con Autoptimize ho un'opzione "pulisci la cache CSS/JS"
    • senza plugin: accedi tramite FTP, nel file wp-config.php aggiungi questa riga di codice:
      define('ENABLE_CACHE', false);
      in questo modo viene (momentaneamente) disabilitata, poi se vuoi riattivarla basta che elimini questa stringa; per eliminare i file di cache già presenti, nella cartella wp-content trovi una sottocartella cache, elimini tutto il suo contenuto (nel dubbio, sempre meglio eliminare il suo contenuto e non direttamente la cartella!)

    ? 1 Risposta
  • @giulio-marchesi

    Ciao, scusa non ho chiarito bene ch nell'esempio che ho fatto NON uso WordPress


    giulio.marchesi 1 Risposta
  • User Attivo

    @mpmisco ah certo, ho letto male io 😄 beh che dire: ogni CMS ha la cache salvata in un certo modo (quindi una sua cartella, a cui accedi sempre tramite FTP), concettualmente non cambia, si tratta appunto di sapere come quel CMS organizza le cose; analogamente, se il CMS dispone di plugin di caching, la procedura "svuota cache" è sempre intuitiva, analoga quindi ai plugin di WordPress.


  • @giulio-marchesi

    È HTML puro con alcune funzioni in PHP, nessun CMS. C'è una cache impostata in .htaccess e con tempi piuttosto lunghi, per farti capire un esempio di una riga:

    ExpiresByType text/javascript  "access plus 1 year"
    

    Quindi i browser dovrebbero memorizzare la cache per 1 anno, cosa che è ottima per le prestazioni e sulla base del fatto che il sito non sarebbe mai stato toccato... mai dire mai 😱

    Ora cerco una soluzione efficace per risolvere il problema, la prima cosa a cui ho pensato è uno script "onload" che forza la cancellazione dela cache del browser, un sola volta, ma oltre a essere una sciocchezza credo non sia posibile in alcun modo (per fortuna).

    Inserendo tra il tag head

    <META HTTP-EQUIV="Pragma" CONTENT="no-cache">
    <META HTTP-EQUIV="Expires" CONTENT="-1">
    

    pensi che potrebbe "forzare" a caricare i nuovo stili?


    shazarak 1 Risposta
  • Miglior Risposta
    User Attivo

    @mpmisco prova a rinominare i file da nomefile.css?v=1.0 a nomefile_1.css e simili
    però la teoria vuole che anche con ?v=1.0 dovrebbe vederlo come nuovo file, mah

    non è che hai tipo un server cache level che ti cacha tutto e strippa le query? magari ti basta flushare lato server e sei a posto


    ? 2 Risposte
  • @shazarak ha detto in CACHE, gioie e dolori:

    @mpmisco prova a rinominare i file da nomefile.css?v=1.0 a nomefile_1.css e simili
    però la teoria vuole che anche con ?v=1.0 dovrebbe vederlo come nuovo file, mah

    non è che hai tipo un server cache level che ti cacha tutto e strippa le query? magari ti basta flushare lato server e sei a posto

    Ciao, si ho provato ad aggiungere un numero di versione ?v=1.0 ma cercavo di capire se esistono metodi più efficaci, o forse no nesiste nessun metodo?


    shazarak giulio.marchesi 2 Risposte
  • User Attivo

    @mpmisco parlo per quel che ne so io, quindi può anche darsi che sparo solo cazzate, quindi prego chiunque di correggermi e bacchettarmi nel caso...

    come dicevo, puoi cambiare il nome del file oppure controllare le direttive di cache control, oppure controllare se per caso non c'è attivo un sistema di cache server level ( esempio siteground se non ricordo male)

    https://pressidium.com/blog/browser-cache-work/#:~:text=The basic idea behind it,content directly from its cache.

    https://medium.com/@codebyamir/a-web-developers-guide-to-browser-caching-cc41f3b73e7c#ab9e
    alla voce Cache busting con il versioning e fingerprint

    sotto sezione append query parla di known issues
    https://gtmetrix.com/remove-query-strings-from-static-resources.html
    che non ho capito se sia o meno deprecato

    poi dipende da come hai realizzato il sito , su quale hosting sta e quali eventuali servizi ci hai aggiunto ( cdn ad es. ecc)


  • User Attivo

    @mpmisco non ne sono sicuro, ma concettualmente mi viene in mente questo: se elimini fisicamente un file JS, CSS, la pagina che lo richiama fa riferimento ad un file che non esiste; quindi anziché modificare il file, prima fai così, lo elimini proprio. Poi copi la nuova versione, anche con lo stesso nome di prima. Non vorrei sbagliare, ma credo che a questo punto dovrebbe rifare da zero il caricamento (dato che per un po' faceva riferimento ad una risorsa non esistente) e quindi caricare la versione aggiornata. Di preciso non ho mai lavorato in questo modo, ma concettualmente mi torna, può avere senso la cosa.


    shazarak 1 Risposta
  • User Attivo

    @giulio-marchesi tu ragioni solo a 1 dimensione, quella del tuo browser. devi ragionare con tutti quelli del mondo.

    se cancelli un file per "un po di tempo" come dici tu, significa servire a tutto il mondo un sito con un file mancante, e quindi con un sito non visibile correttamente.

    poi , se anche fosse, e ricarichi il vecchio file uguale . il browser lo continuera ad avere in cache ,perche l'ultima volta che è passato dal sito, probabilmente avrà ricevuto la direttiva "tieni tutti i file css in locale per 1 anno"
    quindi ti servirà lo stesso vecchio file. a meno che tu non tenga il sito senza quel file per un anno intero....

    ne consegue che se vuoi invalidare completamente una cache, la soluzione migliore è cambiare la url di quell'asset.
    se con l'aggiunta delle query ci sono problemi noti. cambiando il nome del file, il problema non lo hai piu,
    sempre e soltanto se non hai anche livelli servr di caching ( nel qualcaso se non flushi anche quelli , ti continueranno a servire addirittura le url dei vecchi assets)


  • @shazarak ha detto in CACHE, gioie e dolori:

    @mpmisco prova a rinominare i file da nomefile.css?v=1.0 a nomefile_1.css e simili
    però la teoria vuole che anche con ?v=1.0 dovrebbe vederlo come nuovo file, mah

    Ho fatto un po' di prove, in particolare su 2 strutture esistenti da un paio di anni, pur essendo un tentativo un po' grossolano i test hano funzionato direi benissimo. La modifica di versione file mi pare che forzi il browser a ricaricare la cache.

    Io pensavo a trucchi, leciti o meno leciti, ma questo metodo risolve il problema.