コミュニティのトピック検索機能(携帯版)
http://ameblo.jp/marupne/entry-10038845695.html
のトピック検索機能を携帯でも入れて見ました。
テスト環境は同様の
http://test-tsearch.sosk.pne.jp/
になります。l
まだ開発途中のため、仕様が変更したり、テストが必要な部分があるため、もし試してみる場合は注意してください。
コミュニティのトピック検索機能
現状のOpenPNEでは、コミュニティのタイトル、説明文から検索をかける機能はありますが、トピックをキーワードで検索する機能がありません。
しかしコミュニティのキーワードだけではそのコミュニティが現在どんな話題のトピックが存在するのかわからないため、トピックの検索も可能とするような要望がありました。
そこで、今回とりあえずの形になりますが、トピック検索機能を実装してみました。
テストサイトは以下になります。
http://test-tsearch.sosk.pne.jp/
新規登録のボタンは表示されていませんが、ログインボタンの下に新規登録のリンクがあるので、そちらから登録してみてください。
検索は現状ではコミュニティのホーム(c_home)の上部でできるようになっています。
追記:07/07/05
実装するにあたってソースの変更は
https://svn.openpne.jp/svn/OpenPNE/branches/work/maruyama/prj_topic_search
に入れています。
ヘッダ発行によるブラウザキャッシュの挙動の違い調査
一般に使われているInternet ExploreやFirefoxなどのWebブラウザには、取得したページや画像をキャッシュする機能があります。
これはアクセスするたびに同じページや画像を取得すると時間がかかり、サーバにも負荷がかかってしまうことから、それを防ぐためにある機能です。
これのおかげで、一度見たページなどは比較的早く閲覧ができるわけですが、OpenPNEやその他SNSのような更新が頻繁にあるようなページではキャッシュされると困ることがあります。
例えば
・フレンドが日記を書いて日記一覧が更新された
・コミュニティの掲示板に書き込みがあった
のように更新されているはずのページをアクセスせずに過去に取得したキャッシュを表示してしまうと、更新情報が表示されず、新しい情報を見ることができません。
そのため、現在のOpenPNEの仕様では、ページが取得される際にヘッダに
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
というようなブラウザにキャッシュをさせないように指示する情報を埋め込んでいます。
しかし、この場合先ほど述べたようにキャッシュされない場合、全てのページの取得に毎回サーバにアクセスしてしまうため、サーバに与える負荷が高くなってしまいます。
そのため、今回このキャッシュ機能を有効するための設計のための調査を行いました。
今回調査した内容は、OpenPNEのサーバからヘッダをどのように発行、または発行しなかった場合、キャッシュが使われるかを調査しました。
ヘッダの発行の仕方としては以下の三つが考えられます。
・キャッシュを行わないヘッダの発行
・キャッシュを行うヘッダの発行
・キャッシュに関するヘッダを発行しない
また、キャッシュが使われているかどうかをチェックする対象は
・PHPなどによる動的生成ページ
・HTML内で呼び出される画像、CSSファイル、JavaScriptファイル
ブラウザの動作は
・リンクをクリック
・URL入力
・進む、戻る
・F5
・Ctrl+F5
をチェックしました。
キャッシュが使われた場合は○、使われない場合は×です。
※がついた○は一回目はキャッシュ、二回目のアクセスは再取得されたものです。
ヘッダの発行有無、またその内容によって変化したのは動的なページへのアクセスで、
・キャッシュのヘッダを発行した場合はリンクやURLアクセスはキャッシュされた後の一回目はキャッシュ使用(表黄色)
・no-cacheのヘッダを発行しない場合は進む、戻るのアクセスはキャッシュ使用(表青)
の二点が異なるという結果になりました。
キャッシュしているにも関わらず二回目は再取得したり、F5とCtrl+F5が同じ動作となってしまっているのはなぜか、今後設計実装に必要そうであれば再調査を行いたいと思います。
追記:07/07/05
キャッシュをするように指示するヘッダは以下のようなヘッダを発行しています。
Expires: Tue, 03 Jul 2007 06:51:56 GMT
Cache-Control: public, max-age=10800
Last-Modified: Tue, 03 Jul 2007 01:38:12 GMT
これは
Expires:有効日時
max-age:有効期間
を発行することでキャッシュするように指示しています。
