2012-11-28 8 views
7

मैं html में बाह्य संसाधनों फिंगरप्रिंटिंग, जैसे के लिए filemtime उपयोग कर रहा हूँ:php clearstatcache() प्रदर्शन और मापदंडों स्पष्टीकरण

<link rel="stylesheet" href="screen-<?=md5(filemtime('screen.css'));?>.css"> 

मैं प्रभावी अद्यतन करने और टाइमस्टैम्प filemtime द्वारा लौटाए के बीच एक महत्वपूर्ण देरी देखा, तो मैं शीर्ष पर clearstatcache() जोड़ा गया, जो इस समस्या को हल करने लगता है। लेकिन php manual के अनुसार:

आप केवल जरूरत clearstatcache() यदि आप एक ही फ़ाइल नाम पर संचालन कई प्रदर्शन और कहा कि विशेष फ़ाइल के बारे में जानकारी की आवश्यकता होती है संचित नहीं किया जा करने के लिए कॉल करने के लिए।

तो मुझे आश्चर्य है कि क्या मैं इसे सही तरीके से उपयोग कर रहा हूं।

इसके अलावा, मैं पूरी तरह से हर कॉल पर कैश को साफ़ करने के प्रदर्शन को लेकर चिंतित हूं। क्या कोई मुझे बता सकता है कि क्या यह सर्वर में महत्वपूर्ण मंदी का कारण बन सकता है?


clearstatcache भी दो अतिरिक्त पैरामीटर स्वीकार करता है, लेकिन मैं उनके अर्थ की अनिश्चित हूँ: realpath कैश को साफ़ करने या नहीं करने

clear_realpath_cache या नहीं।

फ़ाइल नाम एक विशिष्ट फ़ाइल नाम के लिए रीयलपैथ और स्टेट कैश साफ़ करें; केवल तभी उपयोग किया जाता है जब clear_realpath_cache सत्य है।

मैं मिलता है नहीं क्या "realpath कैश" का अर्थ है, और मैं इसके बारे में कोई जानकारी प्राप्त नहीं कर सकता है। यह कोई मतलब clearstatcache इस तरह से कॉल करने के लिए पड़ता है: इरादे के साथ

clearstatcache(true,'/path/to/screen.css'); 

कि विशिष्ट फ़ाइल से संबंधित केवल जानकारी स्पष्ट करने के लिए (और इसलिए clearstatcache की "प्रभाव" को कम)?

+1

क्या कोई कारण है कि आप 'md5 (filemtime (' screen.css ') का उपयोग कर रहे हैं,' बस 'filemtime (' screen.css ') के बजाय '32-बिट संख्या का 128-बिट हैश अंतर्निहित 32-बिट संख्या के रूप में अभी भी उतना ही अच्छा है। – jedwards

+0

@jedwards बस अंक और अक्षरों की ठंडाता के लिए ;-) लेकिन आप सही हैं, प्रदर्शन के अनुसार – Giona

+0

आप हमेशा 'dechex (filemtime (' screen.css ')) या यहां तक ​​कि' str_pad (dechex ' (filemtime ('screen.css')), 8, '0', STR_PAD_LEFT) '- बस एक विचार – jedwards

उत्तर

1

ऐसा लगता है कि समारोह सही ढंग से उपयोग कर रहे हैं। जब तक आप अन्य स्टेट फ़ंक्शंस (जैसे दस्तावेज़ में सूचीबद्ध) का उपयोग नहीं कर रहे हैं, तो आप कैश पसंद करेंगे, मुझे कोई कारण नहीं पता कि इससे महत्वपूर्ण मंदी होगी।

जब आप include('somefile'), somefile विभिन्न स्थानों की संख्या में, के रूप में अपने include_path, CWD, आदि जैसी चीजों के द्वारा निर्धारित किया जाता realpath कैश बस बार-बार इन स्थानों खोज करने के लिए की आवश्यकता समाप्त हो सकता है।

अपने उपयोग के लिए, अपने कोड ठीक लग रहा है।

+2

आपके उत्तर के लिए धन्यवाद। उहम, तो क्या मुझे "सामान्य" 'clearstatcache()' या 'clearstatcache (सत्य, anyfileneeded) का उपयोग करना चाहिए? – Giona

+0

सबसे अधिक संभावना है, मैं सामान्य 'clearstatcache()' फ़ंक्शन का उपयोग करूंगा। एकमात्र अपवाद होगा यदि मैं कई और अधिक कार्य फ़ंक्शंस कर रहा था जो मैंने * कैश किया था। – jedwards

+0

बिल्कुल सही, मुझे आपका अंक मिला। धन्यवाद! – Giona

2

$ clear_realpath_cache realpath फ़ंक्शन पर कॉल से संबंधित है, जिसके परिणाम भी कैश किए गए हैं। इसका फ़ाइल कॉलटाइम पर आपकी कॉल पर कोई प्रभाव नहीं होना चाहिए।

+1

बहुत बहुत धन्यवाद। क्या आपको कोई एहसास है कि फ़ाइल नाम पैरामीटर क्यों है "केवल अगर clear_realpath_cache सत्य है तो प्रयोग किया जाता है", लेकिन यह "वास्तविक फ़ाइल ** और ** केवल एक विशिष्ट फ़ाइल नाम के लिए स्टेट कैश साफ़ करता है" ...? – Giona

2

मैं इस सवाल का जवाब सीधे नहीं दे सकता।

लेकिन मैं तुम्हें md5_file('screen.css') बजाय md5(filemtime('screen.css')) का उपयोग सुझाव देते हैं।

+1

इस "छुपे हुए मणि" के लिए धन्यवाद :) – Giona

+3

मुझे इस बारे में पता नहीं है। दो स्निपेट बहुत अलग चीजें करते हैं। दूसरा 32-बिट पूर्णांक का हैश लेता है। सबसे पहले एक पूरी फाइल का हैश लेता है। पहला लगभग आवश्यक काम है। (हालांकि मुझे नहीं लगता कि क्यों 'filemtime (' screen.css ') पर्याप्त नहीं है) – jedwards

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