5

Google Page Insights の提案に従おうとすると、「JS レンダー ブロック」の推奨事項があり、それはjQueryメイン ファイルに関連しています。

私のサイトでは、WordPress といくつかのプラグインを使用しています。プラグインの 1 つは、その JS をインラインでスローします。そのため、フッターにロードするように移動jQueryするか、「遅延」モードを使用してロードするとjQuery is not defined、インライン コードが起動されます。

jQueryドキュメントの最後でメイン ファイルが実行された後、すべてのインライン スクリプトを「キャッチ」して遅延させるためのグローバル ソリューションを見つけようとしていました。

私は私にとってうまくいく解決策を書きました。これは私の特定の状況では非常に簡単な解決策ですが、これをフィルターthe_contentまたはウィジェット出力として作成できませんでした。これをグローバル ソリューションにしたいので、JS がどこかで起動することを心配する必要はありません。

それを機能させる方法はありますか?これまでのところ、ショートコードを実行するこの特定のケースのコードは次のとおりです。

/* Get shortcode HTML */ 
$widget_shortcode = do_shortcode($shortcode);

/* Take out all scripts into an array */
$delayed_scripts = array();
preg_match_all('#<script(.*?)</script>#is', $widget_shortcode, $match);
foreach ($match as $val){
    $delayed_script = '<script '.$val[0].'</script>';
    array_push($delayed_scripts, $delayed_script);
}

/* Remove all scripts from HTML */
$widget_shortcode = preg_replace('#<script(.*?)</script>#is', '', $widget_shortcode);

/* Echo filtered HTML */
echo $widget_shortcode;

</body>終了タグの直前:

foreach ($delayed_scripts as $script) {
    echo $delayed_script;
}
4

1 に答える 1

1

私はこの同じ問題に一生懸命取り組んできました。ここで考慮すべき点がいくつかあります。この問題は、すべてのプラグインが Wordpress のスクリプトを適切にキューに入れていれば簡単に解決できますが、残念ながら、多くのプラグインはそうではなく、代わりにスクリプトをエコーするか、標準のインクルードを使用します。

すべてのインライン スクリプトをキャッチしたい場合は、出力バッファでスクリプト タグを検索する以外に選択肢がないことを一部のコメント作成者が指摘しているように、プラグインがスクリプトをエコーする場合、バッファに送信された後、WordPress でできることは何もないためです。 .

preg ステートメントを使用し、html ドキュメント全体を検索してから文字列を操作すると、jQuery をヘッドにロードさせるよりもおそらくはるかにコストがかかることに注意してください。これにより、html ドキュメントに対するサーバーの応答時間が長くなります。この待機時間は、レンダリングが行われておらず、ユーザーが空白の画面でそこに座っている時間でもあるため、同様に悪いものです。言うまでもなく、jQuery をフッターに移動すると、jQuery に依存するものはフッターが解析されるまで機能しなくなります。これは、Google が分析コードをヘッドに配置することを推奨しているのと同じ理由です。分析コードが解析される前にユーザーが別の場所に移動した場合はどうなるでしょうか?

Google ページの速度は目安であり、規則ではありません。満点を取ろうとして頭を壁にぶつけないでください。

于 2016-10-21T06:27:55.687 に答える