2010-05-12 12 views
24

मैं एक छवि साझा करने वाली साइट बना रहा हूं और PHP के साथ फ्लाई पर छवियों का आकार बदलने और आकार बदलने वाली छवियों को आकार देने के पेशेवरों और विपक्ष को जानना चाहता हूं।आकार छवियों को संग्रहीत करने के लिए फ्लाई बनाम PHP छवि का आकार बदलना

कौन सा तेज़ है?

जो अधिक विश्वसनीय है?

गति और प्रदर्शन में दो तरीकों के बीच अंतर कितना बड़ा है?

कृपया ध्यान दें कि छवियों जैसे दृश्यों के लिए पीएचपी स्क्रिप्ट के माध्यम से या हॉटलिंकिंग इत्यादि के लिए छवियों के माध्यम से किसी भी तरह से जाना जाता है ... तो ऐसा नहीं है कि अगर मैं आकार बदलने वाली छवियों को स्टोर करना चुनता हूं तो यह छवियों के लिए एक सीधा लिंक होगा।

मैं आपकी टिप्पणियों या विषय पर किसी भी उपयोगी लिंक की सराहना करता हूं।

+0

अच्छा सवाल, हम सोच सकते हैं कि छवियों को थंबनेल खराब करना बुरा है क्योंकि यह आपकी वेबसाइट का बैकअप लेने पर डुप्लिकेट छवियां और बेकार डेटा बनाता है। सलाह के लिए – baptx

उत्तर

16

यह समयपूर्व अनुकूलन की तरह लगता है। क्या आप जानते हैं कि आपकी साइट के कितने उपयोगकर्ता होंगे/आपके सर्वर के कितने कम्प्यूटेशनल ग्रंट होंगे? सबसे सरल (रखरखाव के अनुसार) विकल्प के साथ जाएं, यानी फ्लाई पर आकार बदलें, जब तक प्रदर्शन कोई समस्या न हो जाए, तब वहां से पता लगाएं कि क्या करना है।

यदि आपके बार बार-बार हिट होने की संभावना है, तो यह आपके पुनर्वित्तित छवियों के कुछ प्रकार के सर्वर साइड कैशिंग को कार्यान्वित करने का विचार हो सकता है, लेकिन मुझे नहीं लगता कि यह स्पष्ट पूर्व-प्रतिपादन तक विस्तार की आवश्यकता है।

+0

धन्यवाद। मैं वर्तमान में सभी थंबनेल को कैश कर रहा हूं क्योंकि एक पृष्ठ में बहुत से लोग होंगे और चित्र पृष्ठ और डाउनलोड विकल्पों के लिए गतिशील आकार बदल देंगे। – Pablo

+0

आप अपने स्वयं के Resizer एप्लिकेशन को आसानी से बना सकते हैं, इस रेपो को देखें: https://github.com/sadok-f/flyimg –

22

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

+0

आप सही हैं, मेरे पास मेरे लाइव होस्ट पर 400GB उपलब्ध है। मुझे लगता है कि मैं बस सभी आकार की छवियों को स्टोर करूंगा। साझा करने के लिए धन्यवाद। – Pablo

15

मैं दृढ़ता से सलाह देता हूं कि आप अपनी छवियों को कैश करें, और उड़ान भरने का आकार न लें।

छवियों का आकार बदलना बहुत सीपीयू गहन और आपके सर्वर के लिए स्मृति उपभोग है।

यदि आपके पास मक्खी पर स्केल करने वाली छवियों की एक गैलरी है, तो पृष्ठ धीरे-धीरे छवियों को लोड करने जा रहा है, 3-10 सेकेंड की तरह कुछ कहें, मूल फाइलसाइज पर निर्भर करता है।

इसका आकार बदलते समय आपकी स्मृति के लगभग 3 बाइट्स पीआर पिक्सेल लेते हैं। तो यदि आपके पास आकार बदलने के लिए 1000x1000 छवि है, तो इसमें लगभग 3 एमबी मेमोरी होगी। यदि आपके वेबपृष्ठों में से एक में इनमें से कई आकार बदलने वाली छवियां हैं, तो 20 कहें, इसमें आपके सर्वर का लगभग 60 एमबी रैम लगेगा। शायद नहीं, क्योंकि अधिकांश क्लाइंट उस समय केवल 4 छवियों का अनुरोध करते हैं, लेकिन 12 एमबी अभी भी एक पेजेलोड के लिए बहुत कुछ है। अगर स्रोत छवि कम 100x100 पीएक्स है तो मैं केवल फ्लाई पर स्केल करूंगा।

सुझाव: स्केलिंग और अंगूठे को बचाने के लिए एक महान lib PhpThumb

+0

इनपुट के लिए धन्यवाद, मैं फाइल सिस्टम में छवियों को बदनाम रूप से संग्रहीत कर रहा हूं। – Pablo

28

है यह बिल्कुल अतुलनीय मामलों है।

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

मेरे शब्दों को साबित करने के लिए त्वरित और गंदे परीक्षण:, 1,3 मेगापिक्सेल छवि

$ /usr/bin/time --format="%MK mem %Es CPU time" /usr/bin/convert angry_birds_1280x800.jpg -resize 100x100 thumb.jpg 
10324K mem 0:00.10s CPU time 

यह हमें 0,1s ले लिया है, इसलिए, के अपेक्षाकृत छोटे आकार बदलने के लिए कोशिश करते हैं 10 छवि पूर्वावलोकन दिखा एक खा जाएगा आपके सीपीयू समय का पूरा दूसरा। जबकि सही ढंग से लिखा गया PHP गैलरी पेज लगभग 0,01 लेगा। तो, फ्लाई पर अपने आकार के साथ आप सर्वर के लोड को 100 के कारक से बढ़ा रहे हैं।

स्मृति के साथ ही। प्रत्येक आकार की प्रक्रिया 100 एम की कुल राशि के साथ 10 एम से कम स्मृति (100k छवि फ़ाइल का आकार बदलने के लिए) नहीं खाएगी। जबकि PHP स्क्रिप्ट के लिए सामान्य स्मृति सीमा केवल 8 मीटर है और यह शायद ही कभी पहुंच जाती है।

वास्तविक जीवन संख्याएं हैं।

एक कुछ हद तक हास्यास्पद इस समस्या से संबंधित बात:
वास्तव में एक ही पीएचपी उपयोगकर्ता जो आसानी से अविश्वसनीय 1 या 2 अतिरिक्त जलन हो रही एक ही समय में CPU चक्र की दूर 1000000s फेंक! यह भाषण का एक आंकड़ा है, यहाँ नहीं है कि मैं क्या बात कर रहा हूँ पर एक उदाहरण है:
एक similar question किसी से, जिसका महान speed difference between Constants, Variables or Variable Arrays के रूप में के रूप में नगण्य बात में एक ही समय में चिंता का विषय। और हाल ही में run into allowed memory size exhausted problem, जैसा कि इस तरह की आपदा पर्याप्त नहीं थी।

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

और साथ ही इस तरह के प्रश्न हैं - दो दृष्टिकोणों के बीच प्रदर्शन के संदर्भ में विशाल, अतुलनीय अंतर के संबंध में, जो केवल लेखक के बराबर दिखता है।

औसत PHP उपयोगकर्ता और इस साइट के साथ यह समस्या है।
पूर्व में माइक्रोस्कोपिक से वास्तविक चीजों को बताने के लिए कोई उपाय नहीं है।
फिर भी उत्तरार्द्ध में प्रश्नों के लिए सैनिटी जांच के लिए कोई तंत्र नहीं है - हर किसी ने समान उत्साह के साथ उत्तर दिया, भले ही दो प्रश्न एक दूसरे के साथ विरोधाभास करते हैं (और दोनों सामान्य ज्ञान के साथ)।

+0

ओपी का प्रश्न प्रति से पूछता है कि कौन सा तरीका बेहतर है, और निश्चित रूप से, छवियों का आकार बदलना और उनका आकार बदलना एक बड़ा प्रदर्शन बढ़ावा और अतुलनीय मामला है। इस तथ्य को शामिल नहीं करते कि ऑन-द-फ्लाई विधि का उपयोग करते समय, एक ही छवि को दो बार आकार देने (कम से कम) सबसे खराब प्रदर्शन है जिसे आप प्राप्त कर सकते हैं। लेकिन, अगर ऑन-द-फ्लाई छवि आकार बदलने वाली सेवा का उपयोग इसके सामने कुछ सीडीएन के साथ किया जाता है, इसलिए प्रत्येक छवि को कैश किया जाता है, यह एक बहुत अच्छा विकल्प हो सकता है। दरअसल, मैं कह सकता हूं कि यह आकार में छवियों को डिस्क पर संग्रहीत करने का आलसी संस्करण है। – eAbi

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