現在実装されているGalleryブロックには、生成するリクエストの数が原因で、パフォーマンスとスケーリングの問題があります。 私はReactのベストプラクティスに精通していませんが、ギャラリーで作業するときに何が表示されるかを説明しようと思います。
新しいギャラリーブロックを挿入します
[メディアライブラリから挿入]ボタンをクリックして、メディアモーダルを開きます
これは標準的な動作ですが、何が起こるかを説明するためだけです。メディアモーダルを初めて開くと、 query-attachments
AJAXリクエストを送信して、最新の40個の添付ファイルをフェッチし、でアクセス可能なグローバルコレクションに追加します。 wp.media.model.Attachments.all
。ライブラリをスクロールすると、一度に40個の添付ファイルが遅延ロードされます。
10枚の画像を選択し、[新しいギャラリーを作成]ボタンをクリックします
「ギャラリーを挿入」ボタンをクリックします
__ギャラリーを挿入すると、Galleryブロックは、ギャラリー内の画像ごとにRESTAPIへの個別のリクエストを起動します。 この場合、ギャラリーをプレビューする前に応答する必要がある10個のリクエストです。
サーバーをリクエストで非難することに加えて、これは次善のレンダリング遅延も作成します。__
ツールバーの編集ボタンをクリックして、ギャラリーを更新します
__ブロックは、ギャラリー内の各画像に対してget-attachment
AJAXリクエストを送信します。 これは、メディアフレームが開かれるたびに発生します。__
メディアフレームを閉じる
投稿を保存する
更新
__エディターが読み込まれると、画像はRESTAPIから個別にフェッチされます。__
ギャラリーがより速くレンダリングされることを期待していました。 私のローカルマシンでは、10枚の画像を含むギャラリーのレンダリングに4〜10秒かかる場合があります。
理想的には、投稿にギャラリーがある場合、最初の読み込み中に余分なリクエストが発生しないように、画像データが事前に読み込まれます。
メディアフレームを開くとき、PR#2488はリクエストを最小限に抑えるのに役立ちます。
メディアフレームからギャラリーを挿入する場合、ギャラリーのレンダリングに必要なすべてのデータがwp.media.model.Attachments.all
コレクションで利用可能である必要があります。 画像ごとに新しいリクエストを生成するのではなく、すでにメモリにあるデータを使用すると便利です。 もう1つのオプションは、1回のリクエストですべての画像のデータをフェッチすることです。
GalleryImage
コンポーネントのwithAPIData
を無効にしてみましたが、すべてが正常に機能しているように見えましたが、十分にテストしていませんでした。 それが削除された場合、ギャラリーはほぼ瞬時にレンダリングされます。
PR#2488は、ギャラリーを編集するときにメディアフレームを正しい状態にしますが、モーダルを開くときに画像ごとに個別のAJAXリクエストが生成されるのを防ぎます。
画像ごとのリクエストの元々の必要性は、ギャラリーのショートコード貼り付け(cc @iseulde)の一部として#2874で導入されました。 ほとんどの場合、APIリクエストはまったく必要ないようです。したがって、理想的にはスキップできます。 ギャラリーのショートコードをサポートするには、変換自体がブロック属性への解決の約束を返すことができ、その間にIDを期待される属性の形状に変換できる方がよいのではないかと思います。
10枚の画像を含むギャラリーブロックを追加し、WordPress4.9.8とGutenberg4.1.1を使用して72Mbps接続でエディターページを更新することをテストしたところ、ギャラリーページの更新に約6.2秒かかることがわかりました(完全なテスト:1分3秒)。
最近の画像の取得方法の変更により、これは期待どおりに機能していると思います。 4.3で、この報告された問題から読み込み時間が改善されたこと、および画像が過去に表示されていた方法で読み込まれていないことを確認しました。 これはRCへのブロッカーではないため、5.0RCマイルストーンから移行します。
最初に提案されたPRは、しばらく前にマージされました。