নোড.জেএস: জিজিপ সংক্ষেপণ?


90

নোড.জেএস কোন গিজিপ সংকোচন করে না এবং গিজিপ সংকোচন করার জন্য কোনও মডিউল নেই বলে খুঁজে পেয়ে আমি কি ভুল করছি? যে কোনও ওয়েব সার্ভারের কোনও সংকোচন নেই সেগুলি কীভাবে ব্যবহার করতে পারেন? আমি এখানে কি মিস করছি? সার্ভার-সাইড ব্যবহারের জন্য আমি কি জাভাস্ক্রিপ্টে অ্যালগরিদমকে — হাঁফানো — পোর্ট করার চেষ্টা করব?

উত্তর:


74

নোড v0.6.x এখন একটি স্থিতিশীল zlib মডিউল আছে - ডক্সেও এটি কীভাবে সার্ভার-সাইড ব্যবহার করতে হবে তার কয়েকটি উদাহরণ রয়েছে।

একটি উদাহরণ (ডক্স থেকে নেওয়া):

// server example
// Running a gzip operation on every request is quite expensive.
// It would be much more efficient to cache the compressed buffer.
var zlib = require('zlib');
var http = require('http');
var fs = require('fs');
http.createServer(function(request, response) {
  var raw = fs.createReadStream('index.html');
  var acceptEncoding = request.headers['accept-encoding'];
  if (!acceptEncoding) {
    acceptEncoding = '';
  }

  // Note: this is not a conformant accept-encoding parser.
  // See http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.3
  if (acceptEncoding.match(/\bdeflate\b/)) {
    response.writeHead(200, { 'content-encoding': 'deflate' });
    raw.pipe(zlib.createDeflate()).pipe(response);
  } else if (acceptEncoding.match(/\bgzip\b/)) {
    response.writeHead(200, { 'content-encoding': 'gzip' });
    raw.pipe(zlib.createGzip()).pipe(response);
  } else {
    response.writeHead(200, {});
    raw.pipe(response);
  }
}).listen(1337);

4
ইন্টারনেট এক্সপ্লোরার জেলিব শিরোনামটিকে পছন্দ না করে আমি একটি ইস্যুতে ছড়িয়ে পড়েছি যা আমি 'ক্রিয়েট ডিফল্ট'-এর পরিবর্তে' createDeflateRaw 'ব্যবহার করে সমাধান করেছি
চিহ্নিত করুন

60

আপনি যদি এক্সপ্রেস ব্যবহার করে থাকেন তবে কনফিগারেশনের অংশ হিসাবে আপনি এর সংকোচনের পদ্ধতিটি ব্যবহার করতে পারেন:

var express = require('express');
var app = express.createServer();
app.use(express.compress());

এবং আপনি এখানে কমপ্রেসে আরও সন্ধান করতে পারেন: http://expressjs.com/api.html#compress

আর যদি আপনি এক্সপ্রেস ব্যবহার না করেন ... তবে কেন না মানুষ ?! :)

দ্রষ্টব্য: (@ কিত্তজাইনিনফোর ধন্যবাদ) সমস্ত প্রতিক্রিয়া সংকুচিত হয়েছে তা নিশ্চিত করতে এই মিডলওয়্যারটি আপনি প্রথমে "ব্যবহার" করুন should নিশ্চিত হয়ে নিন যে এটি আপনার রুট এবং স্থির হ্যান্ডলারের উপরে (যেমন আমি কীভাবে এটি উপরে) above

দ্রষ্টব্য: (@ সিরো-কস্তার সাথে ধন্যবাদ) ৪.০ এক্সপ্রেস থেকে express.compressমিডলওয়্যার হ্রাস করা হয়েছে। এটি সংযোগ 3.0 থেকে উত্তরাধিকারসূত্রে প্রাপ্ত এবং এক্সপ্রেসে আর সংযোগ 3.0 অন্তর্ভুক্ত নয়। পরীক্ষা করে দেখুন এক্সপ্রেস কম্প্রেশন মিডলওয়্যার পাবার জন্য।


4
কোন মন্তব্য ছাড়াই ভোট? আমাকে কেন জানি এবং আশা করি আমি উত্তরটি উন্নত করতে পারি। বা নিজেকে সম্পাদনা করতে নির্দ্বিধায়।
মিলিমেট্রিক

4
This middleware should be placed "high" within the stack to ensure all responses may be compressed. নিশ্চিত করুন যে এটি আপনার রুট এবং স্ট্যাটিক হ্যান্ডলার উপরে
ankitjaininfo

14
এখন থেকে express.compressমিডলওয়্যার (যা সংযোগ 3.0 <থেকে উত্তরাধিকার সূত্রে প্রাপ্ত হয়েছিল) অবমূল্যায়ন করা হয়েছে (যেহেতু 4.0.০ এক্সপ্রেস থেকে) এতে আর সংযোগ <.০ <অন্তর্ভুক্ত নেই। মিডওয়্যারটি পাওয়ার জন্য github.com/expressjs/compression দেখুন ।
সিরো কোস্তা

4
"কেন নয়, মানুষ ?!" - তে এই পৃষ্ঠার কাঁচা এইচটিপি এবং এক্সপ্রেস ফ্রেমওয়ার্কের তুলনায় গ্রাফগুলি আপনাকে কারণ দিতে পারে। এক্সপ্রেস এটিকে কিছুটা কমিয়ে দেয় raygun.io/blog/2015/02/node-js-performance-node-js-vs-io-js
ejfrancis

:) এটি গালে কিছুটা জিহ্বা বোঝানো হয়েছিল। আমি প্রকৃতপক্ষে প্রকাশকে পছন্দ করি না, আরও অনেক কিছু রয়েছে যা আমি ইচ্ছা করি এটি করত এবং আরও অনেক বেশি পোলিশ চাই যে আমি এটি করতাম। তবে এটি আমার পক্ষে যথেষ্ট মনে হয়, যতক্ষণ না অন্য কিছু এটি গ্রহণ করে।
মিলিমেট্রিক

43

1- সংক্ষেপণ ইনস্টল করুন

npm install compression

2- এটি ব্যবহার করুন

var express     = require('express')
var compression = require('compression')

var app = express()
app.use(compression())

গিথুবের উপর সংক্ষেপণ


4
স্ট্যাটিক এসস্টেট জিজিপ কিনা তা কীভাবে পরীক্ষা করবেন!
রিজওয়ান প্যাটেল

আমার চিত্রগুলি জিপ করা হচ্ছে না
জেসন ডায়াস

আপনি যখন বড় জেএস / সিএসএস ফাইল বা বড় জেএসএন ফাইল প্রেরণ করছেন তখন আপনাকে এই মিডলওয়্যারটি করা উচিত .. এই মিডলওয়্যারটি ব্যবহার করা আপনাকে কোনও সুবিধা দিবে না, পরিবর্তে এটি আরও সিপিইউ সংস্থান গ্রহণ করবে। @ জেসনডিয়াস
শ্যাম

@ জেসনডিয়াস আপনার চিত্রগুলি জিপ করবেন না কারণ জেপিজি ইতোমধ্যে একটি সংক্ষেপণ আলগোড়াকে অন্তর্ভুক্ত করেছে যা জিজিপের চেয়ে চিত্রগুলির জন্য আরও ভাল কাজ করে। টেক্সট ভিত্তিক স্টাফ জন্য gzip বেশি।
ব্যবহারকারী 3413723

33

সাধারণভাবে বলতে গেলে, একটি প্রোডাকশন ওয়েব অ্যাপ্লিকেশনের জন্য, আপনি আপনার নোড.জেএস অ্যাপ্লিকেশনটিকে লাইটওয়েট রিভার্স প্রক্সি যেমন এনজিনেক্স বা লাইটটিপিডি এর পিছনে রাখতে চান। এই সেটআপের অনেকগুলি সুবিধার মধ্যে আপনি নিজের অ্যাপ্লিকেশন উত্স কোডটি পরিবর্তন না করেই http সংক্ষেপণ করতে এমনকি বিএসএল সংক্ষেপণ করতে বিপরীত প্রক্সিটি কনফিগার করতে পারেন।


নোডকে স্ট্যাটিক ফাইলগুলি পরিবেশন করতে দেবেন না, প্রক্সিটি সংক্ষেপণের যত্ন নিতে দিন, এটি প্রোড-এনভির সেরা অনুশীলন হতে পারে, আপনার পোর্ট ৮০ এ আপনার রুট ইউএসআর চলমান নোড এড়াতে আপনি যে কোনও উপায়ে এনগিনেক্স বা হালকা ব্যবহার করতে চাইতে পারেন
ইজমিলহাউস

ব্যবহারের উপর নির্ভর করে, আমি সত্যিই এটি সঠিক উত্তর হিসাবে বিবেচনা করব।
prasanthv

@ezmilhouse আপনার কাছে প্রক্সি থাকলেও, আপনার নোড.জেএস সার্ভারটি এখনও প্রক্সিটিতে সেই স্ট্যাটিক ফাইলগুলি পরিবেশন করতে হবে এবং একই মেশিনের পাইপগুলিতে ব্যান্ডউইদথ নষ্ট করার কোনও কারণ নেই।
বিটি

8

যদিও আপনি বিপরীত প্রক্সি যেমন এনজিনেক্স, লাইটটিপিডি বা বার্নিশ ব্যবহার করে জিজপ করতে পারেন। অ্যাপ্লিকেশন স্তরে জিপিংয়ের মতো বেশিরভাগ HTTP অপ্টিমাইজেশনগুলি উপকারী হতে পারে যাতে সম্পদটি কী জিপ করতে হবে সে সম্পর্কে আপনার অনেক দানাদার দৃষ্টিভঙ্গি থাকতে পারে।

আমি আসলে এক্সপ্রিজ / কানেক্টের জন্য জিজিপো https://github.com/tomgco/gzippo নামক নিজস্ব জিজিপ মডিউল তৈরি করেছি যদিও এটি নতুন কাজ করে না। এছাড়াও এটি ইউনিক্স জিজিপ কমান্ড তৈরির পরিবর্তে নোড-কমপ্রেস ব্যবহার করে।


4
আমি এখন একটি ছোট নোড.জেএস ওয়েবসভারে গিজিপ্পো ব্যবহার করছি, ভাল স্টাফ!
বসগোড

4
জিজিপ স্থিতিক মূল্যায়নের ক্ষেত্রে প্রয়োগ করা হয় কিনা তা কীভাবে পরীক্ষা করবেন?
রিজওয়ান প্যাটেল

5

এমনকি আপনি যদি এক্সপ্রেস ব্যবহার না করেন তবে আপনি এখনও তাদের মিডওয়্যার ব্যবহার করতে পারেন। কম্প্রেশন মডিউল আমি কী ব্যবহার করছি হল:

var http = require('http')
var fs = require('fs')
var compress = require("compression")
http.createServer(function(request, response) {
  var noop = function(){}, useDefaultOptions = {}
  compress(useDefaultOptions)(request,response,noop) // mutates the response object

  response.writeHead(200)
  fs.createReadStream('index.html').pipe(response)
}).listen(1337)

3

অন্যরা যেমন সামনের দিকের ওয়েবসার্ভার যেমন সঠিকভাবে nginxএটি পরিচালনা করতে পারে ঠিক তেমন নির্দেশ করেছে , অন্য একটি বিকল্প হ'ল আপনার সম্পদগুলি পরিবেশন করার জন্য নোডিজিটসুর দুর্দান্ত নোড- এইচপি -প্রক্সি ব্যবহার করা।

যেমন:

httpProxy.createServer(
 require('connect-gzip').gzip(),
 9000, 'localhost'
).listen(8000);

এই উদাহরণটিতে ব্যবহারের মাধ্যমে gzip, কম্প্রেশন জন্য সমর্থন প্রমান কানেক্ট মিডলওয়্যার মডিউল: connect-gzip


3

ফাইলটি সংকুচিত করার জন্য আপনি নীচের কোডটি ব্যবহার করতে পারেন

var fs = require("fs");
var zlib = require('zlib');
fs.createReadStream('input.txt').pipe(zlib.createGzip())
.pipe(fs.createWriteStream('input.txt.gz'));
console.log("File Compressed.");

একই ফাইলটি সংক্ষেপিত করার জন্য আপনি নীচের কোডটি ব্যবহার করতে পারেন

var fs = require("fs");
var zlib = require('zlib');
fs.createReadStream('input.txt.gz')
.pipe(zlib.createGunzip())
.pipe(fs.createWriteStream('input.txt'));
console.log("File Decompressed.");

এই উত্তরে কিছু বর্ণনামূলক পাঠ্য দেখতে পছন্দ করবেন! যদিও আপনার কোড স্নিপেটগুলি প্রশ্নের উত্তর দিতে পারে, তবে কেন এটি প্রশ্নের উত্তর দেয় তা বোঝার জন্য টো এবং বিশ্বের অন্যান্য দেশগুলির জন্য কিছু ব্যাখ্যা অন্তর্ভুক্ত করা ভাল অনুশীলন ।
ক্লাইজস্টার

2

কেমন হয় এই ?

নোড-কমপ্রেস নোড.জেএসগুলির
জন্য একটি স্ট্রিমিং সংকোচন / গিজিপ মডিউল
ইনস্টল করার জন্য, আপনি libz ইনস্টল করেছেন তা নিশ্চিত করুন এবং চালান:
নোড-ওয়েফ কনফিগার
নোড-ওয়েফ বিল্ড
এটি কমপ্রেস.নোড বাইনারি মডিউলটি বিল্ড / ডিফল্টে রাখবে।
...


2

এক্সপ্রেস, কেওএ এবং অন্যান্যদের জন্য একাধিক গিজিপ মিডলওয়্যার রয়েছে। উদাহরণস্বরূপ: https://www.npmjs.com/package/express-static-gzip

যাইহোক, জিজেপিং, এসএসএল সমাপ্তি ইত্যাদির মতো সিপিইউ নিবিড় কাজগুলি করতে নোড মারাত্মকভাবে খারাপ, পরিবর্তে, একটি 'আসল' মিডওয়্যার সার্ভিস যেমন এনজিনেক্স বা এইএপ্রাক্সি ব্যবহার করুন, বুলেট 3 এখানে দেখুন: http://goldbergyoni.com/checklist-best- অনুশীলন-নোড-জেএস ইন-উত্পাদন /


2

আজকের হিসাবে, epxress.compress()এটি একটি উজ্জ্বল কাজ করছেন বলে মনে হচ্ছে।

যে কোনও এক্সপ্রেস অ্যাপে কেবল কল করুন this.use(express.compress());

আমি ব্যক্তিগতভাবে এক্সপ্রেসের শীর্ষে লোকোমোটিভ চালাচ্ছি এবং এটি সুন্দরভাবে কাজ করছে। আমি এক্সপ্রেসের শীর্ষে নির্মিত অন্য কোনও লাইব্রেরি বা ফ্রেমওয়ার্কগুলির সাথে কথা বলতে পারব না তবে যতক্ষণ না তারা পুরো স্ট্যাকের স্বচ্ছতার সম্মান করে আপনি ঠিকঠাক হওয়া উচিত।


4
এই সত্যিই কোন নতুন তথ্য নেই, এটা এই উত্তর সদৃশ: stackoverflow.com/a/14341423/1355166
gcochard

1

নোড সহ কয়েকটা ভাল দিন কেটে গেছে এবং আপনি ঠিক বলেছেন যে আপনি জিজিপ ব্যতীত কোনও ওয়েবসভার তৈরি করতে পারবেন না।

নোড.জেএস উইকিতে মডিউল পৃষ্ঠায় প্রচুর বিকল্প দেওয়া আছে। আমি তাদের বেশিরভাগ চেষ্টা করেছিলাম, তবে এটিই আমি ব্যবহার করছি যা অবশেষে -

https://github.com/donnerjack13589/node.gzip

v1.0 এছাড়াও বাইরে এবং এটি এখন পর্যন্ত বেশ স্থিতিশীল হয়েছে।


আমি মনে করি আপনার মন্তব্যটি কিছুটা বিভ্রান্তিকর। যদিও জিজেপ আধুনিক ওয়েব অ্যাপ্লিকেশনগুলিতে সাধারণ, এটি কোনও প্রয়োজন নয় । আমি মনে করি এটি পুরোপুরি ঠিক আছে এবং মানটি এটি ব্যবহার না করার জন্য উপযুক্ত।
সাইমন ইস্ট

1

Gzip সংক্ষেপণ ব্যবহার করুন

জিজিপ কমপ্রেসিং প্রতিক্রিয়া বডির আকারকে হ্রাস করতে পারে এবং এর ফলে একটি ওয়েব অ্যাপ্লিকেশনটির গতি বাড়াতে পারে। আপনার এক্সপ্রেস অ্যাপ্লিকেশনে জিজপ সংক্ষেপণের জন্য সংকোচনের মিডলওয়্যার ব্যবহার করুন। উদাহরণ স্বরূপ:

var compression = require('compression');
var express = require('express')
var app = express()
app.use(compression())

আমাদের কি ক্লায়েন্টের আকারে প্রতিক্রিয়া আকারটি সংক্ষেপণ করতে হবে?
সিদ্ধার্থ সানচু
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.