Simple Search Plugin 検索処理が遅い

遅い理由の考察

非常に使いやすい素晴らしいプラグインなのですが、劇遅になるときがあります。検索時前ページの markdown / twig のレンダリング結果に対して検索をかけることに1つ理由があります。結果、ページ数が増えると、このレンダリングが結構な負荷をかけるようです。

対策

  • 生の default.md を対象に検索するように設定変更
  • 検索結果を表示する際もレンダリングしないようにテンプレートファイルを書き換えます。

設定ファイルの変更

search_content オプションを、rendered から raw に変換します。
これで、Page::content() に対して行われていた検索が、Page::rawMarkdown() に対して行われるようになり、私の環境では、爆速化しました。

/your/site/grav/user/plugins/simplesearch

search_content: rendered

 ↓

search_content: raw

テンプレートの変更

Markdown と Twig をレンダリングしている箇所を削除してしまいます。

/yoursite/grav/user/plugins/simplesearch/templates/partials/simplesearch_item.html.twig

元のテンプレート(Twig ファイル)

<section class="search-row">

    {% set banner = page.media.images|first %}

    {% if banner %}
        <div class="search-image">
            <a href="{{ page.url }}">{{ banner.cropZoom(100,100).html|raw }}</a>
        </div>
    {% endif %}
    <div class="search-item">
        <div class="search-title">
            <h3><a href="{{ page.url }}">{{ page.title }}</a></h3>
        </div>

        <div class="search-details">
            <span class="search-date">{{ page.date|date(config.system.pages.dateformat.short) }}</span>
        </div>

        <p>{{ page.summary|raw }}</p>

        <hr/>
    </div>
</section>

軽量化したテンプレート(Twig ファイル)

banner.cropZoom(100,100).html|raw や、{{ page.summary|raw }} あたりの処理が重いので、バッサリ切り取ってしまいます。

<section class="search-row">
    <a href="{{ page.url }}">{{ page.title }}</a>
    <span class="search-date">{{ page.date|date(config.system.pages.dateformat.short) }}</span>
</section>