最初の “先を行くこと” では API の変更について扱いましたが、前回も述べたとおり今回はパフォーマンス改善について扱おうと思います。

では、早速。

高速になった ERB テンプレート

 ジェーミー・キャンパー (”Jeremy Kemper”) が ERB の処理を、特にヘルパーメソッド concat と capture を効率化してくれました。また「特別な」ERB である _erbout は、インスタンス変数に置き換えられ、以下の様な結果が生まれました。

  • バインディングがあちこちにコピーされなくなった結果、(メモリー)パフォーマンスの改善
  • 一般的に重い処理が多い eval メソッドの使用回数の減少
  • 文字列バッファーをスワップできるので、_erbout を切り出す必要が無くなった
  • output_beffer で文字列バッファーを読み書きでき、必要に応じてオーバーライド可能になった

関連する変更セットは 993697a obdb7d3 4d4c8e2 です。

部分テンプレートと JavaScript ヘルパーの高速化

 キャンパーさんによって、部分テンプレートと JavaScript ヘルパーの初期化にリファクタリングが施され、処理速度と処理効率が最適化されました。これらは、キャンパーさんが最近コミットした最適化のほんの一部でしかありません。詳細は Rails へのコミットをご覧ください。他の高品質なオープンソースプロジェクトからも学べる様に、これらのコミットからも学ぶことがたくさんあります。

RecordIdentifier メソッドの高速化

 RecordIdentifier が「メモ化機能」(”Memo-ization”) の単純な利用により、語形変化 (”Inflection”) が少なくなる等して高速化されました。RecordIdentifier は、ActiveRecord モデルの ID を気にせず一意に認識する為に使われることが多い他、キャッシュキーや、部分テンプレート等でも使われています。

キャンパーさんによる関連する変更セットは c1a9820 566d717 です。

キャッシュの消極的読み込み (”Lazy-loading”)

お知らせ: この変更は、後ほどの変更 6573f6a で元に戻されました。

 ActiveSupport::Cache モジュールに含まれるいくつかのキャッシュストアが、消極的読み込みを行う様になりました。実際に使い始めた時にのみ、“require” メソッドで読み込まれることを意味します。

きょうのはま

先日受けた英検一級の一次試験に通過していました。受験時に語彙問題だけずいぶん難しいと思ったのですが、案の定、語彙問題の得点が一番悪かったです。