2011-05-26 6 views
6

this answerCan I gzip JavaScript and CSS files in Django? के अनुसार:सीएसएस और जेएस डीजेगो के माध्यम से क्यों नहीं जाना चाहिए?

आपका CSS और JS अपने उत्पादन प्रणाली पर Django के माध्यम से जा नहीं होना चाहिए। इन्हें सेवा करने के लिए आपको अपाचे (या Nginx, या जो कुछ भी) कॉन्फ़िगर करने की आवश्यकता है, और जब आप ऐसा करते हैं तो आप Django के बजाय वहां gzip संपीड़न सेट अप करने में सक्षम होंगे।

उस प्रश्न के उत्तर इस आवश्यकता/सलाह के कारण की व्याख्या नहीं करते हैं। क्या यह एक अलग सर्वर से कार्यरत स्थिर सामग्री (छवियों/सीएसएस/जेएस) की गति के लिए बस एक अच्छा अभ्यास है? या इसका कोई आगे का हिस्सा है?

उत्तर

11

अपाचे और निगेंक्स Django से तेज़ हैं (क्योंकि वे बहुत कम और बहुत सरल चीजें करते हैं)। तो Django के साथ सीएसएस और जेएस की सेवा संसाधनों की बर्बादी है।

हालांकि "चाहिए" यहां बहुत मजबूत है, आईएमओ। "अगर, आपके पास उच्च ट्रैफिक है", बल्कि।

+0

भी। वेब लेनदेन का सबसे धीमा हिस्सा डेस्कटॉप है। क्या आप चाहते हैं (धीमी) Django उदाहरण स्थिर सामग्री की अंतहीन धाराओं को दबा रहा है? या आप महत्वपूर्ण गतिशील HTML पृष्ठ को धक्का देने के लिए (धीमे) Django उदाहरण को सीमित करना चाहते हैं? –

+0

मान्य रूप से, django.views.static से [django स्थैतिक मॉड्यूल] (https://docs.djangoproject.com/en/dev/howto/static-files/) अधिकांश सेवारत के लिए पर्याप्त है, और यदि आपको मिलता है तो संभावनाएं होती हैं अधिक ट्रैफिक से निपटने में सक्षम हैं, आप या तो एक अक्षम ऐप प्राप्त कर चुके हैं, या आपके पास अलग-अलग स्थिर फ़ाइलों को अलग-अलग करने के लिए आगे बढ़ने के लिए संसाधन होंगे। – sleepynate

+1

@ स्लीपिनेट: "अधिकांश सेवारत के लिए पर्याप्त है"। हमें यह मामला नहीं मिला। हमने पाया कि Django बहुत बहुत कम करते हैं और अपाचे जितना संभव हो उतना अधिक चीजों को और अधिक स्केलेबल बनाते हैं। अपाचे की तुलना में पाइथन धीमा है। –

3

वेब सर्वर द्वारा दी गई सामग्री को व्यापक रूप से दो श्रेणियों में वर्गीकृत किया जा सकता है।

  1. स्टेटिक
  2. गतिशील

स्टेटिक फ़ाइलें (सीएसएस/जे एस/Img ...) आम तौर पर नहीं बदलेगा (यानी, वे डिस्क से पढ़ा जा सकता है और ग्राहक के लिए भेज देते हैं। (कोई पूर्व प्रसंस्करण)

गतिशील फ़ाइलें (आपके गतिशील HTML पृष्ठों धक्का से पहले) की आवश्यकता आमतौर पर) विभिन्न तरीकों (db डेटा + प्रपत्र प्रक्रिया + संदेशों ... में संसाधित और ग्राहक के लिए भेज करने की आवश्यकता है।

जब कोई चीज़ बदलती नहीं है और किसी भी उपयोगकर्ता के लिए समान नहीं रहती है, तो उस काम को वेब ढांचे (इसके अतिरिक्त बोझ) पर असाइन न करें, वेब सर्वर को को संभालने दें।

2

उत्पादन वातावरण में आप पहले से ही असली http सर्वर जो django को जोड़ता है (या तो mod_python, fcgi या WSGI के माध्यम से) इसलिए इसकी सिर्फ आम भावना यह से सीधे फ़ाइलों की सेवा के लिए।

यह भेज देंगे प्रतिक्रियाओं तेजी:

  • आप ठीक से विन्यस्त अपाचे या nginx भूमि के ऊपर के माध्यम से स्थिर फ़ाइल की सेवा जब कम से कम हो जाएगा। अनुरोध सर्वर पर जांचता है कि निर्दिष्ट पथ में फ़ाइल मौजूद है तो यह इसे ब्राउज़र पर भेजती है (पाठ्यक्रम के कुछ शीर्षलेख जोड़ना)।
  • जब आप Django के माध्यम से स्थिर फ़ाइल की सेवा के पीछे अपाचे या nginx सबसे पहले वेब सर्वर django, तो Django चीजें जिस तरह से और अधिक जटिल संभालती जोड़ता है कॉन्फ़िगर किया गया:
    • अनुरोध वस्तु बनाता है, जब तक यह जिम्मेदार लाइनों पाता
    • रन urlpatterns regexp का मिलान स्थिर के लिए,
    • कुछ स्थिर सेवा कोड चलाता है जो इसे उपयोगकर्ता को वापस भेजता है ...

यह खपत होगी बहुत कम संसाधन:

  • प्रत्येक Django प्रक्रिया की खपत स्मृति के बहुत, उसी तरह से कॉन्फ़िगर किया अपाचे प्रक्रिया एक ही स्थिर फ़ाइल की सेवा तुलना में 10 गुना,
की तरह लगता है

यह बेहतर स्केल करेगा:

  • प्रोपे रेलवे के लिए कॉन्फ़िगर nginx 100x अधिक अनुरोध लेने वाली बहुत कम सीपीयू & स्मृति संभाल कर सकते हैं ...

यह आउटसोर्स किया जा सकता:

  • हालांकि यह लिखा है आप अपाचे कॉन्फ़िगर या nginx करने की जरूरत है आप नहीं हो सकता है - आप अमेज़ॅन एस 3 या Google एपीआई जैसी सेवाओं को उन फ़ाइलों को आउटसोर्स कर सकते हैं, इसलिए जेएस & सीएसएस उपयोगकर्ताओं के लिए "करीबी" होगा और यदि Google एपीआई जैसी सेवाओं में ऐसी लाइब्रेरी है जिसे आप जोड़ना चाहते हैं (जैसे jQuery) पहले से ही उपयोगकर्ता ब्राउज़र में कैश किया गया है।

ऐसी सभी चीजें एक साथ जोड़े गईं, बस आपकी साइट तेजी से लोड करेंगी।

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