一般的な Web ブラウザにおけるアクセス履歴とファイルキャッシュをひとまとめにしたようなクラスです。
Mechanize が取得したファイルやページのオブジェクトが、アクセス時の URL に関連付けられて丸ごと格納されています。
通常は
Mechanize#history でアクセス履歴配列として利用するか、
Mechanize#visited_page で URL を指定してページを抽出します。ユーザーがこのクラスのメソッドを直接利用することはあまりありません。
いちおう配列を継承してはいるのですが、独自内部インデックスとの齟齬が起きるので配列由来のメソッドの使用はお勧めできません。
Mechanize の履歴は役割的にはキャッシュで、 URL の他に取得したファイル本体(とパースした Nokogiri オブジェクトと Page オブジェクト)を全てメモリ内に保持しています({uri1 => page1, uri2 => page2} のようなイメージ)。大量の URL や巨大なファイル群にアクセスすることが事前にわかっている場合は、履歴の最大数を
Mechanize#max_history= で適当な数に設定しておくことをお勧めします。妥当な動作をする履歴の最低値は 1 です。
通常の Web ブラウザのようにキャッシュ相当をディスク上に書き出して運用するようなことはできません。
巨大なファイルを「少しずつ読み捨てながらパースする」というようなこともできません。
巨大なファイルを取得した場合は必ず同じだけの(HTML だった場合はパース済みオブジェクトのぶん倍以上の)メモリを占有します。
履歴を 0 に設定した場合は、履歴オブジェクトへの登録自体は行われなくなりますが
- Mechanize#page つまり agent.page が常に nil を返す
- If-Modified-Since 用の時刻が取れないので 304 かどうかチェックできない
- click したり相対 URL を get してもリファラが送られない
- ただし、submit や post のリファラは履歴とは無関係に必ず送られる
- 履歴の配列から参照されないだけで、最新ファイルと HTML パース内容をメモリ内で保持すること自体は必ず行われる
というめんどくさい動作になります。