limit モディファイア
結論: MT4.x で「記事を○○順に□件 並べる」場合は limit
モディファイアを使おう!
──はい。ということで今回は、このブログではお馴染みの、
「またオレが ろくでもない情報を垂れ流しちゃいました☆ てへっ :-P」
という、お詫び記事です。スンマセンですたー(「別に……」という態度で)。
以前、下記のような記事を(得意満面で)書きました。
MT4 で「更新日時が最新」の記事をプラグイン無しで表示 : 亜細亜ノ蛾
──が、Movable Type 4.xでは、limit
モディファイアを使えば、上記のような小細工は不要です(バージョンいくつから使えるかは知らない)。
ref.: lastn モディファイアと limit モディファイアの違い | MovableType.jp
後述しますが、再構築にかかる時間も、limit
を使ったほうが速いです。
lastn と limit のパフォーマンス
自分が見付けた方法、通称「lastn 法」と公式の「limit 法」で、どれくらいパフォーマンスに差が出るか、実験してみました。
新規にブログを作成し、下記(記事の末尾)のテンプレートを使って、「記事が 10 件の場合」と「100 件の場合」で測定しました。ちなみに、最初は記事を 10 件インポートし、100 件の場合はインポートを 9 回実行しています(同じ記事が 10 件ずつある状態)。
3 回測定して平均値を割り出し、小数点 2 桁以下を四捨五入した結果は、下記の通り:
- 記事が 10 件の場合
- lastn: 34.89 ms
- limit: 5.35 ms
- 記事が 100 件の場合
- lastn: 331.93 ms
- limit: 8.04 ms
\(^o^)/オワタ ──というくらい、差が出ましたね!
よく見ると──というまでもなく、lastn のほうは記事数に比例して時間がかかっていますが、limit は誤差の範囲内です。たぶん、記事が 1000 件くらいになっても、それほど差が出ないのでは。
lastn と limit を同時に使えるか?
ついでなので、もう一つ調べてみました。
こんなコードを書くと:
<MTEntries lastn="15" limit="1" sort_by="modified_on">...</MTEntries>
──「登録日時が新しい記事 15 件の中から、更新日時が 1 番新しい記事」を抜き出すことができそうですが、無理でした。limit
が勝ってしまい、lastn
は無視されるようです。
もしもこの書き方が使えるなら、feed(RSS, ATOM)テンプレートで「最新の更新日」に使えるんですけどね。feed テンプレートは、デフォルトで「登録日時が新しい記事から 15 件」を抜き出しているので、その 15 件の中で更新した日時がわかると便利なのですが(ややこしいね!)。
そんなときには、やっぱり(オレの)「lastn 法」、ですかね……。 ( ´_ゝ`)
測定に使ったテンプレート
<html>
<head>
<title>latn/limit test</title>
</head>
<body>
<!-- lastn 法を測定 -->
<MTStopWatch start="1">
<MTEntries lastn="100" sort_by="modified_on">
<MTUnless name="XXX_last_mod1">
<p><MTArchiveDate format="%B"></p>
<MTSetVar name="XXX_last_mod1" value="1">
</MTUnless>
</MTEntries>
<p>lastn: <MTStopWatch stop="1" magnify="1000" sprintf="%.3f"></p>
<!-- limit 法を測定 -->
<MTStopWatch start="2">
<MTEntries limit="1" sort_by="modified_on">
<p><MTArchiveDate format="%B"></p>
</MTEntries>
<p>limit: <MTStopWatch stop="2" magnify="1000" sprintf="%.3f"></p>
</body>
</html>