2011-04-10 17 views
16

आईआईएस संपीड़न के दो प्रकार का समर्थन करता है। applicationHost.config के अनुसार, उन्हें विभिन्न मॉड्यूल द्वारा नियंत्रित किया जाता है: DynamicCompressionModule (compdyn.dll) और StaticCompressionModule (compstat.dll), और विभिन्न प्रकार के अनुरोध को संपीड़ित करने के लिए कॉन्फ़िगर किए गए हैं। साथ ही, मुझे लगता है कि गतिशील संपीड़न संपीड़ित अनुरोधों को कैश नहीं करता है क्योंकि स्थिर संपीड़न का विरोध होता है (डिफ़ॉल्ट रूप से, संपीड़ित फ़ाइलों को %SystemDrive%\inetpub\temp\IIS Temporary Compressed Files पर सहेजा जाता है)।IIS7: <strong>स्थिर</strong> सामग्री संपीड़न और <strong>गतिशील</strong> सामग्री संपीड़न: स्थिर और गतिशील सामग्री संपीड़न के बीच मतभेद

हालांकि, उन स्पष्ट मतभेदों के अलावा, मुझे संदेह है कि कुछ और है। मुझे लगता है कि वे आईआईएस पाइपलाइन से थोड़ा अलग तरीके से हुक करते हैं। क्या किसी के पास कुछ और विवरण होंगे?

जिस तरह से मुझे पता चला कि I was toying with a custom module for modifying CSS files on fly था। जब स्थिर संपीड़न चालू किया गया था (और फाइलों के डिफ़ॉल्ट सेट को संभालने के लिए सेट किया गया है, यानी पाठ/सीएसएस), कैश किए गए अनुरोध पर मेरे कस्टम मॉड्यूल को पहले से ही gzipped सामग्री परोसा गया था। जब मैंने गतिशील रूप से संपीड़ित अनुरोध की सूची में टेक्स्ट/सीएसएस स्थानांतरित किया, तो यह सब काम करना शुरू कर दिया। लेकिन मैं एक और ठोस सबूत रखना चाहता हूं कि यह वास्तव में करने का सही तरीका है। क्या कुछ अन्य ज्ञात परिणाम/समस्याएं हैं?

अद्यतन: मुझे लगता है कि मेरे पास एक सिद्धांत हो सकता है कि यह क्यों हो रहा है। यह 100% सही नहीं हो सकता है, लेकिन कम से कम यह मनाया व्यवहार समझा सकता है। मुझे लगता है कि स्थिर संपीड़न मॉड्यूल (कुछ अन्य लोगों के अलावा) निम्न इवेंट के लिए खुद को पंजीकृत करता है:

RQ_MAP_REQUEST_HANDLER 
RQ_EXECUTE_REQUEST_HANDLER 

फिर जब स्थिर फ़ाइल के लिए एक अनुरोध पेश किया जाता है, OnMapRequestHandler की जाँच में स्थिर संपीड़न मॉड्यूल फ़ाइल संकुचित कर दिया गया है कि क्या इससे पहले और क्या वास्तविक फ़ाइल नहीं बदला गया है। यदि ऐसा है, तो यह अनुरोध स्वयं को फिर से मैप करेगा (IMapHandlerProvider का उपयोग करके उपयुक्त पुनर्निर्देशन लौटा रहा है)। जब बाद में यह वास्तव में OnExecuteRequestHandler में प्रतिक्रिया प्रदान करता है, तो यह संपीड़ित फ़ाइल भेजता है। यदि, दूसरी तरफ, फ़ाइल को पहले से संपीड़ित नहीं किया गया है या यदि यह बदल गया है, तो यह मैपिंग रीडायरेक्ट नहीं करता है और स्थिर सामग्री मॉड्यूल अनुरोध को पूरा करता है और बाद में OnPostExecuteRequestHandler सामग्री को संपीड़ित करता है (और इसके कैश को अपडेट करता है) । जैसा ऊपर बताया गया है, मैं यह नहीं कह रहा हूं कि यह ठीक है (मुझे स्रोत कोड नहीं पता है), यह केवल एक अनुमान हो सकता है। इसके अलावा, गतिशील संपीड़न मॉड्यूल में से कोई भी संभवतः ऐसा नहीं करता है। यह कभी-कभी RQ_EXECUTE_REQUEST_HANDLER के बाद आउटगोइंग प्रतिक्रियाओं को संकुचित करता है।

उत्तर

12

आपका प्रश्न स्पष्ट नहीं है, इसलिए मैं एक प्रश्न का उत्तर दूंगा और आशा करता हूं कि यह आपका प्रश्न है।

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

गतिशील संपीड़न का इरादा आईएसएस मॉड्यूल (एएसपी, एएसपीनेट, पीएचपी, आदि) से गतिशील प्रतिक्रियाओं को संपीड़ित करना है। चूंकि यह प्रतिक्रिया प्रत्येक अनुरोध के लिए भिन्न हो सकती है संपीड़ित आउटपुट को कैश नहीं किया जा सकता है। यह सुविधा आईआईएस 6 से नई है, हालांकि प्रभाव कुछ वातावरणों में प्राप्त किया जा सकता है, उदाहरण के लिए ASP.Net में एक HttpFilter लागू करके। चूंकि प्रत्येक अनुरोध को फ्लाई पर संपीड़ित करने की आवश्यकता होती है, यह स्थिर CPU संपीड़न के बाद बहुत अधिक CPU गहन है। तो यदि कोई सर्वर सीपीयू बाध्य है तो यह एक अच्छा विकल्प नहीं हो सकता है।अधिकांश साइटें नेटवर्क और/या डेटाबेस बाध्य होती हैं, इसलिए अक्सर एक अच्छा विचार होता है।

तो गतिशील और स्थैतिक सामग्री को संदर्भित करता है और प्रभाव देता है कि किन रणनीतियों का उपयोग किया जा सकता है।

कुछ संदर्भ

0

आईआईएस संपीड़न सुविधा के साथ प्रयोग, यह मेरे लिए ये लगता था कि गतिशील मॉड्यूल और स्थिर मॉड्यूल इतना गतिशील या स्थैतिक सामग्री से जुड़ा नहीं है (विशेष रूप से गतिशील मॉड्यूल के लिए)।

text/html (या text/*) के लिए संपीड़न सक्रिय करें गतिशील मॉड्यूल पर माइम प्रकार, और स्थैतिक मॉड्यूल पर नहीं। एक .html फ़ाइल तक पहुंचें। ब्राउज़र में http प्रतिक्रिया की जांच करता है: यह संपीड़ित है। (2008R2 सर्वर पर आईआईएस 7.5 पर परीक्षण किया गया।)

ऐसा लगता है कि गतिशील संपीड़न मॉड्यूल गतिशील सामग्री तक ही सीमित नहीं है। यह संपीड़ित स्थिर सामग्री करता है जो इसे अपने माइम प्रकार सूची से मेल खाता है और पहले ही संपीड़ित नहीं है। तो मुझे लगता है कि इसे एक गतिशील "संपीड़न मॉड्यूल" के रूप में समझा जाना चाहिए, इस अर्थ में यह प्रत्येक प्रतिक्रिया (इसके माइम प्रकार मानदंडों के आधार पर, और accept-encoding अनुरोध शीर्षलेख पर आधारित) पर ट्रिगर हो जाता है।

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

तो अपने विशिष्ट उपयोग मामले के लिए, आपको text/css माइम प्रकार (text\* को हटाने के लिए सावधान रहें) पर स्थिर संपीड़न मॉड्यूल को अक्षम करना चाहिए ताकि आपके कस्टम सीएसएस पैचिंग मॉड्यूल को हराकर कैशिंग मुद्दों से बच सकें।

आप इस मामले पर स्थिर संपीड़न मॉड्यूल को बदलने के लिए गतिशील संपीड़न मॉड्यूल में text/css के संपीड़न को सक्रिय कर सकते हैं। लेकिन निश्चित रूप से, यह स्थिर संपीड़न मॉड्यूल कैशिंग क्षमता का लाभ नहीं उठाएगा।

दुर्भाग्य से, मुझे उपरोक्त बयानों का बैक अप लेने के लिए कोई दस्तावेज नहीं मिला है।

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