2011-06-16 13 views
36

एक्सप्रेस और कनेक्ट ने अपने gzip फ़ंक्शंस को हटा दिया है क्योंकि वे बहुत अक्षम थे। क्या वर्तमान में एक्सप्रेस-जेएस के साथ gzip करने के लिए कोई विश्वसनीय समाधान है?एक्सप्रेस gzip स्थिर सामग्री

+0

उपयोग nginx के gzip – dumitru

+0

मामले में यह अभी भी किसी के लिए प्रासंगिक है: जैसा कि मैंने gziped स्टैटिक फ़ाइलें सेवा करने के लिए चाहता था, लेकिन पर ऐसा करने का ओवरहेड चाहता था नहीं है फ्लाई मैंने express.static के शीर्ष पर एक छोटा रैपर लिखा, जो पहले से ही gziped फ़ाइलों की सेवा करने की अनुमति देता है। यह उपयोगी होगा अगर आपने अपनी बिल्ड प्रक्रिया में gzipping html/css/js फ़ाइलों को एकीकृत किया है। मॉड्यूल NPM पर पाया जा सकता है: [व्यक्त स्थैतिक-gzip] (https://www.npmjs.com/package/express-static-gzip) – Tobi

उत्तर

31

Connect 2.0 में नोड में नए zlib सामान का समर्थन करेंगे कि सिर्फ नोड कोर एपीआई में बाहर आ गया है साथ new zlib stuff के आधार पर compress() मिडलवेयर के लिए समर्थन जोड़ा गया है।

आप अपने package.json फ़ाइल में 2.0 कनेक्ट करने के लिए एक निर्भरता जोड़कर अपने एक्सप्रेस सर्वर में इस का उपयोग कर सकते:

{ 
    ... 
    dependencies: { 
     "connect" : "2.x", 
     "express" : "2.x", 
     // etc.. 
    } 
} 

और फिर अपने एक्सप्रेस एप्लिकेशन विन्यास में निम्न तर्क लागू होते हैं:

// Create static file server with gzip support 
var app = express.createServer(express.logger()); 
app.use(connect.compress()); 
app.use(express.static(__dirname + '/public')); 
app.listen(80); 

कृपया ध्यान दें कि यह सामग्री अभी भी बहुत अच्छी है और जब मैं इसे स्थानीय रूप से काम करने के लिए प्राप्त कर सकता हूं, तो मेरे Heroku क्लाउड एप्लिकेशन ने संपीड़न 2.x पर निर्भरता के बारे में शिकायत की के दौरान पहले से प्रतिबद्ध हुक जब Git के माध्यम से की तैनाती:

-----> Heroku receiving push 
-----> Node.js app detected 
-----> Resolving engine versions 
     Using Node.js version: 0.4.7 
     Using npm version: 1.0.106 
-----> Fetching Node.js binaries 
-----> Vendoring node into slug 
-----> Installing dependencies with npm 
     npm ERR! Error: No compatible version found: [email protected]'>=2.0.0- <3.0.0-' 

आप देख सकते हैं, वे अभी भी नोड के एक पुराने संस्करण (0.4.7) का उपयोग कर रहे हैं।


अद्यतन:

वास्तव में, मैं Heroku package.json में इसी engines खंड जोड़कर इस तैनात करने के लिए मिल सकता है:

{ 
    ... 
    "engines": { 
     "node": ">= 0.6.0 < 0.7.0" 
    } 
} 

और इन परिणामों जब एक का उपयोग कर रहे हैं http संपीड़न परीक्षक:

enter image description here

अद्यतन जून 2014

हिया, अगर आप इस पढ़ रहे हैं। यह न भूलें कि ऊपर की सामग्री केवल एक्सप्रेस 2.0 के लिए प्रासंगिक है।

एक्सप्रेस 3.0 और 4.0 उपयोग http संपीड़न सक्षम करने के लिए अलग अलग वाक्य रचना, बस नीचे दिए gasolin द्वारा पोस्ट देखें।

+0

देख मैं इसे एक्सप्रेस 2.5.1 पर काम नहीं कर सके कैश config रहता है। –

+2

@AndreyLushnikov: ** ** स्थिर 'से पहले आपको' (''' 'compress' ** का उपयोग करना होगा। 'Compress' [बदल देता है] (https://github.com/senchalabs/connect/blob/2.3.9/lib/middleware/compress.js#L77-91)' res.write' और 'ताकि res.end' यह zlib के माध्यम से डेटा प्रॉक्सी कर सकते हैं। यदि 'स्थिर '' संपीड़ित' से पहले है, तो यह 'संपीड़ित' मिडलवेयर को चलाने के लिए 'res' विधियों को चलाने और पैच करने का मौका मिलने से पहले पूरे अनुरोध को संभालता है। स्टीवन, मैंने 'उपयोग()' कॉल को स्वैप करने के लिए अपना उत्तर अपडेट कर दिया है। – josh3736

+3

@gasolin नीचे बताता है कि एक्सप्रेस 3.0 में अब 'संपीड़न() 'समर्थन है। यदि आप इसे पढ़ रहे हैं, तो क्या आप अपना उत्तर अपडेट कर सकते हैं? – HyderA

1

यदि आपने एनपीएम की खोज की है तो आप node-compress पर आ सकते हैं।

इसे एक्सप्रेस में मध्यवर्ती के रूप में इंजेक्ट करना बहुत कठिन नहीं होना चाहिए।

+0

उपलब्ध संपीड़न पुस्तकालयों में से बहुत सारे हैं, लेकिन मुझे पता है कि अगर लोगों को कर रहे हैं चाहते हैं उत्पादन में सफलतापूर्वक उनका उपयोग कर। – HyderA

+0

@ गैंबूका मैं उस व्यक्ति का व्यक्तिगत रूप से उपयोग कर रहा हूं लेकिन विकास के लिए नहीं बल्कि विकास के लिए। – Raynos

5

मैं भी NPM खोज की है और उदाहरण के लिए मिल गया है:

  • https://github.com/tomgallacher/gzippo

    gzippo स्पष्ट gzippo बेहतर प्रदर्शन के लिए कम्प्रेस का उपयोग कर कनेक्ट करने के लिए एक gzip मिडलवेयर है।

Gzippo हाल ही में विकसित किया गया है (2 दिन पहले) जो मुझे लगता है कि एक अच्छी बात है। मैं आपको उत्पादन के उपयोग के बारे में नहीं बता सकता। आपको स्वयं परीक्षण/बेंचमार्क करना चाहिए। मैं शायद कुछ नोडजेस मॉड्यूल की बजाय अपनी स्थिर फाइलों को होस्ट करने के लिए लाइव साइट या Nginx के लिए सीडीएन का उपयोग भी करूंगा।

+5

हम बड़े ब्रिटेन समाचार पत्र के लिए उत्पादन में gzippo का उपयोग कर रहे हैं। नोड परत में सामग्री संपीड़न को विन्यस्त की सुंदरता है कि आप तो बस वार्निश, विद्रूप या एक CDN नदी के ऊपर रख दिया और यह http हेडर आज्ञा का पालन करेंगे और प्रॉक्सी बाद के सभी अनुरोध के लिए/CDN पर एक कैश्ड ज़िपित प्रति रखना कर सकते हैं। यह आपके नोड कोड के साथ और अपने Git में/SVN आदि – serby

3

कनेक्ट अगली फिल्म

+0

इसकी अब जोड़ दिया गया, नीचे पोस्ट .. –

77

एक्सप्रेस 3.0 अब सेक है() का समर्थन:

var app = express(); 
// gzip 
app.use(express.compress()); 
// static 
app.use("/public", express.static(__dirname + '/public')); 
// listen 
app.listen(80); 

संपादित एक्सप्रेस 4.0 के लिए, अलग मिडलवेयर बन सेक। तो अगर आप को स्थापित करने के लिए है और आयात के लिए इसका इस्तेमाल करने के लिए:

var compress = require('compression'); 
app.use(compress()); 
+8

एक्सप्रेस '4.x' ने लगभग सभी मिडलवेयर हटा दिए, जिनमें 'संपीड़न' शामिल है। आप कनेक्ट के 'संपीड़न' मिडलवेयर का उपयोग अब कर सकते हैं: https://github.com/expressjs/compression। –

+1

क्या उसे उसकेोकू –

+0

में अतिरिक्त चरणों की आवश्यकता है संपीड़न किस परिस्थिति में ट्रिगर करता है?मैंने अभी इसे जोड़ा लेकिन 'res.send' लिखा और कोई gzipped सामग्री बाहर नहीं आया। क्या इसे 'res.end' या कुछ अन्य ट्रिगर की आवश्यकता है? – CMCDragonkai

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