2010-04-07 20 views
7

मैं गूगल क्रोम के लिए गूगल की गति ट्रेसर डाउनलोड किया कैसे मेरी साइट प्रदर्शन बुद्धिमान करता है देखने के लिए और यह मेरे मैं अपने style.css, चित्र, आदि जैसे कुछ फ़ाइलों के लिए कैशिंग सक्षम करने की आवश्यकतानियंत्रण-कैश हेडर का उपयोग कैसे करें?

मुझे लगता है कि पढ़ा है बताता है PHP कोड के नीचे HTML सामग्री को कैश करने के लिए ब्राउज़र को बताना चाहिए। मैंने इस पर दो छवियों के साथ एक त्वरित PHP पृष्ठ लिखा और यह देखने के लिए कि यह कैसे काम करता है, नीचे दिए गए कोड को शीर्ष पर (शीर्षलेख भेजे जाने से पहले) पर अटक गया।

Header("Cache-Control: public, max-age=3600, must-revalidate"); 

जब मैं वापस गति ट्रेसर के विश्लेषण में यह कहते हैं करने के लिए जाना ...

सारांश कैश से: झूठी

अनुरोध हेडर Pragma: कोई कैश कैश-नियंत्रण: अधिकतम आयु = 0

लेकिन के तहत प्रतिक्रिया शीर्षलेख ... कैश-कंट्रोल: सार्वजनिक, अधिकतम आयु = 3600, अनिवार्य रूप से (जिसे मैंने निर्दिष्ट किया है)

मैं थोड़ा उलझन में हूं, क्या हो रहा है ...? जब यह कैश से कहता है: सर्वर कैश से झूठा मतलब है और क्लाइंट के कैश नहीं?

+0

कृपया मुझे आपको –

उत्तर

4

कुंजी होगा दोबारा सत्यापित है: इसका मतलब है, कि क्लाइंट सर्वर पूछ रहा है, तो फ़ाइल बदल गया है। यदि आप इस मामले को संभाल नहीं पाते हैं, तो ब्राउज़र एक नई प्रति प्राप्त करेगा। अधिक जानकारी के लिए

Mark Nottingham’s fantastic Caching Tutorial पढ़ें। PHP कार्यान्वयन के लिए एक उदाहरण के रूप में आप my code का उपयोग कर सकते हैं।

ग्राहकों को सत्यापित करने के लिए $_SERVER['HTTP_IF_NONE_MATCH'] और $_SERVER['HTTP_IF_MODIFIED_SINCE'] देखें। और ध्यान रखें कि दोनों शीर्षलेखों में दुर्भावनापूर्ण कोड हो सकता है। ;)

+0

तो आपकी कहानियां क्या है, "छवियों, सीएसएस, स्क्रिप्ट आदि इत्यादि को कैश करना संभव है।" सर्वर कॉन्फ़िगरेशन को संशोधित किए बिना इस विधि का उपयोग कर? – payling

+0

हां, स्थिर फाइलें सर्वर द्वारा संभाली जाती हैं। निष्पादन योग्य फाइलें (पीएचपी, एसएसआई, सीजीआई) को खुद ही ऐसा करना है, क्योंकि सर्वर नहीं जानता कि वे किस सामग्री का उत्पादन करते हैं। – fuxia

+0

यह उत्तर गलत है - प्रदान किया गया हेडर सामग्री के कैशिंग को उचित रूप से कार्यान्वित करेगा। – symcbean

0

जब यह कैश से कहते हैं: झूठी कि सर्वर कैश और नहीं ग्राहक के कैश से क्या मतलब है?

^यह क्लाइंट कैश का जिक्र कर रहा है।

इस तरीके से कैशिंग स्थापित करना आपकी PHP फ़ाइलों को कवर करेगा, लेकिन आपको अपनी छवियों, सीएसएस, स्क्रिप्ट आदि को कैश करने के लिए कुछ और सर्वर पक्ष लागू करने की आवश्यकता होगी। यह .htaccess का उपयोग करके किया जा सकता है, यदि आपका सर्वर इसका समर्थन करता है ।

उदाहरण के लिए, मैं कुछ साइटों के लिए अपनी .htaccess फ़ाइल में उपयोग कर रहा हूं।

<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)(\.gz)?$"> 
    Header set Expires "Thu, 15 Apr 2012 20:00:00 GMT" 
    Header unset ETag 
    FileETag None 
</FilesMatch> 
+0

पर पोस्ट रखने के लिए रखें, मेरी इच्छा है कि यह मेरी साइट निर्देशिका में एक .htaccess फ़ाइल चिपकाने जैसा आसान हो। हमारी कंपनी आईआईएस 6 सर्वर किराए पर लेती है (जो .htaccess फ़ाइलों का उपयोग नहीं करती है) और मैं नहीं करता साइट निर्देशिका में ftp के अलावा सर्वर पर प्रत्यक्ष नियंत्रण है ... – payling

+0

@ पैलिंग: आईआईएस के पास शायद ही एक ही काम करने के लिए अपने स्वयं के कॉन्फ़िगरेशन हैंडलर हैं, लेकिन यदि सब कुछ विफल हो जाता है, तो आप अपने सीएसएस/आदि की सेवा के लिए एक PHP फ़ाइल का उपयोग कर सकते हैं, ' '। आपको वास्तव में केवल ऐसा करना चाहिए यदि आपको अवश्य ही करना चाहिए। – pinkgothic

0

मैं इस उपकरण से परिचित नहीं हूं, हालांकि जब तक किसी ब्राउज़र ने कैशिंग हेडर के साथ सामग्री नहीं ली है, तो वह इसे कैश करने में सक्षम नहीं होगा। ऐसा प्रतीत होता है कि आपका सर्वर अपेक्षित शीर्षलेख वापस भेज रहा है और पृष्ठ को ब्राउज़र द्वारा कैश किया जाना चाहिए - आपके ब्राउज़र को अब की कैश में एक प्रतिलिपि होनी चाहिए। यदि आप एक ही पृष्ठ फिर से लाने का प्रयास करते हैं तो यह मूल सर्वर की बजाय कैश से प्राप्त किया जाएगा (माना जाता है कि 1 घंटे की समय सीमा समाप्त नहीं हुई है)।

ध्यान दें कि कुछ ब्राउज़र कैश को अनदेखा करने और पृष्ठ को फिर से लाने के लिए एक स्पष्ट अनुरोध के रूप में एक ताज़ा अनुरोध की व्याख्या करेंगे - ताज़ा बटन को मारने के बजाय लिंक के माध्यम से इसे एक्सेस करने का प्रयास करें।

सी

+0

जहां तक ​​मैं कह सकता हूं, मेरे द्वारा पोस्ट किया गया कोड मेरे लिए कुछ भी नहीं करता है। मैंने ट्रैडलर का उपयोग ट्रैफिक का विश्लेषण करने के लिए किया था और कोड के साथ या उसके बिना ब्राउज़र कैश किए गए चित्र/स्टाइल शीट से चित्रित कर रहा था। यह मुझे भ्रमित करता है क्योंकि स्पीड ट्रैसर विपरीत कह रहा था ... मैं कुछ और जानने जा रहा हूं कि क्या हो रहा है। – payling

0

आप समझते हैं कि इन Cache-Control header field निर्देशों वास्तव में मतलब की जरूरत है:

  • public:

    इंगित करता है कि प्रतिक्रिया किसी भी कैश द्वारा संचित किया जा सकता है, भले ही यह आमतौर पर गैर-साझा करने योग्य कैश के भीतर गैर-कैश करने योग्य या कैशबल होगा। (यह भी Authorization, section 14.8 देखें, अतिरिक्त जानकारी के लिए।)

  • max-age=3600 निर्दिष्ट किया है कि प्रतिक्रिया 3600 सेकंड के लिए नए सिरे से है:

    जब अधिकतम उम्र कैश-नियंत्रण के निर्देश एक कैश्ड में मौजूद है प्रतिक्रिया, प्रतिक्रिया उस स्थिति के लिए नए अनुरोध के समय दी गई है जब उसकी वर्तमान आयु आयु मान (सेकेंड में) से अधिक है। प्रतिक्रिया पर अधिकतम आयु निर्देश का तात्पर्य है कि प्रतिक्रिया कैश करने योग्य है (यानी, "सार्वजनिक") जब तक कि कुछ अन्य, अधिक प्रतिबंधक कैश निर्देश भी मौजूद न हों।

  • must-revalidate निर्दिष्ट करता है कि एक कैश के बाद यह है कि कैश की गई प्रतिक्रिया का उपयोग कर अनुरोध को पूरा करने के लिए इससे पहले कि बासी बन गया एक कैश्ड प्रतिक्रिया को दोबारा सत्यापित करना होगा: जब आवश्यक पुनः सत्यापित निर्देश एक प्रतिक्रिया में मौजूद है

    कैश द्वारा प्राप्त किया गया है, कि कैश को किसी भी अनुरोध के जवाब देने के बाद मूल सर्वर के साथ इसे पुन: वैध किए बिना प्रविष्टि का उपयोग नहीं करना चाहिए। (यानी, कैश को हर बार एक अंत-से-अंत पुनर्मूल्यांकन करना चाहिए, अगर, केवल मूल सर्वर की समाप्ति या अधिकतम आयु मान पर आधारित, कैश प्रतिक्रिया प्रतिक्रियाशील है।) [...] सर्वर को अनिवार्य निर्देश भेजना चाहिए अगर और केवल अगर इकाई पर अनुरोध को पुन: सत्यापित करने में विफलता के परिणामस्वरूप गलत ऑपरेशन हो सकता है, जैसे चुपचाप अप्रत्याशित वित्तीय लेनदेन।

अब इस इन निर्देशों के अभीष्ट अर्थ है।

लेकिन हमेशा की तरह, वास्तविकता थोड़ा अलग है: विशेष रूप से होगा दोबारा सत्यापित केवल व्याख्या नहीं कर रहा है एक कैश्ड प्रतिक्रिया को दोबारा सत्यापित होने के बाद ही यह बासी हो गया है, लेकिन यह बाद के हर अनुरोध पर दोबारा सत्यापित किया जाना है कि या है कि यह करना चाहिए बिल्कुल कैश नहीं किया गया है (शायद यही कारण है कि यह बाद में अनुरोध में Cache-Control: max-age=0 भेजता है)।

"कैश से: झूठा" यह इंगित करता है कि प्रतिक्रिया कैश से नहीं बल्कि सीधे सर्वर से आई है।

संबंधित मुद्दे