• 更新:
  • 投稿:
  • カテゴリィ:

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>

[2] このページの一番上へ戻る