A blazing fast React alternative, compatible with IE8 and React 16.
この謳い文句をどう受け取ればよいのかわからなかったが、この辺をフォローするgithub issueがあった。
「Infernoのreact互換versionが欲しくて作ったのね」と納得したのでメモ
react互換ライブラリ
webpackのconfig.resolve.alias
にセットするだけで置き換えできるように作られてる
{
// ...
resolve: {
alias: {
'react': 'nervjs',
'react-dom': 'nervjs',
// Not necessary unless you consume a module using `createClass`
'create-react-class': "nerv-create-class"
}
}
// ...
}
nerv開発の動機
- Reactのライセンスの問題
- IE8サポート
- 既存ライブラリ(preact, inferno)では要件クリアできず
ライセンスの問題
- nerv開発を考えてるとき、MITライセンスではなかった
- 現時点ではMITに変わったのでfix済ではないかと
- Facebook Dropping Patent Clause | Matt Mullenweg
IE8サポート
-
いまのとこ詳細についてコメントない言及されてた- windows XPとIE8が動くデバイスが結構ある中国ではサポートが必要と判断、と
- 先進国ならサポート不要、と
- 開発元であるJD.com(中国でのamazonクローンという紹介が多い)がECビジネスやってる関係で必要?
既存ライブラリでは要件満たされず
preact
- preactチームの開発方針が合わず
- react完全互換よりも、ファイルサイズ軽量化に力点
- 重要なPull Requestでも「コード量多い」という理由でrejectされる文化
inferno
- react互換ではないのでNG
- reactとは独自のecosystemを作ることを選んでる
- react-likeで軽量・高速なライブラリ
- 実装はかなり取り入れてるとのこと
- diffアルゴリズム、event delegationなど
- infernoがなければ、現時点でここまでnervは実装できなかった、と回答
(参考) Inferno with Dominic Gannaway | Software Engineering Daily
- Dominicがゲスト回のpodcast
- Fintech系スタートアップに在籍してたときにmobile向けのSPA開発をしてて、reactだと速度とファイルサイズがアプリの要件をクリアできなかったので、Inferno作ったと話をしてる
- Dominicは2016年末にfecebook入りして、Infernoのメイン開発者ではなくなっている
英語堪能ではないが故に情報出すスピードが遅い
- 色眼鏡で見られる要因にもなってるがこの辺は共感できた
- READMEで色々間違いしてて申し訳無いとレスしてる
- 「何故IE8サポート」という部分もそのうちupdateされると予想
TODOの大事そうなやつ
TODOは色々あるがこの2つがクリアされると、検討する人が増えるかと
- react公式のunit testに全部パスすること
- ベンチマークの充実
--
追記。中の人のリプライからいくつか拾った
diffアルゴリズムは、infernoではくiviのものに影響
- prefixing/suffixingというテクニックと、LISアルゴリズムがiviのdiffアルゴリズムの高速化を実現している
- nerv初期は、scala.jsで書かれた仮想dom実装(Meduzz/virtual-dom)を使っていたが、iviの方が性能良いので途中かから切り替えた、とのこと
- https://github.com/NervJS/nerv/issues/10#issuecomment-361074342