私は ajax 呼び出しに大きく依存する動的な Web サイトに取り組んでいます。フロント ページを読み込んで、このページのメインの検索ボックスにアクセスしようとすると、メインの検索ボックスに入力される ajax リクエストが完了するまでに 5 ~ 7 秒かかることに気付きました。ページの HTML が読み込まれるとすぐに開始され、訪問ユーザーを認証しようとする Google API PHP ライブラリによって遅延が発生していることがわかりました。スクリプトを部分的にベンチマークしたところ、問題はライブラリの「verifyIdToken」メソッドにあり、完了するまでに約 5 秒かかることがわかりました。
ドキュメントとチュートリアルで、Google は次のように述べていることに気付きました。「ライブラリは、検証に必要な証明書を自動的にダウンロードしてキャッシュし、有効期限が切れている場合は更新します。」
誰でも知っていますか:
- これはこのメソッドの通常の動作であり、実行にこれほど時間がかかるべきですか?
- キャッシングは標準的な動作ですか、実際に必要なデータをキャッシュするためにどこかに設定する必要がありますか?
- それが標準的な動作である場合、キャッシングが実際に行われるかどうかを確認するにはどうすればよいですか?
これが私が取り組んでいる完全なコードです。おそらく誰かがエラーを見つけます:
$client_id='xxxxxx';
$client_secret='xxxxxxxx';
$client = new Google_Client();
$client->setClientId($client_id);
$client->setClientSecret($client_secret);
$client->setApplicationName("Converser Google API");
$client->addScope('https://www.googleapis.com/auth/plus.me');
$client->addScope('https://www.google.com/m8/feeds');
$client->addScope('https://mail.google.com/');
$client->addScope('email');
$client->setRedirectUri('postmessage');
$client->setAccessType("offline");
$client->setApprovalPrompt("force");
if (!isset($_SESSION['google-api']['access_token'])) {
if (isset($_REQUEST['code'])) g_exchangeCode($_REQUEST['code']);
else g_kill(0);
} else {
$accessToken=$_SESSION['google-api']['access_token'];
$client->setAccessToken($accessToken);
$returnData['auth_by']='token';
}
if($client->isAccessTokenExpired()) {
if (isset($_REQUEST['gid']) && !empty($_REQUEST['gid'])) g_refreshToken($_REQUEST['gid']);
else if (isset($_REQUEST['code']) && !empty($_REQUEST['code'])) g_exchangeCode($_REQUEST['code']);
else g_kill(1);
}
$token_data = $client->verifyIdToken()->getAttributes();