मैं Wordpress स्मृति की खपत पर एक करीबी नजर थी। मेरी साइट पर, ऐसा लगता है कि प्रत्येक पेज हिट के लिए 20MB RAM आवंटित हो जाता है, बस सभी प्लग इन को चलाने के लिए कम्फर्टेबल वातावरण तैयार करना है। मैंने इसे इसी प्रकार प्लॉट किया है:
अनुकूलन करने के लिए कोई एकल स्थान नहीं है, कोई भी बुरा आदमी नहीं है जो अधिकांश मेमोरी खाता है। खपत सभी कई कई php मॉड्यूल में फैली हुई है।
हम वर्डप्रेस को केवल एक बार मेमोरी में अपने परिवेश को कैसे आरंभ कर सकते हैं, और फिर इसे प्रत्येक हिट के लिए कई बार पुन: उपयोग करें? मैं प्रत्येक उपयोगकर्ता क्लिक पर धीमी गति से PHP 20 एमबी खाने के लिए नहीं करना चाहता हूं - यहां तक कि बहुत सारी मेमोरी वाले सर्वर पर, यह उस काम को पूरा करने के लिए सेकंड लेता है। आपको मूल रूप से मेमोरी की केवल पढ़ने की आवश्यकता होगी जिसे पुन: उपयोग किया जा सकता है।
इसके अलावा ... क्यों 20MB? किसी को भी इस में अंतर्दृष्टि प्रदान कर सकते हैं?
संपादित करें: यहाँ मेरे विकास मशीन पर चल रहे वर्डप्रेस पर WinCacheGrind आउटपुट है (साझा होस्टिंग की तुलना में तेजी से)। जैसा कि आप देख सकते हैं, यह मुख्य पृष्ठ के HTML का उत्पादन करने के लिए केवल एक सेकंड में क्रंच कर लेता है। साझा होस्टिंग द्वारा धीमा करें और आपके लिए परेशानी का एक नुस्खा है। मैंने वह तरीका चुना, जिसमें ज्यादातर समय लगता है। आप इसे कैसे अनुकूलित करेंगे?
संपादित करें: यहां इस शानदार कार्यप्रणाली से क्वेरी आँकड़े हैं ।
लोड: 12 क्वेरीज़ - 532ms - 19.1MB - 43 कैश हिट / 53 क्वेरी: 15 प्रश्न - 563ms - 19.0MB - 72 कैश हिट / 86 प्रदर्शन: 21 प्रश्न - 705ms - 19.2MB - 234 कैश हिट / 257
संपादित करें: क्या आप आपको बाहर निकालने के लिए कुछ गारंटी देखना चाहते हैं? Index.php के अंत में ये लाइनें डालें:
echo "<pre>\n";
print_r(get_defined_vars());
echo "</pre>\n";
मैंने यह गिनने की कोशिश की कि मेमोरी में वर्तमान पोस्ट का शरीर कितनी बार संग्रहीत है। मैंने 20 उदाहरण गिनाए। तब मुझे पता चला कि PHP में संदर्भ गिनती है, इसलिए प्रतियों की मात्रा घटकर केवल तीन हो गई: दो WP_Query में लग रहे हैं, एक वस्तु कैश में। मैं आगे की जांच कर रहा हूं।
यही कारण है कि मुझे लगता है कि वर्डप्रेस को मेमोरी मुद्दों को लक्षित करने की आवश्यकता है। अब आप इसकी स्मृति खपत पर यह नहीं कर सकते कि यह क्या करती है। यह बस चीजों का एक गुच्छा गलत करता है ।
संपादित करें: यह पता लगाने की कोशिश करने के एक दिन बाद, यहां मेरे निष्कर्ष हैं:
1) सभी मेमोरी का 88% आवश्यकता से आता है या इसमें शामिल हैं या शामिल हैं: कॉल के प्रकार:
2) php फ़ाइल में अनुरोध को प्रस्तुत करने के पहले भाग के दौरान अधिकतर होता है (आश्चर्य की बात नहीं), जो कि सभी मेमोरी को खाया जाता है:
3) अनुरोध करने के दौरान निष्पादित होने वाले सभी कार्यों की साजिश करना काफी दिलचस्प है। कुल 12000 से अधिक कॉल हैं। मैंने इसे और अधिक दृश्यमान बनाने के लिए उन्हें घबराहट दी (स्तर अक्ष मूल रूप से स्टैक की गहराई है):
4) आगे का एकमात्र तरीका जो मैं सोच सकता हूं, उसमें शामिल .php फ़ाइलों की मात्रा को कम करना है। यदि मैं उन फ़ाइल के फंक्शन्स को विभाजित करता हूं, तो आप देख सकते हैं कि कई फाइलें एक या दो बार हिट हो जाती हैं। हमें एक तरीका चाहिए कि जब उन्हें ज़रूरत न हो तो कैसे छोड़ें। उदाहरण के लिए मेरा रिमोट डेटाबेस बैकअप प्लगइन लोड और पंजीकृत हो जाता है, बस कभी भी उपयोग नहीं किया जाना चाहिए। यहाँ फ़ाइल नाम से उपरोक्त प्लॉट विभाजन है:
मैं अपनी सभी प्रतिष्ठा के लायक एक इनाम की पेशकश कर रहा हूं :) रिफैक्टरिंग के लिए जो कि मेरे ब्लॉग स्मृति पदचिह्न को 30% या अधिक से काटने के लिए प्रेरित करेगा।
संपादित करें: मैंने WP 3.1 स्थापित किया है, यहां पुराने संस्करण के साथ तुलना की गई है।
ब्लू WP 3.1 है, लाल 3.0.4 है। नया WP तेज़ है, लेकिन अधिक मेमोरी भी खाता है।
यहाँ एक सूची है जिसमें फ़ाइल शामिल है।
यह मुझे एहसास दिलाता है कि "ऑल इन वन एसईओ पैक" द्वारा कितनी मेमोरी खाई जाती है - एक एवेन्यू केवल प्लगइन की कार्यक्षमता का एक अंश का उपयोग करने के लिए होगा जो मुझे चाहिए। इसके अलावा, मेरे अपने प्लगइन्स बहुत खराब लग रहे हैं।
मैं उदाहरण पर comment.php पर सशर्त लोडिंग की कोशिश करना चाहूंगा (मैं अपने ब्लॉग पर टिप्पणियों को अस्वीकार करता हूं) और कई अन्य। मैंने सभी हटाए गए कोड को हटा दिया। मैंने केवल मांग पर अपने वैश्विक तालिकाओं को लोड करने के लिए kses.php की छंटनी की। मैंने l10n को सरल बनाया (मैं कोई स्थानीयकरण नहीं करता हूं), इसके कार्यों को बिना लुकअप के, तुरंत तारों को वापस कर देता हूं। मैं अभी भी मनमाने ढंग से स्थापित किए गए 30% के निशान से बहुत दूर हूं।
संपादित करें: मैंने एपीसी को डिफ़ॉल्ट सेटिंग्स (ओपकोड कैश के 32 एमबी) के साथ डाउनलोड और सक्षम किया है। यहाँ तुलना है:
आप देख सकते हैं कि कोड लोडिंग बड़े पैमाने पर तेज हो गई है, और कोड भी मेमोरी में कम जगह लेता है (शायद इसलिए कि हम सिर्फ ऑपकोड से निपटते हैं, मूल स्रोत से नहीं)। स्मृति की खपत हालांकि अभी भी काफी अधिक है।