最新のWeb開発では、GraphQLは、特にフロントエンドおよびバックエンドアーキテクチャでデータを効率的にクエリして操作するために広く使用されています。GraphQLは、従来のREST APIよりもデータを取得するためのより柔軟な方法を提供します。ただし、GraphQLクエリがより複雑になるにつれて、パフォーマンスの問題が続きます。リクエストの応答速度を上げてサーバーの負荷を減らすためには、いくつかの技術的手段を合理的に使用することが重要です。
PHPでは、 curl_upkeep()は、特に頻繁なリクエストが必要な場合に、開発者がGraphQL要求のパフォーマンスを改善するのに役立つ比較的不人気だが非常に効果的なツールです。この記事では、curl_upkeep()を使用してGraphQLリクエストのパフォーマンスを最適化する方法について説明します。
PHPのカスタム関数として、 curl_upkeep()は接続を効率的に再利用し、重複したDNSクエリとTCP接続確立を減らし、最終的にリクエストの応答速度を改善できます。これは、特にGraphQLサーバーとの頻繁な相互作用が必要な場合、リクエストの遅延を大幅に削減するため、GraphQL要求に特に役立ちます。
curl_upkeep()の使用方法を理解するには、まずPHPでCurlの仕組みを理解する必要があります。 Curlは、PHPの強力なライブラリであり、複数のプロトコル(HTTPやHTTPなど)を介してリクエストを送信できます。 curl_upkeep()は、主に接続プールを多重化することでパフォーマンスを向上させます。
<?php
// 初期化 cURL セッション
function curl_upkeep($url, $queryData = null) {
static $ch = null;
if ($ch === null) {
// 接続プールが空の場合,初期化一个新的 cURL リソース
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
'Authorization: Bearer your_access_token' // 要件に応じて変更します
]);
}
// 設定 GraphQL 要求されたパラメーター
$graphqlPayload = [
'query' => $queryData
];
curl_setopt($ch, CURLOPT_URL, 'https://m66.net/graphql'); // ターゲットに置き換えます GraphQL サーバーの URL
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($graphqlPayload));
// リクエストを実行して、応答を取得します
$response = curl_exec($ch);
if (curl_errno($ch)) {
echo 'Curl error: ' . curl_error($ch);
}
return json_decode($response, true);
}
// 例 GraphQL クエリ
$queryData = '
{
users {
id
name
}
}
';
// 使用 curl_upkeep() リクエストを送信します
$response = curl_upkeep('https://m66.net/graphql', $queryData);
echo '<pre>';
print_r($response);
echo '</pre>';
?>
静的変数$ ch : staticを介して変数$ chを宣言すると、Curl接続が1回のみ初期化されていることを確認します。 curl_upkeep()が2回目と呼ばれる場合、 $ chは既にオープンCurl接続リソースであり、繰り返される接続確立のオーバーヘッドを回避します。
curl_setopt()構成: curlopt_returntransferなどの一般的なcurl構成を設定して、直接出力の代わりに応答を返すために使用され、 curlopt_followlocationはリダイレクトに従うために使用され、 curlopt_httpheaderはリクエストヘッダーを設定するために使用されます。
GraphQLリクエスト:リクエスト本体はJSON形式で、GraphQLクエリ文字列が含まれています。ここでは、クエリデータをJSON形式の配列に配置し、 curlopt_postfieldsを介してPOSTリクエストを送信します。
マルチプレックス接続: curl_upkeep()は、同じCurl接続リソースをマルチプレックスすることにより、毎回接続の再開のパフォーマンスを回避します。このようにして、複数の要求が送信されたとしても、接続の確立と解体のオーバーヘッドを最小限に抑えることができます。
接続確立のオーバーヘッドを削減します。新しいHTTP接続が確立されるたびに、DNS解像度、3つのハンドシェイク、その他の操作が必要であり、 Curl_upkeep()は、接続プールをマルチプレックスすることによりこの繰り返し操作を削減します。
TCPの握手を減らして切断します。マルチプレックス接続では、複数のリクエストの場合、1つのTCPハンドシェイクのみが必要です。これにより、各リクエストの新しい接続を確立するのと比較して、応答時間が大幅に短縮されます。
ネットワークの遅延を削減: GraphQLクエリでは、特にAPIが複数回呼び出された場合、接続を確立する時間を短縮すると、要求の遅延が減少し、全体的な応答速度が向上します。
エラー処理:接続の多重化の性質により、リクエストでエラーが発生した場合は、適切な再試行または切断および再編成操作を実行することをお勧めします。
接続プールのサイズを合理的に保つ:多数の同時リクエストに対処する必要がある場合は、システムリソースの過度の消費を防ぐために、接続接続の最大数を制限するために接続プール管理メカニズムを実装することをお勧めします。
接続を時間内に閉じます: curl_upkeep()は接続を再利用できますが、場合によっては、接続が長期間必要とされなくなった場合、Curlリソースを手動で閉じてシステムリソースを解放する必要があります。
curl_upkeep()は、PHPでのGraphQL要求のパフォーマンスを改善するための効果的な手段です。 HTTP接続を多重化することにより、ネットワークの遅延とリソースの消費を大幅に削減し、高周波GraphQL要求をより効率的にします。データの圧縮やクエリ構造の最適化など、他のパフォーマンス最適化方法を組み合わせることで、Webアプリケーションの全体的なパフォーマンスをさらに改善できます。