L'unica ragione per cui posso pensare è che il calcolo di ETag
potrebbe essere costoso. Se le pagine cambiano molto rapidamente, è probabile che la cache del browser venga invalidata dallo ETag
. In tal caso, calcolare lo ETag
sarebbe una perdita di tempo. D'altra parte, una risposta di tipo 304
quando possibile riduce al minimo la quantità di tempo trascorso nella trasmissione. Quali sono alcune buone linee guida per quando lo ETag
rischia di essere un vincitore netto se implementato con Django CommonMiddleware
?Qualche motivo per non utilizzare USE_ETAGS con CommonMiddleware in Django?
risposta
Non capisco perché stai cercando una ragione per non fare qualcosa. Tuttavia la tua analisi è lungi dall'essere completa: le richieste condizionali/304 risposte possono effettivamente rendere la tua applicazione molto più lenta di quanto farebbe se togliessi l'if-modified-since/if-none-match, tuttavia mantengono i motori di ricerca felici e sono vantaggiosi con Replication Server-server (ad esempio su CDN)
C.
Come con qualsiasi meccanismo di caching, sarà necessario valutare il trade-off tra il tempo trascorso manipolare la cache e larghezza di banda salvato a causa di esso.
Come dici tu, se la risposta sta cambiando spesso, ETags potrebbe non essere molto utile. Gli ETag sono un metodo per memorizzare tutte le risposte nella cache, quindi se la risposta cambia spesso non viene in realtà memorizzato nella cache. Tuttavia, suppongo che dal momento che gli ETag sono di uso comune, le implementazioni dei browser sono in modo risonabile velocemente e probabilmente anche Django è abbastanza veloce.
Forse ci sono altre aree prima della risposta che potrebbero trarre vantaggio dalla memorizzazione nella cache con, ad esempio, memcached.
Ancora una volta, sarà utile provare a profilare questo con i tuoi dati reali piuttosto che generalizzare a "fare o non usarlo".
Ci sono molti modi per gestire la cache, ed è spesso specifica applicazione, propongo nei primi scenari come si potrebbe considerare l'utilizzo USE_ETAGS
da django.middleware.common.CommonMiddleware
:
dividere la vostra applicazione tra cacheable e gunicorn non-cacheable le istanze. Collega il sito al proxy inverso. Quindi continuare con,
Scrittura del codice che invalida la cache sui salvataggi del modello. Come passaggio successivo,
Scrivere il proprio middleware di memorizzazione nella cache personalizzato.
- 1. GROUP CONCAT non funziona per qualche motivo
- 2. Qualche motivo per assegnare -0?
- 3. Motivo per non utilizzare LINQ
- 4. Qualche motivo per utilizzare NSViewAnimation su tecniche CoreAnimation?
- 5. C'è qualche motivo per cui MicrosoftAjax.js non è stato minimizzato?
- 6. Qualche motivo per usare byte/short ecc. In C#?
- 7. Motivo per utilizzare DECIMAL (31,0)
- 8. C'è qualche motivo per usare "return! 0" in javascript?
- 9. C'è qualche motivo per usare il threading.Lock over multiprocessing.Lock?
- 10. Qualsiasi motivo per non utilizzare '+' per concatenare due stringhe?
- 11. C'è qualche motivo per utilizzare Google GCM vs Apple messaging per le notifiche push?
- 12. Qualche motivo per utilizzare le proprietà autoattive rispetto alle proprietà implementate manualmente?
- 13. C++: C'è qualche motivo per usare uint64_t invece di size_t
- 14. HtmlAgilityPack - Lo <form> si chiude per qualche motivo?
- 15. C'è qualche motivo per preferire UTF-16 su UTF-8?
- 16. C'è qualche motivo per usare se (1 ||! Foo())?
- 17. API MapQuest: qualche motivo per utilizzarlo su Google Maps?
- 18. La tabella MySQL incrementa di 10 per qualche motivo
- 19. Qualsiasi motivo per non utilizzare SQLObject su SQLAlchemy?
- 20. C'è qualche motivo per precaricare i drawable dalle risorse?
- 21. C'è qualche motivo per non pubblicare il contenuto https su una pagina pubblicata su http?
- 22. C'è qualche motivo per usare Netty con Disruptor in termini di prestazioni?
- 23. Esiste un motivo tecnico per non utilizzare un TWebBrowser in Delphi per visualizzare Google Earth?
- 24. Per qualche motivo non riesco a produrre caratteri accentati nella console [é, ü, ecc.]
- 25. C'è qualche motivo tecnico/concettuale per cui iOS non supporta Cocoa Bindings?
- 26. C'è un motivo per non usare AssertionHelper con NUnit?
- 27. Qualche motivo per non aggiungere l'intestazione "Cache-Control: no-transform" ad ogni pagina?
- 28. Come utilizzare select_related con GenericForeignKey in django?
- 29. Quando utilizzare il motivo decorativo?
- 30. Qualche ragione per continuare a utilizzare CVS?
Questa risposta non è molto utile per diversi motivi: 1) La seconda frase contiene diverse idee che potrebbero essere suddivise in diverse frasi. 2) Perché non dovrei cercare una buona ragione per non fare qualcosa? 3) dichiari che 304 risposte possono rendere le cose più lente senza spiegare perché. Mentre tu hai menzionato qualcosa sull'uso di if-modified-since (non so come si applica a ETag) e se non c'è nessuna corrispondenza, ma questa non è una gran spiegazione. 4) "mantengono i motori di ricerca felici"? Intrigante, ma estremamente vago. – allyourcode