SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

japan.internet.com翻訳記事

Ruby on Rails 2.0入門:Flickerベースのアプリケーションの作成

Rails 2.0がアプリケーション開発のユーザーサイドにもたらす変更点を俯瞰する

パフォーマンスの確認

 RailTrackrのユーザーサイドの機能はこれで完成です。しかし、多くの写真をダウンロードして処理するリソース負荷の高いアプリケーションでは、スムーズな操作を実現するためにパフォーマンスが極めて重要になります。

 Rails 2.0では、全体的なパフォーマンスに対するさまざまな改善が盛り込まれ、アプリケーションを高速化するための高度な手法がサポートされています。特に重要なものは次のとおりです。

  • JavaScriptバンドル機能
  • Cookieベースのセッション
  • ドメインのマルチターゲット機能
  • クエリキャッシュ機能

JavaScriptバンドル機能

 JavaScriptバンドル機能とは、アプリケーションのすべてのJavaScriptファイル(またはその一部)を1つのファイルにまとめてからクライアントに送信する機能です。現在、Webアプリケーションは多くのJavaScriptライブラリを使ってユーザーエクスペリエンスを向上させ、リッチなビジュアル効果を提供しています。一方で、ブラウザは1つのJavaScriptライブラリを取得するたびに複数の要求を実行しなければならないため、パフォーマンスが低下するという欠点もあります。ライブラリすべてを1つにまとめることで、ブラウザは1つの要求しか実行する必要がなくなり、Rails 2.0はJavaScriptファイルを迅速に提供できるようになりました。

 RailTrackrも同じです。凝った効果を提供するには多くのJavaScriptファイルが必要です。比較のため、あるユーザーのすべてのフォトセットを含むページにJavaScriptバンドル機能を使わずにアクセスした場合の所要時間(図6)と、JavaScriptバンドル機能を使った場合の所要時間(図7)を示します。レポートの作成にはFirebugを使いました。

図6 バンドル機能を使わずに多くのJavaScriptライブラリをダウンロードした場合
図6 バンドル機能を使わずに多くのJavaScriptライブラリをダウンロードした場合
図7 同じJavaScriptライブラリを1つのファイルにまとめて所要時間を短縮した場合
図7 同じJavaScriptライブラリを1つのファイルにまとめて所要時間を短縮した場合

 JavaScriptバンドル機能のアクティブ化は極めて簡単です。次のように、ビューテンプレート内のjavascript_include_tagステートメントに:cache属性を追加するだけです。

<%= javascript_include_tag 
    "prototype" , "effects" , "dragdrop" , "instant" , "reflex" , 
    :cache => "railtrackr" %>
<!-- Will create a single railtrackr.js file -->

 同じ手法はスタイルシートのバンドルにも適用できます。この場合は、stylesheet_include_tagコマンドを使います。

 バンドル機能は、Railsが実稼動モードになると有効になり、開発中は無効なので、開発者のデバッグセッションでわずらわしさを感じることがありません。

Cookieベースのセッション

 パフォーマンス向上が期待できるもう1つの理由は、Rails 2.0では、セッションデータを保管するときに、サーバー上のデータベースファイルや一時ファイルではなく、ブラウザのCookieを使用することです。ステート情報はすべてクライアント上に残るので、アプリケーションはステートレスに動作でき、水平方向のスケーラビリティによってパフォーマンスが向上します。必要に応じて、サーバーを追加して、各サーバーでまったく同じアプリケーションを実行させることで、レプリカ間でのセッションデータの同期を気にせずに、スループットを向上させることもできます。RailsはCookieにセッションデータを格納するときに暗号化を行いますが、それでも、このソリューションを用いて機密データをセッションに格納したり、セッションに巨大なオブジェクトを格納したりすることは避けてください。なぜなら、ブラウザは要求のたびにCookieをサーバーに送り返すからです(そのため、Cookieは軽量でなければなりません)。

ドメインのマルチターゲット機能

 最近のブラウザは、一般的に、アクセスしている各ドメインに対して2つの同時接続だけを開きます。RailTrackrのページには多くの画像が収められているので、これではブラウザがすべての要求をキューに入れてしまいパフォーマンスが低下します。次のステートメントを指定すると、Railsはドメインのマルチターゲット機能をアクティブにし、複数のドメインに分散された静的なリソースのURLを生成します(デフォルトは4つで、%d記号が数字0~3に置き換えられて、名前が作成されます)。

ActionController::Base.asset_host = "static%d.yoursite.com"

 ブラウザは同時に2つではなく8つの画像をダウンロードします。この変更をアクティブにするには、まずドメインでDNS別名を設定する必要があります。

クエリキャッシュ機能

 Rails 2.0には、このほかにもデータベース層のパフォーマンス向上を実現するための機能がいくつか用意されています。たとえばクエリキャッシュ機能では、1つの要求を処理するときに同じクエリを何度も実行することを回避できます。

次のページ
データベース方面の変更点

この記事は参考になりましたか?

japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Riccardo Govoni(Riccardo Govoni)

2003年からJ2EE開発者としてイタリアの金融サービス会社に勤務。ソフトウェアアーキテクトとして従来の銀行システムのWebフロントエンドの設計に従事。物理学修士。SCJP(Sun Certified Java Programmer)資格を持つ。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/2404 2008/05/12 17:42

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー