减少服务器端的初始响应时间

Reduce initial server response time server side

提问人:Johnny Badeleine 提问时间:3/17/2023 更新时间:3/17/2023 访问量:174

问:

GTmetrix 在我的一个网页上找到“减少初始服务器响应时间”“减少 TTFB”,并带有请求 php 页面。请问您有什么需要改进的地方吗? 我从游戏 API 中获取值。

<?php

          $clantag = "#IDCLAN"; // #Clantag (capital letters)
          $clantag2 = "clans";
          $clantag3 = "clanwars";
          $clantag4 = "#IDCLAN2";
          $clantag5 = "#IDCLAN3";

          $token = "Token";
          $url = "https://api.clashroyale.com/v1/clans/" . urlencode($clantag);
          $ch = curl_init($url);

          $headr = array();
          $headr[] = "Accept: application/json";
          $headr[] = "Authorization: Bearer " . $token;

          curl_setopt($ch, CURLOPT_HTTPHEADER, $headr);
          curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
          curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
          curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

          $res = curl_exec($ch);
          $data = json_decode($res, true);
          curl_close($ch);

          $url2 = "https://api.clashroyale.com/v1/locations/57000087/rankings/" . urlencode($clantag2);
          $ch2 = curl_init($url2);

          $headr2 = array();
          $headr2[] = "Accept: application/json";
          $headr2[] = "Authorization: Bearer " . $token;

          curl_setopt($ch2, CURLOPT_HTTPHEADER, $headr2);
          curl_setopt($ch2, CURLOPT_SSL_VERIFYHOST, false);
          curl_setopt($ch2, CURLOPT_SSL_VERIFYPEER, false);
          curl_setopt($ch2, CURLOPT_RETURNTRANSFER, 1);


          $res2 = curl_exec($ch2);
          $data2 = json_decode($res2, true);
          curl_close($ch2);

          $url3 = "https://api.clashroyale.com/v1/locations/57000087/rankings/" . urlencode($clantag3);
          $ch3 = curl_init($url3);

          $headr3 = array();
          $headr3[] = "Accept: application/json";
          $headr3[] = "Authorization: Bearer " . $token;

          curl_setopt($ch3, CURLOPT_HTTPHEADER, $headr3);
          curl_setopt($ch3, CURLOPT_SSL_VERIFYHOST, false);
          curl_setopt($ch3, CURLOPT_SSL_VERIFYPEER, false);
          curl_setopt($ch3, CURLOPT_RETURNTRANSFER, 1);


          $res3 = curl_exec($ch3);
          $data3 = json_decode($res3, true);
          curl_close($ch3);

          $url4 = "https://api.clashroyale.com/v1/clans/" . urlencode($clantag4);
          $ch4 = curl_init($url4);

          $headr4 = array();
          $headr4[] = "Accept: application/json";
          $headr4[] = "Authorization: Bearer " . $token;

          curl_setopt($ch4, CURLOPT_HTTPHEADER, $headr4);
          curl_setopt($ch4, CURLOPT_SSL_VERIFYHOST, false);
          curl_setopt($ch4, CURLOPT_SSL_VERIFYPEER, false);
          curl_setopt($ch4, CURLOPT_RETURNTRANSFER, 1);

          $res4 = curl_exec($ch4);
          $data4 = json_decode($res4, true);
          curl_close($ch4);

          $url5 = "https://api.clashroyale.com/v1/clans/" . urlencode($clantag5);
          $ch5 = curl_init($url5);

          $headr5 = array();
          $headr5[] = "Accept: application/json";
          $headr5[] = "Authorization: Bearer " . $token;

          curl_setopt($ch5, CURLOPT_HTTPHEADER, $headr5);
          curl_setopt($ch5, CURLOPT_SSL_VERIFYHOST, false);
          curl_setopt($ch5, CURLOPT_SSL_VERIFYPEER, false);
          curl_setopt($ch5, CURLOPT_RETURNTRANSFER, 1);

          $res5 = curl_exec($ch5);
          $data5 = json_decode($res5, true);
          curl_close($ch5);

          $clanScore = $data['clanScore'];
          $clanWarTrophies = $data['clanWarTrophies'];
          $requiredTrophies = $data['requiredTrophies'];
          $donationsPerWeek = $data['donationsPerWeek'];
          $members = $data['members'];

          echo "<p>&#9312<br> Score: ", $clanScore, "<br>GDC: ", $clanWarTrophies, "<br>Entrée: ", $requiredTrophies, "<br>Dons: ", $donationsPerWeek, "<br>Membres: ", $members, "</p>";

          $array = $data2['items'];

          foreach ($array as $key => $val) {
            if ($val['tag'] === '#IDCLAN') {
              echo "<p>Top FR Ladder: ", $val['rank'], "</p>";
            }
          }

          $array2 = $data3['items'];

          foreach ($array2 as $key => $val) {
            if ($val['tag'] === '#IDCLAN') {
              echo "<p>Top FR GDC: ", $val['rank'], "</p>";
            }
          }

          $clanScore = $data4['clanScore'];
          $clanWarTrophies = $data4['clanWarTrophies'];
          $requiredTrophies = $data4['requiredTrophies'];
          $donationsPerWeek = $data4['donationsPerWeek'];
          $members = $data4['members'];

          echo "<p>&#9313<br> Score: ", $clanScore, "<br>GDC: ", $clanWarTrophies, "<br>Entrée: ", $requiredTrophies, "<br>Dons: ", $donationsPerWeek, "<br>Membres: ", $members, "</p>";

          $array = $data2['items'];

          foreach ($array as $key => $val) {
            if ($val['tag'] === '#IDCLAN2') {
              echo "<p>Top FR Ladder: ", $val['rank'], "</p>";
            }
          }

          $array2 = $data3['items'];

          foreach ($array2 as $key => $val) {
            if ($val['tag'] === '#IDCLAN2') {
              echo "<p>Top FR GDC: ", $val['rank'], "</p>";
            }
          }

          $clanScore = $data5['clanScore'];
          $clanWarTrophies = $data5['clanWarTrophies'];
          $requiredTrophies = $data5['requiredTrophies'];
          $donationsPerWeek = $data5['donationsPerWeek'];
          $members = $data5['members'];

          echo "<p>&#9314<br> Score: ", $clanScore, "<br>GDC: ", $clanWarTrophies, "<br>Entrée: ", $requiredTrophies, "<br>Dons: ", $donationsPerWeek, "<br>Membres: ", $members, "</p>";

          $array = $data2['items'];

          foreach ($array as $key => $val) {
            if ($val['tag'] === '#IDCLAN3') {
              echo "<p>Top FR Ladder: ", $val['rank'], "</p>";
            }
          }

          $array2 = $data3['items'];

          foreach ($array2 as $key => $val) {
            if ($val['tag'] === '#IDCLAN3') {
              echo "<p>Top FR GDC: ", $val['rank'], "</p>";
            }
          }
          ?>

在我的index.php主页上

 <p><?php include("scriptcrfull.php"); ?></p>

我试图放置一个缓存系统,但我的值不断变化,并且不会直接在我的页面上刷新。

 </head>
    <?php flush(); ?>
    <body>
PHP 服务器端

评论

3赞 KIKO Software 3/17/2023
当您需要呈现网页以响应请求时,不要从外部 API 获取数据。在后台处理 API,将结果存储在数据库中,然后使用数据库中的数据来呈现网页。
2赞 CBroe 3/17/2023
如果您绝对无法缓存数据(“不断更改”并不是您在这里提供给我们的精确信息),那么您仍然可以通过 AJAX 加载它,客户端收到主文档(然后可能会更快地生成,无需 API 调用)之后。
0赞 CBroe 3/17/2023
看起来您请求的数据不是特定于用户的 - 因此,即使仅将其缓存很短的时间也可能会增加好处,而不是让每个页面访问者再次触发此 API 请求,如果他们都会在同一时间获得相同的数据。

答:

1赞 Johnny Badeleine 3/17/2023 #1

通过减少 3 个 url 来解决。这对我来说更简单。