トップ 差分 一覧 ソース 検索 ヘルプ RSS ログイン

BugTrack-plugin/400

ページの作成や編集にはユーザ登録が必要です。

FSWiki 表示高速化提案(通称:高速化するかも?プラグイン)

  • 投稿者: ぐうます
  • カテゴリ: 新規
  • 優先度: 重要
  • 状態: 提案
  • 日時: 2009年06月20日 05時04分57秒

 内容

FSWiki の表示高速化についての提案と、その効果確認のためのプラグインです。

Wiki ページ数の増加とともに長くなるページ表示時間に対し、その低減を図るための施策を本ページでは提案致します。

施策結果概要

後述の条件で処理時間を測定したところ、

  • 施策1+2ではページ表示時間は施策前の約 50 % になりました。
  • 施策1+2+3ではページ表示時間は施策1+2の約 60 % になりました。
施策1 施策2 施策3 Wiki 処理時間比較1 処理時間比較2
- - - FSWiki 3.6.3.1 無改造 1.27 sec -
- FSWiki 3.6.3.1 無改造 + 本提案プラグイン 2009-06-20 版 0.60 sec 0.66 sec
FSWiki 3.6.3.1 無改造 + 本提案プラグイン 2009-07-16 版 - 0.40 sec

施策前(FSWiki 3.6.3.1 無改造)のプロファイル結果

まず、投稿者の自サイトにおいて、次の条件の下で FrontPage 1 ページの表示処理についてプロファイルを取得した結果を示します。

  • プロファイル測定条件(2009-06-20 時):
    • OS:FreeBSD 7.1-RELEASE-p5 (レンタルサーバ)
    • perl:5.8.9
    • FreeStyle Wiki:3.6.3.1 無改造
    • Wiki ページ数:約 10000 ページ
    • ページ名の自動リンク:OFF
    • プロファイル方法:Devel::DProf (参考資料)
    • プロファイル時のユーザ権限:非ログインユーザ
    • FrontPage.wiki:
!!!FreeStyle Wiki
FreeStyle WikiはPerlによるWikiクローンです。以下のような特徴があります。
*徹底されたモジュール化により、プラグインによる拡張が容易
*Perlで書かれておりDBも使用しないため、CGIが動作するサーバであればほとんどのサーバに設置可能
*全ページ共通のヘッダ、フッタ、サイドバーを表示可能
*ファイルの添付が可能
*PDFの生成が可能
*キーワードによる自動リンク機能
*[tDiary|http://www.tdiary.org]のテーマを使用可能
*mod_perlでも(一応)動作可能
*簡単なユーザ認証機能を備えている
FreeStyle WikiはGNU GPLライセンスの元で配布、改変が許可されるフリーソフトウェアです。
    • Menu.wiki:
!!!メニュー
*[[トップ|FrontPage]]
*[[ヘルプ|Help]]

{{edit Menu}}

Wow! Great thniknig! JK
!!!Google
{{google v,25wht,s20}}

!!!最新
{{recentdays}}
    • Header.wiki:
{{outline}}
    • Footer.wiki:
{{footnote_list}}
{{files}}
{{attach nolist}}
{{lastmodified}}
  • プロファイル結果(FreeStyle Wiki 3.6.3.1 無改造, 10 回平均)
----- Average -----
URL = wiki.cgi?page=FrontPage
Run on 2009-06-18 04:22:18 -- 2009-06-18 04:28:17

             Count = 10
Total Elapsed Time = 1.920171 Seconds
  User+System Time = 1.265126 Seconds
Exclusive Times
%Time ExclSec CumulS #Calls sec/call Csec/c  Name
 28.2   0.357  0.599      7   0.0511 0.0856  Util::load_config_hash
 10.5   0.133  0.133  60629   0.0000 0.0000  Util::trim
 7.27   0.092  0.092  40382   0.0000 0.0000  Util::_unescape
 7.21   0.091  0.383      2   0.0456 0.1915  Wiki::DefaultStorage::get_page_lis
                                             t
 5.39   0.068  0.504  10073   0.0000 0.0000  Wiki::can_show
 4.25   0.053  0.053  20342   0.0000 0.0000  Wiki::config
 3.21   0.040  0.324  10073   0.0000 0.0000  Wiki::DefaultStorage::get_page_lev
                                             el
 3.03   0.038  0.214      8   0.0048 0.0268  main::BEGIN
 2.81   0.035  0.360  10073   0.0000 0.0000  Wiki::get_page_level
 2.37   0.030  0.342  10038   0.0000 0.0000  Wiki::DefaultStorage::get_last_mod
                                             ified2
 2.26   0.028  0.028     12   0.0023 0.0023  Util::load_config_text
 2.18   0.027  0.302  10038   0.0000 0.0000  Wiki::get_last_modified2
 1.72   0.021  0.024  10082   0.0000 0.0000  Wiki::get_login_info
 1.36   0.017  0.081      8   0.0021 0.0101  Wiki::BEGIN
 0.83   0.010  0.010      5   0.0021 0.0021  CGI::_compile

※プロファイル結果は、処理時間の長さが 1 位〜 15 位の関数になります。なお、各項目が表す内容は次の通りです。

ExclSec :その関数の User+System 処理時間(その関数から呼び出す別関数の処理時間は含まない)
CumulS  :その関数の User+System 処理時間(その関数から呼び出す別関数の処理時間も含む)
%Time   :User+System 処理時間の総計に対して、その関数の ExclSec が占める割合
#Calls  :その関数が呼ばれた回数
sec/call:その関数の呼出し 1 回あたりの ExclSec
Csec/c  :その関数の呼出し 1 回あたりの CumulS
Name    :関数名

考察1:Util::load_config_hash() とその関連処理

プロファイル結果より、最も時間を要する処理は設定ファイル読込み処理 Util::load_config_hash() であり、全処理時間の 28 % を占めていることが分かります。7 回呼ばれているこの処理の各回の内訳を調べると下表のようになりますので、行数の偏りからそのほとんどは showlevel.log と modtime.dat の読込み時間と考えられます。

読込み対象ファイル名 内容 ファイルに含まれる行数
1 setup.dat FSWiki 基本設定 33
2 config.dat FSWiki 環境設定 34
3 usr.dat ユーザ情報 4
4 farmconf.dat ファーム設定 6
5 showlevel.log ページの参照権限レベル 10038
6 farmconf.dat ファーム設定 6
7 modtime.dat ページの最終更新日時 10038

また、プロファイル結果第 2 位である Util::trim()、及びプロファイル結果第 3 位である Util::_unescape() は、Util::load_config_hash() が読込んだファイルの 1 行を処理する毎に前者は 3 回、後者は 2 回呼ばれますので、Util::load_config_hash() からの呼出し回数は showlevel.log, modtime.dat の読込み時のみで下記のようになり、プロファイル結果に示された呼出し回数のうち、そのほとんどが Util::load_config_hash() からの呼出しで占められていることが分かります。

Util::trim()     :呼出し回数 = ファイル行数 × 1 行あたりの呼出し回数 = (10038 × 2) × 3 = 60228
Util::_unescape():呼出し回数 = ファイル行数 × 1 行あたりの呼出し回数 = (10038 × 2) × 2 = 40152

以上より、プロファイル結果の最上位 3 つの処理(合計処理時間は全体の約 46 % を占める)は、Util::load_config_hash() とその関連処理に費やされていることになり、処理時間の低減を図りたいところです。

さて、Util::load_config_hash() の処理概要は次の通りです。

  1. ファイルを読出し、文字列としてメモリ上に保持(Util::load_config_text())。
  2. 得られた文字列を行毎に分割し、
    • その各行に対し、余分な空白除去(Util::trim())やアンエスケープ処理(Util::_unescape())を行いつつ、データをキーと値に切り分けてハッシュに格納。

プロファイル結果では、ファイル I/O を直接担う Util::load_config_text() の結果は上位 3 処理とは別枠にカウントされている(全処理時間の 2.3 % であり、ファイル I/O そのものはそれほど遅くないことが分かります)ので、上位 3 つの処理時間を低減するには Util::load_config_hash() のデータ切り分け処理について検討しなければなりません。

施策1:Util::load_config_hash() の処理簡略化

Util::load_config_hash() のデータ切り分け処理は、人手で作成した setup.dat なども読込めるように余分な空白除去(Util::trim())やアンエスケープ処理(Util::_unescape())を伴うかなり高度な内容になっています。この処理内容を変えずに処理時間を短縮するのは困難のようなので、本提案ではこのデータ切り分け処理を簡略化することを考えます。まず、対象ファイルを showlevel.log と modtime.dat の 2 つに絞ると、次の 3 点のような簡略化が考えられます。

  • これらは人手で編集するファイルではなく FSWiki が自動生成するので、元々余分な空白など無い。よって Util::trim() を呼ばないようにする。
  • この 2 ファイルはそれぞれ「ページ名」→「参照権限レベル」,「ページ名」→「更新日時」という「キー」と「値」の組合せを保持する。両者の「値」である「参照権限レベル」(0〜2),「更新日時」(unix time)はともに整数値であり、エスケープする必要が無い。また、両者の「キー」である「ページ名」は、ページ名キャッシュファイル ./log(/farm)/pagelist.cache においてエスケープせずに保存されているという実績がある。よって、アンエスケープ処理 Util::_unescape() を呼ばないようにする(もちろん、保存時のエスケープ処理も併せて止める)。
  • Util::load_config_hash() が読込むファイルの行内区切り文字は「=」であるため、「キー」や「値」の内容に「=」を含む場合についてのエスケープを伴うため処理が複雑になっている。これを簡単にするため、区切り文字はタブ文字 '\t' とし、エスケープ処理を行わない(ページ名が '\t' を含む場合には対応しない)。

考察2:Wiki::can_show(), Wiki::config(), Wiki::get_login_info() の呼出し回数

今回、プロファイルを取得している Wiki の Menu ページに記載されている recentdays プラグインの処理概要は、次のようになっています。

  1. Wiki 内にある全ページのページ名のリストから、そのユーザ権限で閲覧可能なページのみを抽出し、更新日時が新しい順にソートしたリストを作成。
  2. そのリストの先頭から、更新日時が最新 5 日分のページ名を取り出して表示。

この 1 の処理の実施にあたり、Wiki ページの閲覧可否を調べる処理 Wiki::can_show() がほぼ Wiki ページ数に相当する回数呼び出されています。また、Wiki::can_show() の 1 回の処理中で、Wiki::config() が 2 回、Wiki::get_login_info() が 1 回呼ばれています。これらは、プロファイル結果での呼出し回数とほぼ符合します。

施策2:Wiki::can_show() からのメソッド呼出し回数の削減

Wiki::config('accept_show') が返却する「環境設定ページの『ページの閲覧』の設定値」と Wiki::get_login_info() が返却する「閲覧者のユーザ権限」は、1 回のページ閲覧リクエスト中は一定です。よって Wiki::can_show() が内部でこれらの値をキャッシュすることにより、Wiki::config()Wiki::get_login_info() の呼出し回数を削減することができます。

施策1,2 実施後(FSWiki 3.6.3.1 無改造 + 本提案プラグイン 2009-06-20 版)のプロファイル結果

上記の施策1, 施策2 を実現する提案プラグイン 2009-06-20 版を有効にした場合のプロファイル結果を示します。

  • プロファイル結果(FreeStyle Wiki 3.6.3.1 無改造 + 本提案プラグイン 2009-06-20 版, 10 回平均)
----- Average -----
URL = wiki.cgi?page=FrontPage
Run on 2009-06-18 05:11:07 -- 2009-06-18 05:15:18

             Count = 10
Total Elapsed Time = 0.822886 Seconds
  User+System Time = 0.601168 Seconds
Exclusive Times
%Time ExclSec CumulS #Calls sec/call Csec/c  Name
 14.6   0.088  0.250      2   0.0440 0.1253  Wiki::DefaultStorage::get_page_lis
                                             t
 7.25   0.043  0.068  10073   0.0000 0.0000  Wiki::DefaultStorage::get_page_lev
                                             el
 6.45   0.038  0.223      8   0.0048 0.0278  main::BEGIN
 5.72   0.034  0.049      3   0.0114 0.0164  plugin::ksksk::Install::load_confi
                                             g_hash
 5.17   0.031  0.125  10073   0.0000 0.0000  Wiki::can_show
 4.67   0.028  0.052  10038   0.0000 0.0000  Wiki::DefaultStorage::get_last_mod
                                             ified2
 4.27   0.025  0.085  10073   0.0000 0.0000  Wiki::get_page_level
 4.12   0.024  0.024     12   0.0020 0.0020  Util::load_config_text
 3.89   0.023  0.075  10038   0.0000 0.0000  Wiki::get_last_modified2
 3.39   0.020  0.104      8   0.0025 0.0130  Wiki::BEGIN
 2.42   0.014  0.014      5   0.0029 0.0029  CGI::_compile
 2.36   0.014  0.023     22   0.0006 0.0010  Jcode::BEGIN
 1.68   0.010  0.054      4   0.0025 0.0136  CGI2::BEGIN
 1.18   0.007  0.027      5   0.0014 0.0054  CGI::Session::File::BEGIN
 0.99   0.006  0.007     16   0.0003 0.0004  Wiki::get_plugin_instance
  • 施策1 に対応して、
    • Util::trim(), Util::_unescape() の呼出し回数が減少し、プロファイル結果表示圏外になりました。
    • Util::load_config_hash() がプロファイル結果から消えた代わりに、それをオーバーライドした plugin::ksksk::Install::load_config_hash() が登場。処理時間は 0.357 sec から 0.034 sec に低減しました。
      • 回数が 7 回から 3 回に減っている理由:7 回中 4 回は本プラグインが Util::load_config_hash() を plugin::ksksk::Install::load_config_hash() でオーバーライドする以前に元の Util::load_config_hash() のまま実行されるため。

考察3:ページリスト取得メソッド Wiki::DefaultStorage::get_page_list() 関連処理

recentdays プラグインでも使用している、ページ一覧リストを返却するメソッド Wiki::DefaultStorage::get_page_list() は、引数によっては次の処理を合わせて実行することも可能です。

  • そのユーザ権限で閲覧可能なページのみを抽出。
  • 更新日時が新しい順、あるいはページ名順にソート。

今回の処理時間比較条件では、2 回呼ばれている Wiki::DefaultStorage::get_page_list() のうち、recentdays プラグインの処理から呼ばれる 1 回については、この抽出とソートが指定されています。そして、このような抽出・ソート処理は閲覧リクエストのたびに毎回実行されるため、下記の関連メソッドがほぼ Wiki ページ数に等しい回数呼び出されるというプロファイル結果になります。

  • ページリスト取得メソッド Wiki::DefaultStorage::get_page_list() 関連処理

(プロファイル結果(FreeStyle Wiki 3.6.3.1 無改造 + 本提案プラグイン 2009-06-20 版, 10 回平均)より抜粋)

%Time ExclSec CumulS #Calls sec/call Csec/c  Name
 14.6   0.088  0.250      2   0.0440 0.1253  Wiki::DefaultStorage::get_page_list
 7.25   0.043  0.068  10073   0.0000 0.0000  Wiki::DefaultStorage::get_page_level
 5.17   0.031  0.125  10073   0.0000 0.0000  Wiki::can_show
 4.67   0.028  0.052  10038   0.0000 0.0000  Wiki::DefaultStorage::get_last_modified2
 4.27   0.025  0.085  10073   0.0000 0.0000  Wiki::get_page_level
 3.89   0.023  0.075  10038   0.0000 0.0000  Wiki::get_last_modified2

しかしながら、次のような事象が発生しなければ抽出・ソートされたページリストの内容は不変なので、その間は同じ結果を再利用することにより上記の関連処理の呼出し回数を削減することができます。

  • 新規ページ作成。
  • ページ削除。
  • ページを編集し、sage ずに保存。
  • ページの閲覧権限変更。

施策3:Wiki::DefaultStorage::get_page_list() の出力結果のキャッシュ化

以上のことから、次の機能を Wiki::DefaultStorage::get_page_list() に追加します。

  • Wiki::DefaultStorage::get_page_list() の出力結果をキャッシュファイルに保存。
    • 作成されるキャッシュファイルは、最大 6 種類。
      • log/(farm/)pagelist.n2.cache : 管理者が閲覧可能な page list(名前順 sort 済)
      • log/(farm/)pagelist.n1.cache : login user が閲覧可能な page list(名前順 sort 済)
      • log/(farm/)pagelist.n0.cache : 非 login user が閲覧可能な page list(名前順 sort 済)
      • log/(farm/)pagelist.m2.cache : 管理者が閲覧可能な page list(日時順 sort 済)
      • log/(farm/)pagelist.m1.cache : login user が閲覧可能な page list(日時順 sort 済)
      • log/(farm/)pagelist.m0.cache : 非 login user が閲覧可能な page list(日時順 sort 済)
  • キャッシュ更新条件が発生しない間は、キャッシュファイルの内容を Wiki::DefaultStorage::get_page_list() の結果とする。
    • キャッシュ更新条件は、「更新日時保存ファイル modtime.dat 及び ページの閲覧権限保存ファイル showlevel.log のいずれかがキャッシュファイルより新しいとき」。

なお、考察3, 施策3 の検討にあたって、次のページの議論を参考にさせていただきました。ありがとうございました。

施策3 実施前後でのプロファイル結果比較

  • プロファイル測定条件:
    • OS:FreeBSD 7.1-RELEASE-p6 (レンタルサーバ)
    • その他は、2009-06-20 時の条件と同じ。
  • 施策1,2 プロファイル結果(FreeStyle Wiki 3.6.3.1 無改造 + 本提案プラグイン 2009-06-20 版, 10 回平均)
----- Average -----
URL = wiki.cgi?page=FrontPage
Run on 2009-07-16 05:26:37 -- 2009-07-16 05:30:45

             Count = 10
Total Elapsed Time = 1.043187 Seconds
  User+System Time = 0.655625 Seconds
Exclusive Times
%Time ExclSec CumulS #Calls sec/call Csec/c  Name
 12.9   0.084  0.250      2   0.0424 0.1254  Wiki::DefaultStorage::get_page_lis
                                             t
 6.40   0.042  0.067  10081   0.0000 0.0000  Wiki::DefaultStorage::get_page_lev
                                             el
 5.82   0.038  0.270      8   0.0047 0.0337  main::BEGIN
 5.39   0.035  0.050      3   0.0118 0.0169  plugin::ksksk::Install::load_confi
                                             g_hash
 4.95   0.032  0.114  10081   0.0000 0.0000  Wiki::can_show
 4.39   0.028  0.053  10042   0.0000 0.0000  Wiki::DefaultStorage::get_last_mod
                                             ified2
 4.08   0.026  0.081  10081   0.0000 0.0000  Wiki::get_page_level
 3.67   0.024  0.024     12   0.0020 0.0020  Util::load_config_text
 3.38   0.022  0.069  10042   0.0000 0.0000  Wiki::get_last_modified2
 3.34   0.021  0.125      8   0.0027 0.0157  Wiki::BEGIN
 2.94   0.019  0.031     22   0.0008 0.0014  Jcode::BEGIN
 2.40   0.015  0.015      5   0.0031 0.0031  CGI::_compile
 2.04   0.013  0.015     16   0.0008 0.0009  Wiki::get_plugin_instance
 1.92   0.012  0.026      5   0.0025 0.0053  Cwd::BEGIN
 1.57   0.010  0.050      4   0.0025 0.0125  CGI2::BEGIN
  • 施策1,2,3 プロファイル結果(FreeStyle Wiki 3.6.3.1 無改造 + 本提案プラグイン 2009-07-16 版, 10 回平均)
----- Average -----
URL = wiki.cgi?page=FrontPage
Run on 2009-07-16 05:32:52 -- 2009-07-16 05:36:44

             Count = 10
Total Elapsed Time = 0.425588 Seconds
  User+System Time = 0.395513 Seconds
Exclusive Times
%Time ExclSec CumulS #Calls sec/call Csec/c  Name
 10.1   0.040  0.265      8   0.0050 0.0332  main::BEGIN
 8.74   0.034  0.035      3   0.0115 0.0116  plugin::ksksk::Install::load_confi
                                             g_hash
 5.58   0.022  0.122      8   0.0027 0.0153  Wiki::BEGIN
 4.72   0.018  0.028     22   0.0008 0.0013  Jcode::BEGIN
 4.07   0.016  0.016      5   0.0032 0.0032  CGI::_compile
 3.94   0.015  0.020     16   0.0009 0.0012  Wiki::get_plugin_instance
 3.59   0.014  0.029      5   0.0028 0.0059  Cwd::BEGIN
 3.10   0.012  0.018     19   0.0006 0.0009  Wiki::install_plugin
 2.83   0.011  0.029      4   0.0028 0.0073  CGI::Session::Serialize::Default::
                                             BEGIN
 2.80   0.011  0.015      3   0.0037 0.0051  vars::BEGIN
 2.55   0.010  0.015      9   0.0011 0.0016  Safe::BEGIN
 2.17   0.008  0.056      4   0.0021 0.0140  CGI2::BEGIN
 2.12   0.008  0.041      5   0.0016 0.0083  CGI::Session::File::BEGIN
 1.41   0.005  0.005      3   0.0018 0.0019  CGI::BEGIN
 1.26   0.005  0.007     10   0.0005 0.0007  HTML::Template::BEGIN
  • 施策3 に対応して、
    • Wiki::DefaultStorage::get_page_level(), Wiki::get_page_level(), Wiki::DefaultStorage::get_last_modified2(), Wiki::get_last_modified2(), Wiki::can_show() の呼出し回数が減少し、プロファイル結果表示圏外になりました。
    • Wiki::DefaultStorage::get_page_list() の処理時間が減少し、プロファイル結果表示圏外になりました。

提案プラグインの機能

  • Util::save_config_hash() をオーバーライドし、
    • ページの参照権限レベル保存ファイル showlevel.log, ページの更新日時保存ファイル modtime.dat について、施策1 で述べた簡易形式のファイル showlevel2.log, modtime2.dat として保存します。
    • ただし、試用し易いようにプラグイン形式での提供のため、プラグイン OFF に戻した場合について対処できるように、従来形式のファイルも併せて保存します。よって、保存に関しては従来より時間がかかります
    • showlevel.log, modtime.dat 以外のファイルは、従来形式のファイルとして保存します。
    • ファイル形式(従来形式・簡易形式)によらず、保存したファイルの内容をメモリ上にキャッシュします。
  • Util::load_config_hash() をオーバーライドし、
    • showlevel.log, modtime.dat について、施策1 で述べた簡易形式のファイルが存在し、従来形式のファイルより新しければ、簡易形式のファイルから読み出します。それ以外の場合は、従来形式のファイルから読み出すとともに、簡易形式のファイルを作成します。
    • showlevel.log, modtime.dat 以外のファイルは、従来形式のファイルとして読み出します。
    • 既に一度読み込み済みのファイルでメモリ上に内容がキャッシュされているファイルについては、キャッシュの内容を読み出し結果とします。
  • 施策3 を施した新メソッドで Wiki::DefaultStorage::get_page_list() をオーバーライドします。(2009-07-16 版以降)

提案プラグインパッケージの構成とインストール

  • 構成:添付ファイル ksksk.20090716.zip(473) に含まれるファイルは、次の 1 つのみです。
    • plugin/ksksk/Install.pm
  • インストール:
    1. 万一の場合に備えて、./config/(farm/)showlevel.log, ./config/(farm/)modtime.dat をコピーして保存して下さい。
    2. ksksk.20090716.zip(473) をダウンロードし、FSWiki の動作しているサーバに展開してください。
    3. 管理メニューのプラグイン設定ページから、ksksk プラグインパッケージを有効にしてください。

適用可能な FSWiki バージョン

制限事項

  • Wiki ページ名にタブ文字 '\t' を使用している運用には対応していません(施策1 参照)。
  • Util::load_config_hash(), Util::save_config_hash(), Wiki::can_show() をオーバーライドしているため、これらを独自改造している場合や、これらをオーバーライドする別プラグインと併用すると、どちらかが正しく機能しなくなります。
  • Wiki::can_show() 内で新たなキャッシュを導入しているため、BugTrack-plugin/69:権限がなく参照/編集できなかったページにログイン後移動するパッチと併用すると、ログイン状態が変化したところで動作が異常になることが予想されます。これについては、後日対策する予定です。BugTrack-plugin/69 のコメント(2009年06月24日 23時46分25秒)に対策を記載しました。
  • Wiki::DefaultStorage::get_page_list() をオーバーライドしているため、これらを独自改造している場合や、これらをオーバーライドする別プラグインと併用すると、どちらかが正しく機能しなくなります。(2009-07-16 版以降)

注意

上記のプロファイル結果は投稿者の自サイトにて得られたものであり、速度改善量は適用先の Wiki サイトに応じて異なります。特に今回の提案は、Wiki ページ数が多い Wiki サイトほど効果が出る内容になっていますので、Wiki ページ数が少ないサイトに適用するとかえって処理が遅くなる可能性もあります。適用しても効果がないと感じる場合には適用をお止め下さい。

更新履歴

2009-07-16 版:ksksk.20090716.zip(473)
下記の変更を実施しました。
  • [機能追加] ページリスト取得メソッド Wiki::DefaultStorage::get_page_list() の出力結果をファイルへキャッシュし、再利用する機能を追加。(施策3)
  • [機能変更] 施策1で Util::load_config_hash() をオーバーライドするメソッド内でのファイルロック処理を削除(要否再検討は今後の課題)。
2009-06-20 版:ksksk.20090620.zip
初版公開

今後の課題

  • Wiki::DefaultStorage::get_page_list() :出力結果をファイルへキャッシュする機能の追加。 2009-07-16 版以降で対応済み。
  • 施策1で Util::load_config_hash() をオーバーライドするメソッド内でのファイルロック処理の要否再検討。

ライセンス

GPL

 コメント

  • 運営しているサイトで早速使わせていただきました。Wikiページ数が7900ページあり、レスポンス的に限界がきていたのですが、明らかにレスポンスが良くなってます。しばらく経過を見てみます。ありがとうございます! - kuwa (2009年06月30日 21時35分21秒)
  • 施策2については特に影響がなさそうでしたので、FSWiki 3.6.4では本体に取り込ませていただこうと思います。 - たけぞう (2009年07月01日 17時32分00秒)
  • すばらしいようです。 - 名無しさん (2009年07月01日 23時19分35秒)
  • 宛 kuwa さん:効果確認いただきありがとうございます。7900ページもある実働サイト、すごいですね! 上記でテストしている 10000 ページの Wiki は実働サイトではなくテスト用サイトなので、大規模実働サイトで経過確認いただけるとありがたいです。何かお気づきの点がありましたら、どんどんコメントお願い致します。 - ぐうます (2009年07月02日 06時19分49秒)
  • 宛 たけぞうさん:SVN にコミットいただきましてありがとうございます。施策 2 は事実上 Wiki::can_show() 内だけで閉じている変更であるため他と干渉する心配は無く、取り込んでいただいても、仰る通り問題無いと考えます。 - ぐうます (2009年07月02日 06時19分49秒)
  • 宛 名無しさん:コメントありがとうございます。もし差し支えなければ、Wiki ページ数を併記いただけると参考になりますのでお願い致します(おおよその値で OK です)。 - ぐうます (2009年07月02日 06時19分49秒)
  • 700程度や100以下だったりですが体感で効果でていますよ。特にブラウザでの初動がいいです。ありがとうございます。ただウチのとこではページ作成時のページの参照権限設定の識別に干渉しているようでして状況を様子見です。 - 名無しさん (2009年07月02日 13時11分52秒)
  • ぐうますさん、若干気になった点としては、今まで見かけなかった「Lock is busy」のエラーがまれに見られるようになった事でしょうか。 - kuwa (2009年07月02日 17時09分37秒)
  • 宛 名無しさん:ご報告ありがとうございます。「ページ作成時のページの参照権限設定の識別に干渉」についても不具合状況を知りたいです。よろしくお願い致します。 - ぐうます (2009年07月04日 03時53分08秒)
  • 宛 kuwa さん:ご報告ありがとうございます。「Lock is busy」の件、再確認してみます。 - ぐうます (2009年07月04日 03時56分39秒)
  • 「Software Error:Lock is busy. at plugin/ksksk/Install.pm line 139. at lib/Util.pm line 701. 」みたいな感じです。 - kuwa (2009年07月07日 22時41分58秒)
  • 施策3 を追加した新版 ksksk.20090716.zip(473) を投稿致しました。 - ぐうます (2009年07月16日 09時26分27秒)
  • 宛 kuwa さん:旧版では、念のため閲覧時もファイルロックしていたのですが、新版ではファイルロックは保存時のみ(FSWiki 標準と同じ)としました。新版でも「Lock is busy」が出るかどうか、ご確認いただけるとありがたいです。なお、対応が遅くなりまして、申し訳ありませんでした。 - ぐうます (2009年07月16日 09時29分29秒)
  • 参照権限の自動識別によって権限の値を適用するパッチをあてた部分のようでした。新版入れてみまして、通常で問題ないようです。 - 7月2日の名無し (2009年07月16日 18時35分46秒)
  • ぐうますさん、対策ありがとうございます。とりあえず差し替えましたので、様子を見てみます。 - kuwa (2009年07月18日 00時20分48秒)
  • 数日使っていますが、「Lock is busy」は出なくなっていると思います。一度も遭遇していません。 - kuwa (2009年07月23日 14時10分50秒)
  • 宛 kuwa さん:ご報告ありがとうございます。とりあえず OK そうということなので、閲覧時のロックはこのまま無しとし、ロックの要否検討は今後の課題とさせて下さい。また何かお気付きの点がありましたらご指摘お願い致します。 - ぐうます (2009年07月23日 23時28分31秒)
  • 子ウィキにあるshowlevel.logとshowlevel2.logの中身を覗いてみました。showlevel.logファイルで推測しますと"ページ名"="数字"なのかな・・・と思うのですが、どうゆう訳か"0"=""や"1"="Help"や"Header 0"="カレンダー"という箇所があります。showlevel2.logのファイルではそれに応じて、0Tabや1 HelpやHeader 0 カレンダーとなっている箇所が存在しています。明らかにおかしいような気がするのですがこのようになるのは仕様でしょうか?- たった (2010年03月10日 18時23分19秒)
  • ご指摘の箇所は、key と value がずれてしまっているようですね。「Header(半角スペース)0」となっているところが原因だと思います。本来なら、「Header(タブ)0」となっていなければならないところのタブがスペースになっているため、データの区切りを誤っているのだと思います。これは本プラグインの仕様ではありませんし、本プラグインが原因でもありません。なぜなら、本プラグインが showlevel2.log を作成するときに key と value 以外に出力する文字はタブと改行のみなので、このプラグインの動作によってスペースが混入することはありえないからです。showlevel2.log を手動で編集したりしていませんか? - ぐうます (2010年03月11日 00時49分07秒)
  • あ、そういえば子ウィキにアクセスした際、参照権限がありません。という表示に悩まされていた時、管理画面から参照権限の設定を変更しても変わらなかったので、直接showlevel.logで参照権限の設定を変更して確認していたのを思い出しました。現在はshewleve.logと2.logを一旦削除後、管理画面から保存しなおした事で正常にshowlevel2.log共に保存されているのを確認しました。お騒がせしてすいません。 - たった (2010年03月12日 14時18分14秒)
お名前: コメント:
ksksk.20090620.zip ksksk.20090716.zip

最終更新時間:2014年02月03日 18時56分08秒