ベストプラクティス
起動時に一度だけ初期化するサーバーがリクエストの処理を開始する前に、SDKを初期化してください。これにより、クライアントの準備が整う前にテストの評価が実行される競合状態を回避できます。
- const pageSenseClient = await PageSenseClientBuilder.createNewPageSenseClient(
- accountId, sdkKey, projectName, sdkOptions
- );
リクエストハンドラー内では初期化しないでください。アプリケーションの稼働中は、1つのインスタンスだけで十分です。
- 複数のSDKインスタンスを作成しないSDKは、一度だけ初期化して共有するように設計されています。複数のインスタンスを作成すると、ポーリングループが重複し、メモリー使用量が増加するほか、PageSenseへの不要なネットワーク通信が発生します。
- 安定した一貫性のあるユーザー識別子を使用するMurmurHashによる振り分けは一意に決まります。同じテストでは、同じユーザーIDが常に同じバリエーションに割り当てられます。ただし、これはリクエストごとに同じIDを渡した場合に限ります。
- 推奨:ユーザーアカウントID、顧客ID、ハッシュ化したメールアドレス、デバイスID。非推奨:セッションID、ランダムに生成されたID、リクエストID。
- セッション間の一貫性が重要な場合はUSSを有効にするサーバーの再起動、設定の変更、新しいバリエーションのリリース後もユーザーのバリエーション割り当てを維持する必要がある場合は、USSを使用してください。本番環境ではRedisやデータベースが適しており、小規模な環境ではファイルストレージを使用できます。
- 適切なポーリング間隔を設定する本番環境のほとんどのユースケースでは、30~120秒の範囲が適しています。間隔が短すぎるとインフラに負荷がかかり、長すぎるとSDKがテストの変更を検出するまでに時間がかかります。
- 可能な場合はポーリングよりWebhookを使用するポーリングも使用できますが、Webhookの方が高速でコストを抑えられます。PageSenseでテストを再開すると即座にWebhookが実行され、待ち時間なしでSDKがリアルタイムに更新されます。
デバッグとトラブルシューティング
問題が発生した場合は、まずログレベルをDEBUGに変更します。
- const sdkOptions = new PageSenseSDKOptions()
- .addLogLevel('DEBUG');
これにより、テストの評価、バリエーションの振り分け、API呼び出し、ポーリングサイクルの詳細なログが表示され、ほとんどの問題を追跡できます。
チェックリスト。
-
初期化後にクライアントがnullになる—accountId、sdkKey、projectNameを確認してください。いずれか1つでも値が間違っていると、エラーが表示されないまま初期化に失敗します。
-
テストで常にnullが返される—PageSenseでテストが有効になっていること、およびuserAttributesがターゲット条件と一致していることを検証してください。
-
ユーザーに割り当てられるバリエーションが一貫しない—USSが有効になっているか確認してください。USSが無効な場合、テスト設定でバリエーションを変更すると、ユーザーの割り当てが変わる可能性があります。
-
ポーリングで変更が検出されない—startPolling()が呼び出されていること、およびポーリング間隔が長すぎないことを確認してください。
-
目標が記録されない—trackGoalでデータを記録するには、事前にPageSenseのテスト内で目標を設定する必要があります。