只今、クラウド基盤「Google App Engine(以下、GAE)」の連載しています。
現在はGAE界最大の敵である「スピンアップ」のシリーズです。
ライブラリ厳選
さて、前回の振り返りになりますが、GAEのスピンアップが重い理由。それは「クラスロードが重い」からです。つまり、高速スピンアップを行う為には、クラスロードを減らさなければならないわけですね。
そして、クラスロードを減らすために一番重要なことは、「クラスロードの少ないライブラリを選ぶ」ことです。
例えば、JavaのWebシステム開発で定番フレームワークで「Struts」というものがありますが、
あれはGAEを想定したライブラリではありませんので、クラスロードを減らすという発想がありません。
よって、クラスロードには非常に時間が掛かり、20秒くらい要するケースもあるとか。
20秒。
画面をクリックしたら、まず20秒は真っ白にホワイトアウトしていて、それからメイン処理が走って、ようやく画面が表示されるという。。。
壊滅的遅さですね!!
これではせっかく訪れてくれた利用者も「サイトがダウンしているんだ」と思って帰ってしまうでしょう。
よって、GAE開発にはGAE専用にチューニングされたフレームワークを使う必要があります。
それが、私のオススメする「Slim3」です。
Slim3
Slim3とは、Seasarプロジェクトで有名なひがやすお氏が開発した、GAE専用フレームワークです。と言っても、GAE専用特化フレームワークというのは、そんなに数はありません。
実質的に、GAE界はSlim3の独壇場になっていると言ってしまって良いと思います。
細かい話は横に置いて、とりあえずSlim3を選んでおけばハズレはありません。
では、さっそくSlim3をベースにスピンアップ時間を計っていきましょう。
計測
では、スピンアップ時間を計測していきます。比較対象として、以下3種類を計測してみました。
- ネイキッド:フレームワーク無し。GAE導入そのままの状態
- Slim3:Slim3フレームワークのみを導入した状態
- Slim3 + jsp:Slim3フレームワークでjsp出力する組み合わせ
その結果がこちらです。
種類 | ms |
---|---|
ネイキッド | 3826.2 |
Slim3 | 4658.6 |
Slim3 + jsp | 5587.6 |
ネイキッド:3826.2
「え~ッ!?」って感じですね。ネイキッドとは、要するに何も無い空っぽの状態ということです。
GAE公式ライブラリをプロジェクトに入れて、真っ白な画面を表示するだけ。
これで3826.2msを要します。
空っぽでも4秒近くかかるわけです。
これ以上速くは絶対になりません。
これでもう、すでに一つの結論が出ましたね。
- GAEのスピンアップはどうやっても遅いから、遅いことを前提でシステムを作れ。
これが一番重要です。
これを受け入れなければGAEは活用出来ません。
Slim3:4658.6
さて、我らの神ライブラリ「Slim3」ですが、「ネイキッド + 0.8秒」という数字になりました。
Slim3が使っている時間は0.8秒です。
Strutsの20秒とかと比較すると、如何に高速化されているかが分かるでしょう。
やっぱりSlim3は鉄板のライブラリです。(^_^)
Slim3 + jsp:5587.6
最後に「Slim3 + jsp」です。
急にjspを持ち出してしまいましたが、これも重用です。
- jspのスピンアップは遅い。
jspは実行時にコンパイルを行っているわけですが、そのコンパイルエンジンである「jasper」の動きがGAEでは遅いと聞きました。
計測してみたところ、「slim3 + 0.9秒」です。
なるほど。確かにjspだけで1秒近く時間を食っています。
しかし、jspを使わなければこの時間は回避出来るわけですから、GAEではjspは使わないという判断が必要になりますね。
結論
さて、上記で結論が出ましたね。- どう頑張った所でスピンアップで4~6秒は待たされる。
これは痛い!!
普通に開発したら場合、「画面を開いたら4~6秒もホワイトアウトしている」という結果になるということですよ。
「ならダメじゃないか!!」と思われた方もいらっしゃるかもしれませんが、いえいえ、諦めるのはまだ速いです。
上記の遅さは「Javaのスピンアップ」の時間の話です。スピンアップさえ無ければ一瞬で結果が返ってきます。
遅いのは「Javaのスピンアップ」です。
つまり、
- 最初にHTMLファイルだけパッと一瞬で表示して、ローディングのクルクル画像を表示しつつ、裏でAjaxでデータを取って表示する。
この裏技を使えば良いのです!!
実際には裏で4~6秒も待たされているわけですが、ホワイトアウトではなくローディング画像が出ているので、利用者のストレスはぐーんと低下します。
非常にセコい作戦ですが、これがGAE界の切り札、「Ajax戦術」なのです。
0 件のコメント:
コメントを投稿