練習ページ/ecacheに関して

Last-modified: 2022-11-26 (土) 22:58:10

内容をまとめるのに時間がかかるのでしばらくお待ちください。
テストはこのへんでやってます。
意見などありましたらコメント欄にお願いします。

目次

ecacheに関する説明

↓「ecacheプラグインのページ」より引用

Wiki 文法の出力 HTML をキャッシュし、負荷軽減を試みます。類似ものに比べて手軽さがウリです。
MenuBar に、処理がそこそこかかるプラグイン(popular など)を設置する際、 reset=[秒数]オプションを利用して、一時間ごとにだけ更新させる、のようにするとかなりの負荷軽減になると思います。
  • ecache未適用:ページ内容(文字)を受け取って書式毎に変換してから表示。
  • ecache適用:変換したものを保存(キャッシュ)し、変換済みの内容を受け取って表示(変換済みなのでその分の処理が減る)。
    技術者ではないので詳しい事は分かりませんが、大体こんな感じだと思います。

基礎知識

  • 基本的に適用すれば負荷軽減が見込めるが、理解せずに適用するとトラブルの原因となる(内容が正常に更新されないなど)。
  • (reset=new)または(reset=数字)に従って、「ecacheのキャッシュファイルの更新日時」と「ページの更新日時」の比較(確認)が行われる。
    その時「ecacheのキャッシュファイルの更新日時」のほうが古い場合に限り、キャッシュファイルの更新が行われる。
    つまり指定したタイミングで必ずキャッシュを更新しているのではなくキャッシュの更新をする必要(指定した範囲に変更)があるか確認してから必要である時にだけ更新している

↓下記は「ecacheプラグインのコメントページ」より引用(かなり横長になるため一部改行しています)。

-はじめまして。現在、pukiwiki1.4.6にて快適に使用させていただいております。 reset=秒数について、いくつか質問させてください。
reset=秒数は何秒まで対応という制限はあるのでしょうか?
具体的には reset=86400(1日)という長さでも自動更新の想定範囲内にになりますでしょうか?
もうひとつ、 >reset=秒数で指定秒数毎にキャッシュを強制リセット(new の効果もある)。
このnewの効果というのはreset=秒数以外にも特別なオプション等の記述が必要となるのでしょうか?
複数の質問で大変恐縮ではありますが、お答えいただければ幸いです。m(_ _)m -- もにょにょ? 2008-03-04 (火) 19:56:02
--1日でも大丈夫です。new の効果というのは wiki ファイルが新しければ更新、ということです。
1日間隔で必ず更新し直すのではなく、1日毎に new チェック(wiki ファイルが新しいかどうか)して新しければ更新します。
reset オプションがそういう動作をするという意味です。 -- sonots 2008-03-04 (Tue) 13:11:12
--お答えありがとうございます。 1日でも大丈夫とのことで安心できました。
Newに関しては、ちゃんと自動で最新チェックをして更新するかどうかを、プラグインが判断してくれるのですか。高性能ですね
てっきり、時間指定ごとに強制的に記述ページのキャッシュを更新していくのかと思ってました。
で、あれば予想以上に負荷は高くなくて済みそうです。助かります -- もにょにょ? 2008-03-05 (水) 11:23:11
  • (reset=数字)は(reset=new)としても機能する。
  • foldなどと同じく「{{}}」の数が自動的に調整される。
    必ずしも外側にある「{{}}」の数を増やさなければいけない、という訳ではない。
    編集者視点では外側が多いほうが全体を把握しやすいかもしれない。
  • 1つのページで複数のecacheを適用でき、「cache/encode(ページ名)_番号.ecache」のような名前で作成される。
    番号の命名規則は上から連番(1,2,3...)。

-wikiwikiの仕様が変わったため、(reset=数字)が指定通りのタイミングで更新されない場合がある。
恐らくそれが原因でプレビューによるecache更新ができない。
どこかでそんな感じの情報を見かけたのだけれどブックマークし忘れ(2019年ごろにキャッシュの仕様がなんとか~、みたいな内容)。
コメントでテストしていた時は特に問題無かったので一部誤情報かも、プレビューに関しては調査中。

オプション毎の違い

指定できるオプションに関する説明。
他のページ内容を参照する書式に関しては個別に説明する予定(しばらくお待ちください)。
できれば図解もしたいがそのために書式の勉強をする必要がありそうなのでしばらくは文章のみ。

#ecache(reset=new)

これを指定したページの内容(タイムスタンプ)が更新された時、適用範囲の内容に変化があったか確認するオプション。
変化があった時に限りecacheのキャッシュファイルを更新する。
指定したページの内容が更新された時のみ確認を行うので、他のページ内容を参照する書式に利用するとトラブルの原因となる
そのため、長期間放置されているページでも問題が発生する可能性がある。

ecacheを理解している編集者が使用するなら問題ないが、そうでない編集者がそういった書式を適用範囲に使用してしまう可能性があるので注意。

当wikiでは主に無編集更新(ecacheを任意のタイミングで更新させるため)用に「//ecache更新用CO(適当に増減)→//」が用いられている模様。
編集者にとって都合が悪くないのであれば、無編集更新をしなくて済む(reset=数字)のほうが楽である。

#ecache(reset=数字)

指定した秒数が経過するたびに適用範囲の内容に変化があったか確認するオプション。
変化があった時に限りecacheのキャッシュファイルを更新する。
それに付け加え、上記の(reset=new)の機能も持ち合わせている。

他のページ内容を参照する書式には必ずこちらを利用する必要がある

数字の指定に関しては「書式、ページの参照頻度(需要)、参照先ページの更新頻度」によって事情が変わるので適切な値も異なってくる。
他のページ内容を参照する書式」で説明をする予定だが、最終的には編集者同士で話し合って決めたほうがいいかもしれない。

  • 未調査
    正の整数以外を指定
    ページが更新された時の指定秒数リセットの有無

#ecache(reset=on) (調査中)

#ecache(reset=off) (調査中)

#ecache(page=ページ名)

あまり重要ではないので後で。
書き方 #ecache(page=ページ名,reset=オプション)

他のページ内容を参照する書式 (未完成)

「他のページ内容を参照する書式」の場合、参照先の内容が更新されても参照元のページは更新されないので(reset=new)によるecacheの確認も行われない。
そのためecacheの適用範囲にある「他のページ内容を参照する書式」の内容がすぐに更新されない、といった現象が発生する。
それを防ぐために(reset=数字)で適切な値を指定する必要がある。

※書式を全て調べるのが大変なので、加えてほしい書式があったらコメントにお願いします。

#include

#lsx

#pcomment

#twitter_timeline

リンク

提案 (あとで追加予定)

練習ページ/MenuBar

一気に適用しても問題ないはずですが、一応様子を見ながら段階的に適用します(目安1,2週間毎)
めんどくさかったので一気に適用しました。(3/30)
No.1の状態に戻しました。(3/31)
ecacheを試験的に適用中の「練習ページ/MenuBar」に問題が発生した場合は、コメント欄などで報告していただけると助かります。
上記にあるとおり、作成でき次第ecacheに関する説明や情報などを追加する予定です。

最終更新日(2022/03/28)

No.大まかなecache適用内容(予定)進捗
01「別ページを参照する」書式以外←これに戻しました
02includeも追加
03popular以下も追加
other全体を囲って個別に変更

投票フォームによる動作報告

コメントするのがめんどくさい時はここをポチってください。

選択肢 投票
No.01 問題有り 0  
No.01 問題無し 0  

前提

通常Menubarは他のページも同時に表示しているせいか、ページ名を指定しないとキャッシュの命名規則(連番)の都合上おかしくなる事がある模様。
そのため練習ページ/MenuBarではページ名を明記している。
まだまともに利用していなく、「調べたい要素が複数ある」ので情報の正確性に関しては保証できません。

No.01 「別ページを参照する」書式以外

そのままの意味ですが全て列挙するのは大変なので割愛。
目次や見出しでも問題が起こる事があるようだがここでは割愛。
リンクも含んでいるので厳密には【リンクを除いた「別ページを参照する」書式以外】。

No.02 includeも追加

別ページの内容を参照する書式でよく使われるやつ。
該当ページ全体を参照するので、これにecacheを適用すると結構違うらしい。
ただしincludeを利用しているページを更新しない場合、ecacheの指定がデフォルト(reset=new)だと問題が起こる。
ページに応じて適切な(reset=数字)を設定する必要がある。

No.03 popular以下も追加

これらの書式は更新頻度が高いため、意図的に更新頻度を下げて負荷を軽減させる目的で使われる。
支障のない範囲内で(reset=数字)を大きめに設定するとよい。
技術的な仕様は把握していないので、書式毎の具体的な更新頻度は不明。
利用者次第の側面があるので数字の微調整は必須かもしれない。

other 全体を囲って個別に変更

MenuBar以外で試す予定。

書き方のイメージ

ecache(reset=new){{{
ページの更新時にのみキャッシュの更新を確認すれば問題ない内容
ecache(reset=3600){{
定期的にキャッシュの更新を確認させたいページの内容
}}
ecache(reset=off){{
ページの内容
}}
ecache(reset=on){{
#pcomment(./コメント,20,reply)
}}
}}}

全体を囲って個別に記述、という事ができるのか試してみたい。
個別のみと比較して恐らく管理がしやすいが、別ページを参照する書式を適当に追加されるとトラブルの元になるかも。
即座に適用されなければいけない項目でもない限り、全体をecache(reset=数字)にすればおおよそ問題ない。
onやoffの具体的な機能やキャッシュの取り扱いなども調べてみたい。

現状

過去の更新内容(3/30)

閉じる

  • No.3の内容まで適用済み。(3/30)
    練習ページ/MenuBarにある全ての項目にキャッシュを適用、基本的には1時間毎更新。
    「検索」は検索後に「新規作成されたページ」や「ページの更新日時」の表示に影響が出るようであれば要調整。
    イベント情報(イベント一覧)は、includeなので該当ページの更新頻度を考慮して1時間毎更新、1時間より短い間隔で更新する事がある場合は要調整。
    • 今日の10件は30分毎更新で様子見、元々リアルタイム更新のようなので気になるなら更に短く設定。
      最新20件は3分毎更新で様子見、元々リアルタイム更新だと思われるが必要に応じて1~300の範囲で微調整。
      T(今日)Y(昨日)は10分毎更新で様子見、気にならないなら1時間毎でもいいと思う。
      現在のアクセス数、トータルは1分毎更新で様子見、元々リアルタイム更新のようなので気になるなら更に短く設定。
練習ページ/MenuBarは今こんな感じ

閉じる

#ecache(reset=3600){{
*検索
~
}}
#ecache(reset=1800){{
#popular(10) (今日の10件)
}}
#ecache(reset=180){{
#recentdetail(20) (最新の20件)
}}
#ecache(reset=600){{
T.&counter(today); Y.&counter(yesterday); {T(今日)Y(昨日)}
}}
#ecache(reset=60){{
NOW.&online; TOTAL.&counter(total); (現在ログインしている人の数、トータル)
}}
  • 特に問題がなければMenuBarで試験運用したい。
    特に更新頻度に関してはどの程度だと都合が良いのか分からないので、実際に運用して感想を聞きたい。
    • 「NOW.」「T.」「Y.」「TOTAL.」はwikiのページ更新が行われない時間帯(深夜など)には意図したタイミングで更新が行われない可能性があるので要調査。
      そもそも「#twitter_timeline」のような特殊挙動かもしれない(ecacheの設定に関わらず5分毎に更新※調査中)。

メモ

T.~ Y.~
NOW.~ TOTAL.~
  • 全ページ共通
    「NOW.」現在ログインしている人の数
  • 現在開いているページに基づいた表示
    「T.」今日の総アクセス数
    「Y.」昨日の総アクセス数
    「TOTAL.」今までの総アクセス数

「NOW.」とそれ以外で求められる更新頻度は変わると思うので、下記のような位置にして別々にecacheを適用できるようにしたい。

NOW.~
T.~ Y.~ TOTAL.~

練習ページ/MenuBarは今こんな感じ

閉じる

#ecache(reset=3600){{
*情報
~
''上記に無いプラグイン''
//''新規導入プラグイン''
}}
  • ecacheを適用していないMenuBarと、ecacheを適用した練習ページ/MenuBarを比較していて気付いた事。(3/31)
    全ページ(左または下)に表示されているMenuBarはどちらも処理が15ms前後でほぼ変化が無い{合計処理時間(ms)-本文(ms)}。
    • この事から「全ページでMenuBarがincludeのようなものを用いて表示されている(またはキャッシュもされている)。」と思われる。
  • 直接MenuBarを開いた場合はecacheの有無で差が出る。
    • MenuBarのアクセス数は1日30回程度(今日の100に入る程度?)。

これらを踏まえてとりあえずNo.1の状態(通常の文章とリンクのみ)に戻しました。
popular以下も利用者にとってどのくらいの更新頻度が良いのか分からなかったので未適用。
結論としてはMenuBarにこれを適用するかecacheをそもそも適用しない、のどちらかがよいと思われます。
以下に投票をお願いします。

選択肢 投票
部分的にecacheを適用する 0  
ecacheを適用しない(現状維持) 0  

コメント