MTAppjQuery v3 で大量のコンテンツデータ、コンテンツフィールドを作ると重くなる場合の対処法

MTAppjQuery v3 で大量のコンテンツデータ、コンテンツフィールドを作ると管理画面が重くなる場合がありますが、設定の変更と user.js への追記で対応できます。

この記事は弊社 bit part 合同会社が提供している Movable Type プラグイン「MTAppjQuery」の利用を前提としております。MTAppjQuery って何?という方は弊社の「MTAppjQuery」の製品ページをご覧ください。

MTAppjQuery v3 を利用している環境で、コンテンツタイプのコンテンツフィールドの数が大量になると、管理画面が著しく遅くなる場合があります。

この問題への対処法をご紹介します。

遅くなる原因

MTAppjQuery v3 では、mtappVars.contentTypes というプロパティに全てのサイトのコンテンツタイプの情報がセットされます。

コンテンツタイプやコンテンツフィールドの数が増えると、このデータのロードに時間がかかってしまい、それが管理画面が遅くなる原因です。

設定の変更

この機能は、各サイトの MTAppjQuery プラグインの設定において、「利用データの設定 > 全てのコンテンツタイプの情報を利用する」を 無効 にすることで停止することができます。

Clean Shot 2024 06 19 at 12 12 20 2x

ただ、MTAppjQuery の中の下記のメソッドでは、この mtappVars.contentTypes のデータを利用しているので、これらのメソッドを利用している場合は、この機能を無効化すると不具合が発生してしまいます。

  • mtapp.duplicate()
  • mtapp.getContentDataFields()
  • mtapp.getCurrentContentType()
  • mtapp.multiField() のコンテンツデータフィールド

これらのメソッドを利用している場合は、下記の手順で user.js に手動で情報を加えることで不具合を防ぐことができます。

現状の mtappVars.contentTypes の内容を取得

上記の「全てのコンテンツタイプの情報を利用する」の設定を無効にする前に、そのサイトの管理画面を開いた状態で、ブラウザの開発者ツールのコンソールに以下のコードをペーストして実行します(不要なプロパティを削除する処理が入っています)。

mtappVars.contentTypes.forEach((contentType) => {
    delete contentType.unique_id;
    delete contentType.description;
    if (Array.isArray(contentType.fields)) {
        contentType.fields.forEach((field) => {
            delete field.unique_id;
            delete field.description;
            if (typeof field.options === 'object') {
                for (let option in field.options) {
                    if (option !== 'category_set') {
                        delete field.options[option];
                    }
                }
            }
        });
    }
});
console.log(JSON.stringify(mtappVars.contentTypes));

すると現状の mtappVars.contentTypes の内容が表示されるので、その内容をコピーします。Chrome の場合は「copy」ボタンをクリックしてコピーできます。

Clean Shot 2024 06 19 at 12 25 46 2x

user.js に設定を追加する方法

上でコピーした内容を下記のように mtappVars.contentTypes = の後に続けて貼り付けます。貼り付けた文字列の先頭と最後にシングルクオーテーションがある場合は削除します。

mtappVars.contentTypes = [{"data_label":null,"description":"...省略...","fields":[{"description":"","id":1,"label":"Title","options":{}}],"id":334,"name":"サンプルサイトX","site_id":111}];

// 以下のように最初と最後のシングルクオーテーションが残らないように注意
// mtappVars.contentTypes = '[{"data_label":null,"description":"...省略...","fields":[{"description":"","id":1,"label":"Title","options":{}}],"id":334,"name":"サンプルサイトX","site_id":111}]';

これで不具合が発生ぜずに前掲のメソッドも引き続き利用することができます。

mtappVars.contentTypes 用のファイルを作成

user.js がサイトごとに分かれているときは、上記の方法で管理するのは手間です。そこで、新規に mt-static/support/MTAppjQuery/contenttypes.js というファイルを作成し、上記の内容を貼り付けます。

そして、システムのMTAppjQueryプラグインの設定の「自由テキストエリア > head の開始タグの直後」に下記のテンプレートを貼り付けて保存します(「システムの管理画面に適用する設定」というセクションにも同じ設定項目がありますが、そちらではありませんのでご注意ください)。

<script defer type="text/javascript" src="<mt:StaticWebPath remove_host="1" />support/MTAppjQuery/contenttypes.js"></script>

注意事項

上記の方法は mtappVars.contentTypes の内容が固定されたものになってしまいますので、コンテンツタイプやコンテンツフィールドを追加した時は user.js の mtappVars.contentTypes の内容も改めて更新する必要があります。

また、本番環境、開発環境など、環境が複数ある場合はそれぞれの環境で作業する必要があります。

今後について

今回紹介した対処法では制作者様にお手数をおかけしてしまいますので、今後のアップデートの際の課題とさせていただき、追って改善していきたいと思います。

Published 2024-06-19
Updated 2024-06-19

「MTAppjQuery」カテゴリの記事一覧