web-dev-qa-db-ja.com

「?」主要なUTMコードにより、「#」よりも長いページ読み込み時間が発生します

私のUTMコードがページのロードを劇的に遅くしていた問題を見つけて修正しました。問題は、主人公が?であったことでした。解決策は、それを#に変更することでした。現在、文字通り何百ものキャンペーンがあり、先頭に?があり、それらを手動で変更すると永遠にかかります。

リクエストの受信時に?#に変更して、ページの読み込みの問題を回避することは可能ですか?

Rewrite URLを使用してそれを行う何らかの方法があるはずです。

そうでない場合、ハッシュタグが2未満であるにもかかわらず、地球上でダンの疑問符が20秒のページロードを引き起こす理由を誰でも助けることができますか?

たとえば、次のロード時間は15〜20秒です。

http://example.com/?utm_source=df_intermediate&utm_medium=email&utm_campaign=test

一方、次のロード時間は2〜4秒です。

http://example.com/#utm_source=df_intermediate&utm_medium=email&utm_campaign=test
1
Shane Weaver

これは、サイトのサーバー側のキャッシュの問題のようです。 (おそらく、キャッシュキーを生成するときにクエリ文字列を削除する必要がありますか?)

問題は、UTMコードだけでなく、anyクエリ文字列にあります。任意のURLに?hello=worldを追加すると、最初の(キャッシュされていない)リクエストの読み込み時間が長くなります(20秒以上)。ただし、同じURLを再度要求すると、後続の応答は2+秒になります。これは、ローカルブラウザーキャッシュが無効の場合です。

?#に変更することにより、クエリ文字列をフラグメント識別子に変更します。フラグメント識別子はサーバーに送信されないため、サーバー側のキャッシュに干渉しません。

おそらく、外部リダイレクトクエリ文字列のURLからフラグメントIDを持つURLへ、.htaccessのようなものになります:

RewriteEngine On
RewriteCond %{QUERY_STRING} ^(utm_source=.*)
RewriteRule (.*) /$1#%1 [QSD,NE,R=302,L]

これには、QSDフラグ(クエリ文字列を削除する)にApache 2.4が必要です。 NEフラグは、特殊文字(#)でURLに書き換えているため、必須です-パーセントエンコードされないようにするため。

ただし、これは根本的な問題を隠しているだけであり、将来さらに多くの問題が発生する可能性があります。

1
MrWhite

#の代わりに?を使用するほうが悪いと思います。

標準URLでは、#の後の部分は通常、ページ上のタグを意味し、タグはID値から定義されます。または、古風な場合は<a name='tagnamehere'>を使用します。

ページが主に静的である場合(URLのコンテンツはURLに誰がアクセスするか、何にアクセスするかに関係なく同じ場合)、サーバーにページをキャッシュする必要があります。次に、ページの準備中にキャッシュファイルが作成されますが、ページの2回目以降のロードでは、すべてのデータベース処理やその他のサーバーCPUの動作ではなくキャッシュファイルのみが読み取られるため、高速でロードされますページ。

ページが動的な場合、ページのすべての静的な部分をキャッシュしてみてください。たとえば、日付と時刻の値を除いてすべて同じものを表示するページがある場合、他のすべてをキャッシュして、日付と時刻の値を通常どおりロードします。

完了したら、webpagetest.orgを使用してページをテストし、Time To First Byte値(TTFB)を確認します。 0.2秒を超えるものはすべて不良です。

#をURLで使用できる場合の詳細については、次のURLを参照してください。

http://www.boogiejack.com/html/html-anchor-tag.html

0
Mike