web-dev-qa-db-ja.com

Express gzip静的コンテンツ

Expressおよびconnectは、非効率的であるため、gzip関数を削除したようです。現在、express-jsを使用したgzipに対する信頼できるソリューションはありますか?

38
HyderA

Connect 2.0 は、 new zlib stuff に基づく compress() ミドルウェアのサポートを追加しました。 Node Core API。

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 クラウドアプリケーションは、git経由でデプロイする場合の事前コミットフック中にCompress 2.xへの依存性について不平を言いました。

-----> 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: connect@'>=2.0.0- <3.0.0-'

ご覧のとおり、彼らはまだ古いバージョンのノード(0.4.7)を使用しています。


UPDATE:

実際、package.jsonに対応するenginesセクションを追加することで、Herokuにこれをデプロイさせることができます。

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

そして、これらはhttp圧縮テスターを使用したときの結果です:

enter image description here

2014年6月更新

ひや、今これを読んでいるなら。上記のものはExpress 2.0にのみ関連することを忘れないでください。

Express 3.0および4.0は、http圧縮を有効にするために異なる構文を使用します。以下のgasolinの投稿を参照してください。

31
Steven de Salas

Express 3.0でcompress()がサポートされるようになりました。

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

[〜#〜] edit [〜#〜] Express 4.0では、compressは個別のミドルウェアになります。それを使用するには、インストールしてインポートする必要があります。

var compress = require('compression');
app.use(compress()); 
81
gasolin

私もnpmを検索し、例が見つかりました:

Gzippoは最近開発されました(2日前)。これは良いことだと思います。本番の使用法については説明できません。自分でテスト/ベンチマークする必要があります。また、nodejsモジュールの代わりに、ライブサイトまたはNginxでCDNを使用して静的ファイルをホストすることも考えられます。

5
Alfred

Connectは、次のリリースでNodeの新しいzlibをサポートします

3
tjholowaychuk

Npmを検索した場合、 node-compress に出くわした可能性があります。

Expressにミドルウェアとして挿入するのはそれほど難しくないはずです。

1
Raynos