ベストプラクティス
起動時に一度だけ初期化するサーバーがリクエストの処理を開始する前に、SDKを初期化してください。これにより、クライアントの準備が整う前に実験の評価が実行される競合状態を回避できます。
- const pageSenseClient = await PageSenseClientBuilder.createNewPageSenseClient(
- accountId, sdkKey, projectName, sdkOptions
- );
リクエストハンドラー内では初期化しないでください。アプリケーションの稼働中は、1つのインスタンスがあれば十分です。
- 複数のSDKインスタンスを作成しないSDKは一度だけ初期化し、共有するように設計されています。複数のインスタンスを作成すると、ポーリングループが重複し、メモリーの使用量が増え、PageSenseへの不要なネットワーク通信が発生します。
- 安定した一貫性のあるユーザー識別子を使用するMurmurHashによる振り分けは決定論的です。特定の実験では、同じユーザーIDは常に同じパターンに割り当てられます。ただし、これはリクエストごとに渡すIDが同じ場合にのみ機能します。
- 適切な例:ユーザーアカウントID、顧客ID、ハッシュ化されたメール、デバイスID。避けるべき例:セッションID、ランダムに生成されたID、リクエストID。
- セッション間の一貫性が必要な場合は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の実験内で目標を設定する必要があります。