bugtrack_listは、表示時に列挙対象の全ページを読み込むのでサーバー負荷が高く、また表示に時間がかかっている。
表示項目を適切にキャッシュすることで、表示の高速化とサーバー負荷軽減を実現したい。
仕様:
function plugin_bugtrack_list_pageinfo($page, $no = NULL, $recurse = TRUE, $filetime = NULL)で、move to NewPageName のリダイレクト先を読み込んでリストに反映するかを制御している3つ目の引数はTRUE or FALSEフラグ前提で設計されていたような気がするので、本来の意味合いでは
$data[] = plugin_bugtrack_list_pageinfo($page['name'], NULL, FALSE, $page['filetime']);の呼び出し方のほうが正しいのではないかと… -- 2016-12-01 (木) 21:12:18
--- a/plugin/bugtrack.inc.php +++ b/plugin/bugtrack.inc.php @@ -299,7 +299,7 @@ function plugin_bugtrack_list_convert() // Cache management $data_updated = true; $cache_filepath = CACHE_DIR . encode($page) . '.bugtrack'; - $json_cached = file_get_contents($cache_filepath); + $json_cached = _pkwk_file_get_contents($cache_filepath); if ($json_cached) { $wrapdata = json_decode($json_cached); if (is_object($wrapdata)) { @@ -386,7 +386,7 @@ EOD; } $json = array('refreshed_at'=>$refreshed_at, 'pages'=>$data, 'version'=>$cache_format_version); $cache_body = json_encode($json, JSON_UNESCAPED_UNICODE + JSON_UNESCAPED_SLASHES); - file_put_contents($cache_filepath, $cache_body); + file_put_contents($cache_filepath, $cache_body, LOCK_EX); } } $table = array(); @@ -447,3 +447,14 @@ function plugin_bugtrack_list_pageinfo($page, $no = NULL, $recurse = TRUE, $file return array($page, $no, $summary, $name, $priority, $state, $category, $filetime); } + +function _pkwk_file_get_contents($filename) { + if (! file_exists($filename)) { + return false; + } + $fp = fopen($filename, 'rb'); + flock($fp, LOCK_SH); + $file = file_get_contents($filename); + flock($fp, LOCK_UN); + return $file; +}こんな感じかな。 -- bee 2016-12-03 (土) 00:30:54