📝

NodeJS13でLegacy HTTP Parser → llhttpへ移行された話

2022/11/22に公開

まえがき

NodeJS12→NodeJS16に移行する際にここらへんの知識が必要になったので本記事にまとめる。

NodeJSで利用する標準HTTP Parserとは?

NodeJSv12まで:Legacy HTTP Parser
NodeJSv13以降:llhttp

NodeJS Deprecated APIs > DEP0131: Legacy HTTP parserにある通り、12からDeprecatedとなり、13からは使えないようになっている。

llhttpの方がパフォーマンスがいい。

llhttpのREADMEにある通り、llhttpの方がパフォーマンスがいい。

Lecay HTTP Parserとは

Cで書かれたHTTPリクエスト/レスポンス用のParser。
・以下の3モジュールが提供されている。
 ① http_parser.c
 ② http_parser.c.gyp
 ③ http_parser.h

①http-parser.cを置き換えるためにhttp-parser-jsというライブラリが存在する。
JSからC++の関数をコールするのがめちゃ遅いから用意されたものらしい。

It(http-parser-jsのこと) was created to replace http_parser.c since calling C++ functions from JS is really slow in V8.

☛Node12までのexpressを使用したモジュールでは、↓のような記載があれば標準http-parser.cをhttp-parser-jsに置き換えているという意味。

// Monkey patch before you require http for the first time.
process.binding('http_parser').HTTPParser = require('http-parser-js').HTTPParser;

llhttp

TypeScriptとCで記述されたもの。
・詳細については後述する。

Discussion