エンジンの実行フロー
実験エンジンが実験を読み込み、トラッキングし、実行する方法について学びましょう。実験エンジンの概要
Kameleoon は、ウェブおよびフルスタックアプリの実験に対応する単一プラットフォームの最適化ソリューションを提供します。プラットフォームは2つの主要なソリューションをサポートしています:- Web Experimentation: ウェブサイトやウェブアプリケーション向けに A/B テストやその他の形式の実験を実施します。
- Feature Experimentation: フルスタックのフィーチャーフラグと実験を可能にします。Kameleoon は、A/B 実験でのちらつきを排除し、既存のツールと統合し、タスクを自動化するための追加の API とツールも提供します。
コードフロー: 読み込み
Kameleoon エンジンはengine.js タグ(旧 kameleoon.js)を実行します。ウェブページの HTML ソースコードを通じてこの JavaScript タグを呼び出します。
エントリーポイントでは、エンジンは以下を行います:
-
アクティベーション:
engine.jsタグはKameleoon.Analyst.load()を介して Activation API 呼び出しを呼び出します。 - コマンドキューの実行: 読み込み後、エンジンは kameleoonQueue配列 をチェックし、プッシュした順序でコマンドを実行します。Kameleoon が関数をインスタンス化する前に実行する必要のあるコードにこれを使用してください。
Kameleoon は
IMMEDIATE パラメータでキューに追加された関数のみを実行します。- アンチフリッカーとグローバル変数: ちらつき は、バリエーションが表示される前にオリジナルのページが一時的に表示されたときに発生します。この効果は不正確な結果につながる可能性があります。Kameleoon はちらつきを排除するために高度な技術を使用しています。アンチフリッカーを設定すると、システムは Kameleoon スクリプトを アンチフリッカーコード で非同期に読み込みます。
window.KameleoonEndLoadTime 変数に完了タイムスタンプが保存されます。
インストールスニペットの
kameleoonLoadingTimeout 変数を使用してタイムアウトを調整します。デフォルト値の750ミリ秒を維持することを推奨します。この変数は、アプリケーションファイルを待つ間、インストールタグがページ表示を遅延できる最大時間を決定します。-
ブロッキング理由の確認: 初期化を完了する前に、エンジンは以下のブロッキング理由を確認します:
- ストレージ: ローカルまたはセッションストレージが利用できない場合、エンジンは終了し、
STORAGEコード付きのKameleoon::Abortedイベントを返します。 - タイムアウト:
engine.jsの読み込みに750ミリ秒以上かかり、ページや訪問に対して Kameleoon を無効にするようプロジェクトを設定している場合、エンジンはTIMEOUTを返します。 - プリレンダー: Kameleoon はドキュメントの準備ができていることを要求します(
document.visibilityState == "prerender")。準備ができていない場合、スクリプトは終了しPRERENDERを返します。可視性状態が変化すると再読み込みされます。 - カスタムスクリプト: カスタムスクリプトがセッションを中止すると、エンジンは
SCRIPTを返します。 - パラメータ: URL に
KameleoonDisabled == trueが含まれている場合、エンジンはPARAMETERを返して終了します。 - 無効: ダッシュボードでプロジェクトを無効にすると、エンジンは
DISABLEDを返します。詳細については この記事 を参照してください。
- ストレージ: ローカルまたはセッションストレージが利用できない場合、エンジンは終了し、
カスタム中止スクリプトを設定できるのは Kameleoon の技術アカウントマネージャーのみです。
- 延期: 必要な場合、エンジンはコードとキャンペーンを2回目の呼び出しまで延期します。この場合、エンジンは
https://SITECODE.kameleoon.com/engine-configuration.js(旧名:kameleoon-configuration.js)およびhttps://SITECODE.kameleoon.com/engine-campaigns.js(旧名:kameleoon-actions.js)からそれぞれ SYNC モードで設定とキャンペーンを取得します。
すべてのキャンペーンを延期するオプションを設定できるのは Kameleoon の技術アカウントマネージャーのみです。“DELAYED” タグを使用して特定の実験を延期できます。
コードフロー: トラッキング
初期化後、Kameleoon は訪問者データを取得します:- Kameleoon は訪問者のブラウザやオペレーティングシステムなどの技術データを収集します。
- サブドメイン間でセッションデータを統合 を有効にしている場合、Kameleoon はメインのローカルストレージドメイン上の iFrame を使用して過去のデータを取得します。
real-time sync of visitsまたはcross-deviceオプションを有効にしている場合、エンジンは Kameleoon サーバーから使用履歴を取得します。
リアルタイム同期は、Kameleoon Feature Experimentation または ITP の影響 を管理するための Safari ではデフォルトで有効です。
- エンジンは訪問者を初期化します。
kameleoonVisitorCodeCookie やローカルストレージにコードが存在しない場合、エンジンは新しい訪問者コードを割り当て、すべての訪問を解析します。 - エンジンは、ページ URL、デバイス、オペレーティングシステム、ジオロケーション、ゴールなどのデータを解析および保存します。
商品レコメンデーションアドオンを使用している場合、Kameleoon はここでレコメンデーションエンジンをインスタンス化します。
- グローバルカスタムスクリプトは、実験を初期化する前に挿入された JavaScript を実行します。
- グローバル実験スクリプトは、カスタムグローバルスクリプトの後に実行されます。このスクリプトはターゲティングに関係なく実行され、実験が一時停止すると停止します。詳細については このガイド を参照してください。
- エンジンは、
IMMEDIATEパラメータを使用していないCommandQueueの保留中のコマンドを実行します。 Kameleoon::Startedイベントは、初期化が完了し、エンジンがデータを保存したときにトリガーされます。- SPA管理 を有効にすると、Kameleoon は URL の変更を監視します。URL が変更されると、エンジンが再読み込みされ、キャンペーンが新しいビューで正しく機能するようにします。
- キャンペーンを初期化する前に、Kameleoon は以下を行います:
- 広告ブロッカーを確認します。
querySelector操作を最適化するためにmutationObserverを実行します。- セグメントが必要とする場合は、
https://eu-data.kameleoon.io/ipからジオロケーションデータを取得します。
- キャンペーン設定を読み込むために、Kameleoon は
https://SITECODE.kameleoon.com/live-experiments/config.jsからデータを取得し、2分間キャッシュします。
Live Update Experiments 機能は、
LIVE-UPDATE でタグ付けされた実験をリフレッシュし、ブラウザのキャッシュ遅延なしにリアルタイムで設定変更を可能にします。トラッキングキューとアクティビティイベント
エンジンは、約 500 ms ごとに実行される内部キューを通じて送信リクエストを処理します。キューはイベントをバッチにまとめ、必要に応じて追加のバッチを再帰的に送信します。ページのアンロードまたはクリーンアップ時に、エンジンはキューに残っているすべてのイベントを強制的に即時処理します。Safari では、データ損失を防ぐために未送信のイベントをセッションストレージに保持します。 エンジンは、スクロールまたはクリックが検出されると 60 秒ごとにアクティビティイベントも送信します。アクティビティが検出されない場合、エンジンは追加のトラッキングコールを行いません。コードフロー: 実行
実験ループが実行されると、エンジンは以下を行います:- 訪問者が “holdout” グループの一部である場合、エンジンは holdout 含有イベントを送信します。
- エンジンは
nonce、experimentID、variationIdを含む露出イベントをトリガーします。例:eventType=experiment&nonce=5800F1BDD0667747&id=250830&variationId=978588。 - 訪問者が holdout グループにいない場合、エンジンは “Holdout exclusion event” を送信します。
Holdout 実験により、他の実験を管理およびブロックできます:
- エンジンは最初に holdout 実験をチェックします。
- ユーザーが holdout グループにいる場合、エンジンは彼らをグループに割り当て、レポート用のイベントを送信します。
- ユーザーがリファレンスグループにいる場合、エンジンは他のすべての実験をブロックします。
- ユーザーがバリエーショングループにいる場合、エンジンは他の実験を進めることを許可します。
- PERSONALIZATION_CAPPING: パーソナライゼーションがグローバル訪問者制限に達しました。
- SCHEDULE: パーソナライゼーションがスケジュールに基づいてオフです。
- SCENARIO: 一部のシナリオ条件が満たされていません。
- PRIORITY: より優先順位の高いパーソナライゼーションが存在します。
- VISITOR_CAPPING: 訪問者が表示を妨げる制限に達しました。
DELAYED タグを関連付けた場合、エンジンは最初のページ読み込み後にそれをトリガーします。エンジンは https://SITECODE.kameleoon.com/(personalizations)/$campaign_id/variations/$variation_id.js からバリエーションデータをダウンロードします。
実験を遅延させることは、ちらつきが最小限のポップアップやスクロール下の修正に役立ちます。
https://SITECODE.kameleoon.com/audiences/segments.js からセグメント定義をダウンロードします。
Kameleoon は過去90日以内に作成または変更されたセグメントをチェックし、
[DEV]、[TEST]、または [QA] で始まるものを除外します。FAQ
Kameleoon エンジンはどのようなネットワークリクエストを行いますか?
Kameleoon エンジンはどのようなネットワークリクエストを行いますか?
Kameleoon エンジンは、シームレスな体験を確保するためにいくつかのネットワークリクエストを開始します:
セグメントリクエスト
- 目的: 訪問者がターゲットとされたセグメントのイベントを収集します。
- エンドポイント:
https://${SITECODE}.kameleoon.io/audiences/segments.js - メソッド: GET
- 注: ブラウザはファイルを90分間キャッシュします。
ライブアップデート実験の設定リクエスト
- 目的: LIVE-UPDATE タグ付きの実験の設定を取得します。
- エンドポイント:
https://${SITECODE}.kameleoon.io/live-experiments/config.js - メソッド: GET
- 注: ブラウザはファイルを2分間キャッシュします。
機能フラグルール設定リクエスト
- 目的: メイン設定とは別のファイルから機能フラグのルールとバリエーションを読み込みます。エンジンは、サイトに少なくとも1つの機能フラグルールが存在する場合にのみこのリクエストを送信します。
- エンドポイント:
https://${SITECODE}.kameleoon.io/live-ff/config.js - メソッド: GET
- 注: 独自の場所(プロキシや CDN など)からファイルを配信するには、Kameleoon エンジンが読み込まれる前に
window.kameleoonFeatureFlagRulesFileに完全な URL を設定してください。 - リスナー: このリクエストの完了を待ち、エンジンが機能フラグルールを登録した後にのみコードを実行するには、
Kameleoon::FeatureFlagFileLoadedイベントをリッスンします:
繰り延べされた実験のバリエーションリクエスト
- 目的: DELAYED タグ付きの実験 のバリエーションデータを読み込みます。
- エンドポイント:
https://${SITECODE}.kameleoon.io/experiments/${action.id}/variations/${variationId}.js - メソッド: GET
- 注: ブラウザはファイルを30日間キャッシュします。
繰り延べられたパーソナライゼーションのバリエーションリクエスト
- 目的: DELAYED タグ付きのパーソナライゼーション のバリエーションデータを読み込みます。
- エンドポイント:
https://${SITECODE}.kameleoon.io/personalizations/${action.id}/variations/${variationId}.js - メソッド: GET
- 注: ブラウザはファイルを30日間キャッシュします。
以前の訪問リクエスト
- 目的: クロスデバイス調整 および 訪問のリアルタイム同期 のために以前の訪問を取得します。
- エンドポイント:
https://(eu|na)-data.kameleoon.(eu|io)/visit/visitor - メソッド: GET
トラッキングイベントリクエスト
- 目的: 訪問中の イベント を記録します。
- エンドポイント:
https://(eu|na)-data.kameleoon.(eu|io)/visit/events - メソッド: POST
Kameleoon は、スクロールやクリックが発生したときに60秒ごとにイベントを送信します。これにより、正確なセッション長のトラッキングが保証されます。エンジンがアクティビティを検出しない場合、追加のトラッキング呼び出しは行われません。
IP アドレスリクエスト
- 目的: IP アドレスに基づく訪問者の除外/包含を可能にします。
- エンドポイント:
https://(eu|na)-data.kameleoon.(eu|io)/ip - メソッド: GET
- 注: Kameleoon は IP をデータベースに保存しません。訪問者のブラウザは比較目的でのみ IP を使用します。
ジオロケーションリクエスト
- 目的: ターゲティングと分析のためのジオロケーションデータを取得します。
- エンドポイント:
https://(eu|na)-data.kameleoon.(eu|io)/geolocation - メソッド: GET
現在の天気リクエスト
- 目的: 現在の天気状況を返します。
- エンドポイント:
https://(eu|na)-data.kameleoon.(eu|io)/weather/weather - メソッド: GET
天気予報リクエスト
- 目的: 5日間の天気予報を返します。
- エンドポイント:
https://(eu|na)-data.kameleoon.(eu|io)/weather/forecast - メソッド: GET
Kameleoon スクリプト検出リクエスト
- 目的: Kameleoon スクリプトの実装状態を検出します。
- エンドポイント:
https://(eu|na)-data.kameleoon.(eu|io)/active-script/event - メソッド: POST
商品リクエスト
- 目的: ターゲティングとレコメンデーションのための商品イベントを収集します。
- エンドポイント:
https://(eu|na)-data.kameleoon.(eu|io)/product/events - メソッド: POST
Kameleoon のコンバージョンスコアリクエスト
- 目的: ターゲティング用の予測スコアを取得します。
- エンドポイント:
https://(eu|na)-data.kameleoon.(eu|io)/predict/latestPredictionScoreHistograms - メソッド: GET