私の連絡先情報
郵便メール:
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
学名は Event Tracking で、主にユーザーの行動やビジネス プロセスの関連テクノロジと実装プロセスをキャプチャ、処理、送信することに重点を置いています。
ポイントの埋め込みはデータ分野の専門用語であり、インターネット分野の通称でもあります。
埋没ポイントは製品データ分析の基礎であり、一般的にレコメンドシステムからのフィードバック、ユーザー行動の監視と分析、新機能や運用活動の効果の統計分析などに使用されます。
埋め込みポイントには、イベント (event) と属性 (param) という 2 つの重要な概念が含まれます。
トレースレス埋め込み(完全埋め込み)は、ブラウザまたはアプリの組み込み監視方法を使用して、ユーザーの閲覧ページ、クリック、およびその他の動作を監視します。一般に、企業のスラーダーなどの粗粒度のデータ分析に使用されます。
欠点:
コード埋め込みポイント、フロントエンド開発者がコード内の監視と収集をカスタマイズ
欠点:
埋没ポイント SDK、SDK は埋没ポイントを報告するためのインターフェイスを公開しており、開発者は会社のお茶などの監視と収集のプロセスを認識していません。
短所: NA
アドバンテージ:
通常、フロントエンドはページの寸法に従って埋め込みポイントをカウントします。一般的なイベント属性は次のとおりです。
属性 | 説明する |
---|---|
ユーザID | ユーザー ID は、ユーザーがログインしていない場合、特定の識別 ID を返します。 |
URL | 現在のイベントをトリガーしているページの URL |
イベント時間 | 非表示ポイントをトリガーしたタイムスタンプ |
現地時間 | 非表示ポイントをトリガーしたユーザーの現地時間は、標準の YYYY=MM-DD HH:mm:ss 形式で表現されます。これは、後で直接文字列クエリを行う場合に便利です。 |
デバイスタイプ | ユーザーが現在使用しているデバイスの種類 (Apple、Samsung、Chrome など) |
デバイスID | 現在のユーザーが使用しているデバイス ID |
osタイプ | システムタイプはWindows、MacOS、iOS、Androidに入ります |
osバージョン | システムバージョン |
アプリバージョン | アプリケーションのバージョン |
アプリID | 現在のアプリケーションID |
余分な | カスタム データ (通常はシリアル化された文字列)、およびデータ構造は安定したままでなければなりません |
イベント | 報告時間 | 説明する |
---|---|---|
ページ滞在 | 現在のページが切り替わったとき、またはページがアンロードされたとき | 前のページの閲覧時間を記録する |
PV 動画 | ページに入ると | ページ訪問数。UV は deviceId に基づいてフィルタリングする必要があるだけです |
交流イベント | ユーザーインタラクションイベントがトリガーされたとき | クリックや長押しなど。 |
論理的なイベント | 論理条件が満たされた場合 | ログインやジャンプページなど。 |
現在、パフォーマンス インジケーター データのほとんどは window.performance API から取得されます。
パラメータ名 | 説明する |
---|---|
接続終了 | HTTP (TCP) ブラウザとサーバー間の接続が確立されたときのタイムスタンプを返します。永続的な接続が確立されている場合、戻り値は fetchStart 属性の値と等しくなります。接続の確立とは、すべてのハンドシェイクと認証プロセスが完了することを指します。 |
接続開始 | ドメイン名クエリの最後にある HTTP (TCP) タイムスタンプ。永続的な接続が使用されている場合、または情報がキャッシュまたはローカル リソースに保存されている場合、この値は fetchStart と一致します。 |
domComplete | 現在のドキュメントの解析が完了しました。つまり、Document.readyState が「complete」になり、対応する readystatechange がトリガーされたときのタイムスタンプです。 |
domContentLoadedEventEnd | すぐに実行する必要があるすべてのスクリプトが実行されたときのタイムスタンプ (実行順序に関係なく)。 |
domContentLoadedEventStart | パーサーが DOMContentLoaded イベントを送信すると、実行する必要があるすべてのスクリプトが解析されたときのタイムスタンプが返されます。 |
domインタラクティブ | 現在の Web ページの DOM 構造が解析を終了し、埋め込みリソースの読み込みを開始したとき (つまり、Document.readyState プロパティが "interactive" に変更され、対応する readstatechange イベントがトリガーされたとき) のタイムスタンプ。 |
dom読み込み中 | 現在の Web ページの DOM 構造の解析が開始されるとき (つまり、Document.readyState プロパティが「loading」に変更され、対応する readystatechange イベントがトリガーされるとき) のタイムスタンプ。 |
ドメインルックアップ終了 | DNS ドメイン名のクエリが完了した時刻。ローカル キャッシュ (つまり、DNS クエリなし) または永続的な接続が使用されている場合は、fetchStart 値と同じです。 |
ドメインルックアップ開始 | ドメイン名のクエリが開始されたときの DNS UNIX タイムスタンプ。永続的な接続が使用されている場合、または情報がキャッシュまたはローカル リソースに保存されている場合、この値は fetchStart と一致します。 |
フェッチ開始 | ブラウザは、HTTP リクエストを使用してドキュメントのタイムスタンプを取得する準備ができています。この時点は、アプリケーション キャッシュがチェックされる前になります。 |
ロードイベント終了 | ロード イベントが終了したとき、つまりロード イベントが完了したときのタイムスタンプ。このイベントがまだ送信されていないか、まだ完了していない場合、その値は 0 になります。 |
ロードイベント開始 | ロード イベントが送信されたときのタイムスタンプ。このイベントがまだ送信されていない場合、その値は 0 になります。 |
ナビゲーション開始 | 同じブラウザで前のページのアンロードが終了したときのタイムスタンプ。前のページがない場合、この値は fetchStart と同じになります。 |
リダイレクト終了 | 最後の HTTP リダイレクトが完了したとき (つまり、HTTP 応答の最後のビットが直接受信されたとき) のタイムスタンプ。リダイレクトがない場合、またはリダイレクトが別のオリジンからのものである場合、この値は 0 を返します。 |
リダイレクト開始 | 最初の HTTP リダイレクトが開始されたときのタイムスタンプ。リダイレクトがない場合、またはリダイレクトが別のオリジンからのものである場合、この値は 0 を返します。 |
リクエスト開始 | ブラウザがサーバーに対して HTTP リクエストを行ったとき (またはローカル キャッシュの読み取りを開始したとき) のタイムスタンプを返します。 |
レスポンス終了 | ブラウザがサーバーから最後のバイトを受信したとき (またはローカル キャッシュから読み取ったとき、またはローカル リソースから読み取ったとき) (または、HTTP 接続がその前に閉じられていた場合は閉じられたとき) のタイムスタンプを返します。 |
レスポンス開始 | ブラウザがサーバーから最初のバイトを受信したとき (またはローカル キャッシュから読み取ったとき) のタイムスタンプを返します。最初のリクエスト後にトランスポート層が失敗し、接続が再度開かれた場合、この属性は、新しいリクエストの対応する開始時間としてカウントされます。 |
セキュア接続開始 | HTTPS は、ブラウザとサーバーが安全な接続のためのハンドシェイクを開始したときのタイムスタンプを返します。現在の Web ページに安全な接続が必要ない場合は、0 を返します。 |
アンロードイベント終了 | unloadEventStart に対応する、アンロード イベント処理が完了したときのタイムスタンプ。前のページがない場合、この値は 0 を返します。 |
アンロードイベント開始 | 前のページ アンロード イベントがスローされたときのタイムスタンプ。前のページがない場合、この値は 0 を返します。 |
インジケーター名 | 説明する |
---|---|
FP | ページの最初の描画時間 |
FCCPについて | ページにコンテンツが初めて描画された時刻 |
FMP | ページの最初の有効描画時間 FMP>=FCP |
翻訳 | ページの完全なインタラクティブ時間 |
フィデリティ | ページ読み込みフェーズ中の、ユーザーの最初のインタラクションの遅延時間 |
インド | ページの読み込み段階で、ユーザー操作で発生する可能性のある最大遅延時間 |
負荷 | ページが完全にロードされた時刻(ロードイベントが発生した時刻) |
FP (FIrst Paint) インジケーターは、通常、ページの白い画面時間を反映し、ユーザーがコンテンツを待機する時間が短いほど、Web ページの読み込みパフォーマンスを反映します。は非常に良好です。白い画面です。時間が短いほど、ユーザーの離脱の可能性は低くなります。
このインジケーターは、preformance.getEntriesByType('paint') メソッドを通じて PerformancePaintTming API によって提供されるポイント情報を取得できます。first-paint という名前のオブジェクトを見つけます。説明は FP インジケーター データです。
FCP (First Contentful Paint) とは、パフォーマンス統計指標において、ユーザーが Web ページにアクセスし始めてから FCP までの時間をコンテンツのない時間とみなします。 、FCP >= FP
インジケーターは、performance.getEntriesByType('paint') メソッドを通じて、PerformancePaintTiming API によって提供されるポイント情報を取得できます。次の図に示すように、FCP インジケーター データを記述する first-contentful-paint という名前のオブジェクトを見つけます。
FMP (First Meaningful Paint) は、意味のあるコンテンツが初めて描画されるときであり、ページ全体のレイアウトとテキスト コンテンツが完全にレンダリングされたとき、意味のあるコンテンツの最初の意味のある描画が完了したと見なされます。そのため、FMPはユーザーがWebページのメインコンテンツを閲覧するまでの時間を計測するものであり、ユーザーエクスペリエンスの観点から重要な計測指標となります。
現在、フロントエンド業界で認知されている FMP の計算方法は、「読み込みおよびレンダリング中にページのレイアウトが最大変更された後の描画時間」です。 MutationObserver を使用すると、ページ全体の DOM 変更を監視し、MutationObserver のコールバックをトリガーし、コールバック中に現在の DOM ツリーの変更スコアを計算できます。その瞬間が FMP 時点です。
TTI (Time To Interactive)。ページの読み込みが開始されてからページが完全にインタラクティブな状態になるまでにかかる時間です。ページが完全にインタラクティブな状態にある場合、次の 3 つの条件が満たされます。
このページにはすでに役立つコンテンツが表示されています。
ページ上の表示要素に関連付けられたイベント応答関数が登録されました。
イベント応答機能は、イベント発生後 50ms 以内に実行を開始できます。
window.performance.getEntriesByType('resource') は、現在のページにロードされているすべてのリソース (js、css、img...) のさまざまなパフォーマンス インジケーターを返します。これは、静的なリソース パフォーマンス データの収集に使用できます。
主なタイプは、script、link、img、css、xmlhttprequest、beacon、fetch、その他です。
パフォーマンスリソースタイミング - Web API | MDN
インジケーター名 | 説明する | 計算 |
---|---|---|
DNSクエリ | DNSフェーズには時間がかかります | ドメインルックアップ終了 - ドメインルックアップ開始 |
TCP接続 | TCPフェーズ時間 | 接続終了 - 接続開始 |
SSL接続の確立 | SSL接続時間 | 接続終了 - セキュア接続開始 |
最初のバイトのネットワークリクエスト | 最初のバイトの応答時間 (ttfb) | レスポンス開始 - リクエスト開始 |
3種類あります
// 在捕获阶段,捕获资源加载失败错误
Element.addEventListener('error', e => {
const target = e.target
if (target != window) {
monitor.errors.push({
type: target.localName,
url: target.src || target.href,
msg: (target.src || target.href) + ' is load error',
time: Date.now()
})
}
})
// 监听 js 错误
window.onerror = function(msg, url, row, col, error) {
monitor.errors.push({
type: 'javascript',
row: row,
col: col,
msg: error && error.stack? error.stack : msg,
url: url,
time: Date.now()
})
}
// 监听 promise 错误 缺点是获取不到行数数据
addEventListener('unhandledrejection', e => {
monitor.errors.push({
type: 'promise',
msg: (e.reason && e.reason.msg) || e.reason || '',
time: Date.now()
})
})
このシナリオでは、考慮すべき問題が 2 つあります。
データレポートインターフェイスとビジネスシステムが同じドメイン名を使用している場合、ブラウザには同時リクエスト数に制限があるため、ネットワークリソースの競合が発生する可能性があります。
通常、ブラウザはページのアンロード時に非同期 Ajax リクエストを無視します。データ リクエストが必要な場合は、ページのアンロードを遅らせるために、アンロード イベントまたはアンロード前に同期 Ajax リクエストが作成されます。ユーザーの観点から見ると、ページジャンプが遅くなります。
アドバンテージ:
ページのアンロード時に、ページの終了を妨げることなく、確実にデータを送信します。
バックグラウンドでのデータ送信をサポートします。
欠点:
送信できるのはPOSTリクエストのみであり、レスポンス結果は取得できません。
Internet Explorer に加えて、現在主流の最新ブラウザーはビーコンのサポート率が非常に高いです。 ビーコン - MDN ドキュメント
Beacon インターフェイスは、Web サーバーへの非同期のノンブロッキング要求をスケジュールするために使用されます。
平たく言えば、Beacon はデータをサーバーに非同期に送信でき、ページのアンロードが完了する前にリクエストを確実に送信できます (ajax ページのアンロードによってリクエストが終了するという問題を解決します)。それの使い方:
navigator.sendBeacon(url, data);
data パラメーターはオプションであり、その型は ArrayBufferView、Blob、DOMString、または FormData です。ブラウザがビーコン要求を送信キューに正常に追加した場合、このメソッドは true を返し、それ以外の場合は false を返します。
ビーコンを使用する場合、バックエンドはポスト メソッドを使用してパラメーターを受信する必要があり、クロスドメインの問題を考慮して、インターフェイスを変更し、CORS を構成する必要もあります。同時に、リクエスト ヘッダーは CORS セーフリストのリクエスト ヘッダーを満たす必要があり、コンテンツ タイプは application/x-www-form-urlencoded、multipart/form-data、または text/plain である必要があります。
type ContentType = 'application/x-www-form-urlencoded' | 'multipart/form-data' | 'text/plain';
const serilizeParams = (params: object) => {
return window.btoa(JSON.stringify(params))
}
function sendBeacon(url: string, params: object) {
const formData = new FormData()
formData.append('params', serilizeParams(params))
navigator.sendBeacon(url, formData)
}
アドバンテージ:
使いやすく、互換性が高く、ドメイン間でレポートできます。
ページの読み込みと終了をブロックしません。
欠点:
送信できるリクエストはGETリクエストのみであり、レスポンス結果は取得できません。
非同期操作はサポートされていません。
sendBeacon の互換性の問題は避けられませんが、ほとんどのブラウザはページがアンロードされる前に画像の読み込みが完了し、ページに img を追加することでデータをレポートするという機能を最大限に活用できます。
function sendImage(url: string, params: object) {
const img = new Image()
img.style.display = 'none'
const removeImage = function() {
img.parentNode.removeChild(img)
}
img.onload = removeImage
img.onerror = removeImage
img.src = `${url}?params=${serilizeParams(params)}`
document.body.appendChild(img)
}
img イメージは取得リクエストであるため、サーバーごとに URI の長さに制限があるため、長さが制限を超えると HTTP 414 エラーが発生するため、属性を減らしすぎるとレポートの頻度にも注意する必要があります。一気にアップロードされました。
sendBeacon メソッドが優先され、Image メソッドがフォールバックとして使用されます。
function sendLog(url: string, params: object) {
if(navigator.sendBeacon) {
sendBeacon(url, params)
} else {
sendImage(url, params)
}
}
実際、ポイントを埋めるためにGIFを使用している人も多いのではないでしょうか?
サーバーへのデータのレポートは、インターフェイスのリクエスト、通常のファイルのリクエスト、または画像リソースのリクエストを通じて行うことができます。データがレポートできる限り、GIF ファイルのリクエスト、js ファイルのリクエスト、ページ インターフェイスの呼び出しのいずれであっても、サーバーは実際には特定のレポート方法を気にしません。では、なぜすべてのシステムがデータをレポートするために GIF 画像をリクエストする方法を一律に使用するのでしょうか?
●クロスドメインの防止
一般に、ドット付きのドメイン名は現在のドメイン名ではないため、すべてのインターフェイス要求はクロスドメイン要求になります。クロスドメインリクエストは、不適切な設定やレポートエラーによりブラウザによって簡単に傍受される可能性があり、これは容認できません。ただし、イメージの src 属性はドメインを越えず、リクエストを開始することもできます。 (インターフェースレポートを除く)
●ページの読み込みをブロックしてユーザーエクスペリエンスに影響を与えるのを防ぎます
通常、リソース ノードを作成した後、オブジェクトがブラウザ DOM ツリーに挿入されるまで、ブラウザは実際にリソース リクエストを送信しません。 DOM を繰り返し操作すると、パフォーマンスの問題が発生するだけでなく、js/css リソースを読み込むとページのレンダリングがブロックされ、ユーザー エクスペリエンスに影響します。
例外は画像リクエストです。イメージの構築時に DOM に挿入する必要がないだけでなく、新しい Image オブジェクトが js で作成されていればリクエストを開始でき、js のないブラウザ環境ではブロックの問題が発生しません。また、別のタイプのリソース要求である img タグを介して通常に管理することもできません。 (除外ファイル方式)
●GIFはPNG/JPGに比べてサイズが最小です。
最小の BMP ファイルには 74 バイトが必要で、PNG には 67 バイトが必要ですが、正規の GIF には 43 バイトしか必要ありません。
同じ応答の場合、GIF は BMP よりも 41%、PNG よりも 35% のトラフィックを節約できます。
そして、そのほとんどは 1*1 ピクセルの透明 GIF を使用してレポートします。
1x1 ピクセルが法定の最小画像です。さらに、これは画像を通じて行われるため、ページ自体の表示効果に影響を与えないように、画像を透明にすることが最善です。画像が透明であることを示すには、バイナリ ビットを使用してマークするだけで済みます。画像を透明色として保存するため、色空間データを保存する必要がなく、容量を節約できます。
アドバンテージ:
非同期リクエストを送信でき、GET や POST などの複数の HTTP メソッドがサポートされます。
応答結果を取得して、さらに処理することができます。
欠点:
リクエストとレスポンスのロジックは手動で処理する必要があります。
クロスドメイン要求の問題 (CORS の設定など) を処理する必要があります。
XMLHttpRequest または Fetch API を使用して、レポート データへの非同期リクエストを送信します。 GET メソッドまたは POST メソッドの使用を選択し、リクエスト本文または URL パラメータとしてデータを送信できます。
アドバンテージ:
優れたリアルタイム パフォーマンスと双方向通信をサポートします。
リアルタイムの監視や大規模なデータのレポートに適しています。
欠点:
サーバーは WebSocket プロトコルをサポートする必要があります。
より複雑で、単純な埋め込みポイントの要件には適していません。
一般的なフロントエンド データ埋め込みツールには、Google Analytics、Baidu Statistics、Umeng Statistics などが含まれます。もちろん、レポート作成に会社の内部インターフェイスやプラットフォームを使用することもできます。
Google アナリティクスを例に挙げます。
Google Analytics は、Web サイトのトラフィックを追跡およびレポートするために Google によって開発された Web サイト分析ツールです。これは、Web サイトの所有者が、訪問者が誰なのか、どこから来たのか、サイトで何をしているのかなど、訪問者の行動を理解するのに役立ちます。 Google Analytics を通じて、Web サイト所有者は視聴者をより深く理解し、Web サイトのコンテンツとマーケティング戦略を最適化し、Web サイトのパフォーマンスとユーザー エクスペリエンスを向上させることができます。 Google Analyticsは、リアルタイムデータ、ユーザー行動分析、コンバージョントラッキング、トラフィックソース分析など、豊富なデータ分析機能を提供します。これは、さまざまな Web サイトやオンライン マーケティング キャンペーンで広く使用されている強力なツールです。
Google Analytics を使用しているため、まず Google アカウントを取得する必要があります。これは自分で作成する必要があります。 次に、Google Analytics への入り口を知る必要があります。使用される 2 つのアドレスは次のとおりです。
Google タグ マネージャー:tagmanager.google.com/
アナリティクス:analytics.google.com/
Google タグ マネージャー
Google タグマネージャー (GTM) は、Google が開発・提供するタグ管理システムです。これにより、Web サイト管理者は、Web サイトのコードを変更せずに、さまざまなトラッキング コード、分析コード、マーケティング タグを管理および展開できます。 GTM を使用すると、ユーザーは開発者に頼らずにタグを簡単に追加、更新、削除できます。
GTM の主な機能は次のとおりです。
簡単に言うと、このプラットフォームはフロントエンドによってトリガーされた非表示のイベントを収集するために使用され、トリガー条件とトリガー イベント コールバックをカスタマイズすることでデータ レポートを実現できます。ここでは、データを収集して Google Analytics にレポートするために使用されます。
グーグルアナリティクス
名前が示すように、データを収集、表示、表示するために使用される Web サイトです。