2011-01-27 15 views
8

मैं PHP कोड के लिए दो कैशिंग तकनीकों के बारे में सुना है:एक PHP कैशिंग तकनीक का चयन: फाइलों में उत्पादन कैशिंग बनाम opcode कैशिंग

  1. जब एक PHP स्क्रिप्ट उत्पादन यह स्थानीय फ़ाइलों में संग्रहीत करता है उत्पन्न करता है। जब स्क्रिप्ट को दोबारा बुलाया जाता है तो यह जांचता है कि पिछली आउटपुट वाली फ़ाइल मौजूद है या नहीं और यदि सत्य इस फ़ाइल की सामग्री देता है। यह ज्यादातर "आउटपुट बफर" के आसपास खेलने के साथ किया जाता है। इस तरह कुछ कुछ this आलेख में वर्णित है।

  2. एक प्रकार का ऑपोड कैशिंग प्लगइन का उपयोग करना, जहां संकलित PHP कोड स्मृति में संग्रहीत किया जाता है। इनमें से सबसे लोकप्रिय एपीसी है, eAccelerator भी।

अब सवाल यह है कि क्या यह दोनों तकनीकों का उपयोग करने या बस उनमें से एक का उपयोग करने के लिए कोई समझ है या नहीं। मुझे लगता है कि पहली विधि कार्यान्वित करने में थोड़ा जटिल और समय लेने वाली है, जब दूसरा एक साधारण प्रतीत होता है जहां आपको मॉड्यूल को स्थापित करने की आवश्यकता होती है।

मैं उबंटू/डेबियन पर PHP 5.3 (PHP-FPM) का उपयोग करता हूं।

बीटीडब्ल्यू, क्या PHP कोड या आउटपुट कैश करने के लिए कोई अन्य तरीका है, जिसका मैंने यहां उल्लेख नहीं किया है? क्या वे विचार करने लायक हैं?

उत्तर

7

आपको हमेशा एपीसी जैसे ऑपोड कैश होना चाहिए। इसका उद्देश्य आपके कोड की पार्सिंग को तेज करना है, और भविष्य के संस्करण में PHP में बंडल किया जाएगा। अभी के लिए, यह किसी भी सर्वर पर एक साधारण इंस्टॉल है और आपको किसी भी कोड को लिखने या बदलने की आवश्यकता नहीं है।

हालांकि, कैशिंग ऑपकोड आपके कोड के वास्तविक निष्पादन को गति देने के लिए कुछ भी नहीं करता है। आपकी बाधाएं आमतौर पर डेटाबेस से बात करने या डिस्क से पढ़ने/पढ़ने में व्यतीत होती हैं। आपके प्रोग्राम के आउटपुट को कैश करना अनावश्यक संसाधन उपयोग से बचाता है और परिमाण के आदेशों से प्रतिक्रिया तेज कर सकता है।

आप आउटपुट को अपने स्टैक के साथ कई अलग-अलग स्थानों पर कैशिंग कर सकते हैं। पहली जगह जो आप कर सकते हैं वह आपके अपने कोड में है, जैसा कि आपने सुझाव दिया है, आउटपुट बफर करके, इसे फ़ाइल में लिखना, और बाद में अनुरोधों पर उस फ़ाइल से पढ़ना।

हालांकि अभी भी प्रत्येक अनुरोध पर आपके PHP कोड को निष्पादित करने की आवश्यकता है। आप वेब सर्वर स्तर पर आउटपुट को कैश कर सकते हैं ताकि उसे छोड़ सकें। Mod_rewrite नियमों का एक सेट क्राफ्टिंग अपाचे को मौजूद होने पर PHP कोड की बजाय स्थिर फ़ाइलों की सेवा करने की अनुमति देगा, लेकिन आपको कैश किए गए संस्करणों को मैन्युअल रूप से या शेड्यूल किए गए कार्य के साथ पुन: उत्पन्न करना होगा, क्योंकि आपका PHP कोड चालू नहीं होगा ऐसा करने के लिए प्रत्येक अनुरोध।

आप अपने वेब सर्वर के सामने एक प्रॉक्सी भी चिपका सकते हैं और आउटपुट कैश करने के लिए इसका उपयोग कर सकते हैं। वार्निश इन दिनों एक लोकप्रिय पसंद है और उसी सर्वर पर आपकी PHP स्क्रिप्ट चलाने वाले अपाचे की तुलना में प्रति सेकंड सैकड़ों बार अधिक अनुरोध कर सकता है। कैश प्रॉक्सी स्तर पर बनाया और कॉन्फ़िगर किया गया है, इसलिए जब यह समाप्त हो जाता है, तो अनुरोध आपकी स्क्रिप्ट से गुज़रता है जो सामान्य रूप से पृष्ठ के नए संस्करण को उत्पन्न करता है।

+0

तुम मुझे downvoting हैं, लेकिन आपकी जानकारी गलत है !!!! – Alfred

+0

मैंने आपके जवाब में सुधार किया है क्योंकि मैंने इसे घटा दिया है। शांत हो जाओ। और रेडिस fanboy-ism नीचे टोन। –

+0

नहीं, मैं शांत नहीं हो सकता, आप मुझे कम कर रहे हैं (बिना किसी सही कारण के)। यदि आपके पास ऐसा करने के वैध कारण थे तो मैं इसे समझ सकता था। लेकिन मैं PHPGuy की मदद करने की कोशिश कर रहा हूं और मुझे जो कुछ मिलता है वह कम हो गया है। – Alfred

0

कई बार, जब यह PHP वेब अनुप्रयोगों की बात आती है, डेटाबेस बाधा है। इस प्रकार, स्मृति में परिणामों को कैश करने के लिए आप सबसे अच्छी चीजों में से एक है memcached का उपयोग करना। आप अपने कोड को प्रोफाइल करने के लिए xhprof जैसे कुछ भी उपयोग कर सकते हैं, और वास्तव में सबसे अधिक समय लेते हुए डायल करें।

+0

यदि आपके पास केवल एक बॉक्स है, तो memcached के साथ नेटवर्क ओवरहेड मेरी राय में एक अपशिष्ट है। अपने डेटा को कैश करने के लिए बस एपीसी का उपयोग करें (http://php.net/manual/en/function.apc-add.php)। – Alfred

0

हां, ये दो अलग-अलग कैश-तकनीक हैं, और आप उन्हें सही ढंग से समझ चुके हैं।

लेकिन 1 पर सावधान रहना): यदि सामग्री परिवर्तन तेजी से फाइल या प्रॉक्सी को

1.) कैशिंग स्क्रिप्ट उत्पन्न उत्पादन समस्याओं प्रदर्शित हो सकती हैं ।

2.) एक्स-कैश भी मौजूद है और उबंटू पर स्थापित करना आसान है।

संबंध है, /टी

0

अगर यह वास्तव में काम करेगा मैं नहीं जानता, लेकिन मैं एक PHP स्क्रिप्ट है कि मैं था के साथ एक प्रदर्शन समस्या भर में आया था। मेरे पास एक सादा पाठ फ़ाइल है जो डेटा को एक शीर्षक के रूप में संग्रहीत करती है और एक यूआरएल टैब को एक नई लाइन से अलग प्रत्येक रिकॉर्ड से अलग करता है। मेरी स्क्रिप्ट प्रत्येक यूआरएल पर फाइल पकड़ लेती है और इसे अपने फ़ोल्डर में सहेजती है।
फिर मेरे पास एक और पृष्ठ है जो वास्तव में स्थानीय फ़ाइलों को प्रदर्शित करता है (इस मामले में, चित्र) और मैं preg_replace() का उपयोग दूरस्थ URL से प्रत्येक रिश्तेदार को एक रिश्तेदार में बदलने के लिए करता हूं ताकि इसे सर्वर द्वारा प्रदर्शित किया जा सके। मेरी टैब से अलग फ़ाइल अब 1 एमबी से अधिक है और preg_replace() करने में कुछ सेकंड लगते हैं, इसलिए मैंने आउटपुट कैशिंग में देखने का फैसला किया। मुझे कुछ भी निश्चित नहीं मिला, इसलिए मुझे लगा कि मैं अपने हाथों की कोशिश करूँगा और यहां मैं इसके साथ आया हूं:

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

अब मैंने अभी तक यह कोशिश नहीं की है, लेकिन सैद्धांतिक रूप से, यह मेरे प्रदर्शन को बहुत बेहतर बनाना चाहिए, हालांकि यह वास्तव में अभी भी स्क्रिप्ट चलाता है, लेकिन डेटा कभी भी पुराना नहीं होगा और मुझे बहुत बेहतर भार मिलना चाहिए पहर।

उम्मीद है कि इससे मदद मिलती है।

2

आप जानते हैं, मेरे लिए, optcache, filecache .. आदि केवल डेटाबेस कॉल को कम करने के लिए उपयोग करते हैं। वे आपके कोड को तेज नहीं कर सकते हैं। हालांकि, वे आपके आगंतुकों की सेवा के लिए कैश का उपयोग करके पृष्ठ लोड में सुधार करते हैं।

मेरे साथ, एपीसी वीपीएस या समर्पित सर्वर के लिए पर्याप्त है जब मुझे विजेट्स कैश करने की आवश्यकता होती है, मेरे ऑब्जेक्ट सर्वर को सहेजने के लिए $ ऑब्जेक्ट।

यदि मेरे पास 2 से अधिक सर्वर हैं, तो मुझे Memcache का उपयोग करना पसंद है, वे कैश करने के लिए स्मृति का उपयोग करने पर अच्छे हैं। हालांकि यह आपके ऊपर है, हर कोई memcached की तरह नहीं, और एपीसी की तरह हर कोई नहीं।

पूरे वेब पेज को कैशिंग करने के लिए, मैंने बहुत सारे वर्डप्रेस चलाए, और मैंने कुछ कैश प्लगइन्स जैसे डब्ल्यू 3 टोटल कैश पर एपीसी, मेमकैच, फाइलकैच का उपयोग किया। और मैं देखता हूं (मेरा अपना एक्सप): फ़ाइलकैच पूरी वेबसाइट कैशिंग के लिए अच्छा है, मेमोरी कैश $ ऑब्जेक्ट कैशिंग के लिए अच्छा है

यदि आपकी हार्ड ड्राइव धीमी है, तो फाइलकैच आपके सीपीयू को बढ़ाएगा, और मेमोरी कैश भयानक है यदि आप ' आपके वीपीएस पर पर्याप्त स्मृति नहीं है।

एक एसएसडी एचडीडी फ़ाइल पढ़ने/लिखने के लिए बहुत अच्छी गति होगी, लेकिन मेमोरी हमेशा तेज होती है। हालांकि, मानव नहीं देख सकता कि इन गतियों के बीच क्या अंतर है। आप केवल अपनी प्रोजेक्ट और अपने सर्वर (रैम, एचडीडी) पर एक विधि आधार चुनते हैं या आप साझा वेब होस्टिंग पर हैं?

अगर मैं एक साझा होस्टिंग पर हूं, बिना रूट अनुमति के, php.ini के बिना, मुझे phpFastCache का उपयोग करना पसंद है, यह सेट, प्राप्त, आंकड़े, केवल हटाए जाने के साथ एक साधारण फ़ाइल कैश विधि है।

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

और यदि आप स्थिर। एचटीएमएल कैश पर रीडायरेक्ट करने के लिए .htaccess का उपयोग कर सकते हैं यदि आप पूरे पृष्ठ को कैश करते हैं तो यह एक अच्छी बात है।/क्वेरी कॉल

  1. डाटाबेस कम करें:

    भविष्य में, एपीसी या कुछ Optcache PHP संस्करण में बंडल होगा, लेकिन मुझे यकीन है कि सभी कैश अपने कोड में तेजी लाने नहीं कर सकता हूँ, वे करने के लिए इस्तेमाल करते हैं।

  2. सेवा कैश द्वारा पृष्ठ लोड की गति में सुधार करने के लिए सुधार करें।
  3. अपने एपीआई लेन-देन अथवा cURL अनुरोध (बिंग की तरह) में सहेजें ...

आदि ...

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