0

私はjavascriptの初心者です。

私がやろうとしているのは、データベースからデータを取得し、インターネット上で送信することです。

一度に 1 つのエントリしか読み取れませんが、一度に 1 つのエントリを圧縮するのではなく、すべてのエントリをまとめて圧縮したいと考えています。

それらすべてを配列に格納してから、この配列を zlib 関数に渡すことができます。しかし、これには多くの時間とメモリが必要です。

メモリからデータを取得し、それを転送しながらリアルタイムでデータを圧縮するストリーミングサーバーのように、高速APIを使用してノードjsでデータを送信しながら、同時にデータを圧縮することはどういうわけか可能ですか?クライアント

4

2 に答える 2

2

それは確かに可能です。この例で遊ぶことができます:

var express = require('express')
  , app = express()
  , zlib = require('zlib')

app.get('/*', function(req, res) {
  res.status(200)
  var stream = zlib.createGzip()
  stream.pipe(res)

  var count = 0
  stream.write('[')

  ;(function fetch_entry() {
     if (count > 10) return stream.end(']')

     stream.write((count ? ',' : '') + JSON.stringify({
        _id: count,
        some_random_garbage: Math.random(),
     }))

     count++
     setTimeout(fetch_entry, 100)
  })()
})

app.listen(1337)

console.log('run `curl http://localhost:1337/ | zcat` to see the output')

JSONをストリーミングしていると思います.setTimeout呼び出しはもちろん実際のデータベース呼び出しに置き換える必要があります. しかし、その考えは変わりません。

于 2014-02-28T16:39:38.480 に答える