MobileWebAppModuleLoaderUseCase
このエントリの原版は2011年の冬に書かれました。2011年当時に予想した Mobile Web Application の未来(2015年)とは次のようなものでした。
-
モバイル端末の CPU が Many Core 化する
- 2011年は Android 4.0 が登場する前で、ほとんどの端末はシングルコア CPU の時代
-
ネットワークは LTE がデフォルトになる
- 2011年は 3G が本流。LTE の本格導入は始まっていない状態
-
パケットフリーではなくなり、高価な定額制と、安価な従量制に二分化している
- 2011年はパケットフリーが基本。海外では定額制から従量制へのシフトが進んでいる
-
Mobile Web Application は WebWorkers を主体としたマルチスレッド構造にシフトする
- 2011年は Worker に可能性を感じるが、有効な実例はほとんどなく、利用方法の模索もほとんど進んでいない
-
どこでも動作するモジュールの需要が高まる
- 2011年は JavaScript は ブラウザ と Node.js のための言語で、どこでも動作するという概念( isomorphic )は、まだ存在しない
-
ES.next (ES6) が使われ始めている
- 2011年は ES.next や ハーモニーという名称で策定が進んでいたが、終わりは見えていない
-
2K, 4K Display の登場により 2D Canvas が限界に
- 2011年は WebGL がまだ実用段階になく、480 x 800 の端末が発売される状態
- 主流は WebGame から App へ
2011年当時は、WebModulePattern を「コードをシンプルに維持しつつ、次世代の ES6::Modules がブラウザに実装されるまでの繋ぎ」と考えていました。 そして、CommonJS や AMD などは、ES6::Modules の登場により、3〜5年後には全て不要となっている状況が望ましいと考えていました。
以下は、モジュールパターンの一覧です。
2015年においては、browserify や webpack の台頭により、AMD(Require.js)を採用する事例も減りつつあります。
Module pattern | |
---|---|
ES6::modules |
export ... import ...
|
WebModuleIdiom | `var GLOBAL = (this |
Browser Module pattern | <script src=...> |
CommonJS Module pattern | require(...) |
AMD | define(...) |
ES6 には import
export
構文が追加され、ES6の構文を使うと見慣れたスタイルでモジュールを記述し利用することが可能になりました。
しかしサーバサイドにおいては ES6::Modules で解決できる問題であっても、Mobile Web Application においては、サーバとの距離からくるレイテンシやキャッシュの問題が依然として残っています。
ES6::Modules を使ったモジュールシステムは、モバイルのユースケースとうまくマッチしていません。モバイルにおいては従来の concatしてブラウザに送る方法が暫く使われると予想されます。
モバイルにおける問題については、以下で詳しく説明します。
TBD