Heim  >  Artikel  >  Backend-Entwicklung  >  Optimieren Sie Clientaufrufe an Serverschnittstellen, um die Anforderungsdatenkapazität zu reduzieren

Optimieren Sie Clientaufrufe an Serverschnittstellen, um die Anforderungsdatenkapazität zu reduzieren

jacklove
jackloveOriginal
2018-06-09 09:09:521464Durchsuche

Aufgrund der Projektanforderungen ist es notwendig, die Reservierungszeit des Benutzers in den nächsten 3 Tagen aufzuzeichnen, und jeder Reservierungszeitraum beträgt 1 Stunde.

Zum Beispiel: 00:00:00~00:59:59 oder 01:00:00~01:59:59 usw. gelten als Reservierungszeitraum

Der Front-End-Code lautet wie folgt:

nbsp;HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

 
  <meta>
  <title> 提交预约日期 </title>
  <style>
  .title{color:#FF0000;}
  .topic{font-size:18px; font-weight:bold;}
  </style>
  <script></script>
  <script>    function fsubmit(){
        var timetable = [];
        $("#myform input[type=checkbox]").each(function(){            if(this.checked){
                timetable.push($(this).val());
            }
        });        if(timetable.length==0){
            alert(&#39;请选择预约时间&#39;);
            return false;
        }
        $.post("http://localhost/server.php",{timetable:timetable}).done(function(data){            if(data[&#39;success&#39;]==true){
                alert(&#39;提交成功&#39;);                
            }else{
                alert(&#39;提交失败&#39;);
            }
        });
    }
  </script>
 
 
  <p>请选择预约时间:</p>
  
    

2015-05-28:

    

       00:00        01:00        02:00        03:00        04:00        05:00        06:00        07:00        08:00        09:00        10:00        11:00     

    

       12:00        13:00        14:00        15:00        16:00        17:00        18:00        19:00        20:00        21:00        22:00        23:00     

    

2015-05-29:

    

       00:00        01:00        02:00        03:00        04:00        05:00        06:00        07:00        08:00        09:00        10:00        11:00     

    

       12:00        13:00        14:00        15:00        16:00        17:00        18:00        19:00        20:00        21:00        22:00        23:00     

    

2015-05-30:

    

       00:00        01:00        02:00        03:00        04:00        05:00        06:00        07:00        08:00        09:00        10:00        11:00     

    

       12:00        13:00        14:00        15:00        16:00        17:00        18:00        19:00        20:00        21:00        22:00        23:00     

    

  
 

Der Back-End-Code lautet wie folgt:

<?php $data = $_POST[&#39;timetable&#39;];
file_put_contents(&#39;timetable.log&#39;, json_encode($data));
header(&#39;content-type:applicaiton/json;charset=utf8&#39;);echo json_encode(array(&#39;success&#39;=>true));?>


Um beispielsweise 3 Tage eines bestimmten Benutzers zu übermitteln, Reservierungsdaten, Reservierungen für alle Zeiträume (alle auswählen)
Die vom Backend empfangenen Anforderungsdaten lauten wie folgt:

["2015-05-28 00:00:00","2015-05-28 01:00:00","2015-05-28 02:00:00","2015-05-28 03:00:00","2015-05-28 04:00:00","2015-05-28 05:00:00","2015-05-28 06:00:00","2015-05-28 07:00:00","2015-05-28 08:00:00","2015-05-28 09:00:00","2015-05-28 10:00:00","2015-05-28 11:00:00","2015-05-28 12:00:00","2015-05-28 13:00:00","2015-05-28 14:00:00","2015-05-28 15:00:00","2015-05-28 16:00:00","2015-05-28 17:00:00","2015-05-28 18:00:00","2015-05-28 19:00:00","2015-05-28 20:00:00","2015-05-28 21:00:00","2015-05-28 22:00:00","2015-05-28 23:00:00","2015-05-29 00:00:00","2015-05-29 01:00:00","2015-05-29 02:00:00","2015-05-29 03:00:00","2015-05-29 04:00:00","2015-05-29 05:00:00","2015-05-29 06:00:00","2015-05-29 07:00:00","2015-05-29 08:00:00","2015-05-29 09:00:00","2015-05-29 10:00:00","2015-05-29 11:00:00","2015-05-29 12:00:00","2015-05-29 13:00:00","2015-05-29 14:00:00","2015-05-29 15:00:00","2015-05-29 16:00:00","2015-05-29 17:00:00","2015-05-29 18:00:00","2015-05-29 19:00:00","2015-05-29 20:00:00","2015-05-29 21:00:00","2015-05-29 22:00:00","2015-05-29 23:00:00","2015-05-30 00:00:00","2015-05-30 01:00:00","2015-05-30 02:00:00","2015-05-30 03:00:00","2015-05-30 04:00:00","2015-05-30 05:00:00","2015-05-30 06:00:00","2015-05-30 07:00:00","2015-05-30 08:00:00","2015-05-30 09:00:00","2015-05-30 10:00:00","2015-05-30 11:00:00","2015-05-30 12:00:00","2015-05-30 13:00:00","2015-05-30 14:00:00","2015-05-30 15:00:00","2015-05-30 16:00:00","2015-05-30 17:00:00","2015-05-30 18:00:00","2015-05-30 19:00:00","2015-05-30 20:00:00","2015-05-30 21:00:00","2015-05-30 22:00:00","2015-05-30 23:00:00"]

Optimieren Sie Clientaufrufe an Serverschnittstellen, um die Anforderungsdatenkapazität zu reduzieren

Anforderungsdateninhalt – Länge:2879

Die Verwendung dieser Methode zum Anfordern einer größeren Datenkapazität wirkt sich auf die Antwortzeit aus .

Verbesserungsmethode 1: Konvertieren Sie die Zeit im DateTime-Format vor dem Absenden in einen Zeitstempel

Der Front-End-Code wird wie folgt geändert: Ändern Sie die Javascript fsubmit-Methode

  <script type="text/javascript">
    function fsubmit(){
        var timetable = [];
        $("#myform input[type=checkbox]").each(function(){
            if(this.checked){                // 把时间转为时间戳
                var time = $(this).val();                var timestamp = Date.parse(new Date(time));
                timestamp = timestamp / 1000;

                timetable.push(timestamp);
            }
        });        if(timetable.length==0){
            alert(&#39;请选择预约时间&#39;);            return false;
        }

        $.post("http://localhost/server.php",{timetable:timetable}).done(function(data){
            if(data[&#39;success&#39;]==true){
                alert(&#39;提交成功&#39;);                
            }else{
                alert(&#39;提交失败&#39;);
            }
        });

    }  </script>

Die vom Backend empfangenen Anforderungsdaten lauten wie folgt:

["1432742400","1432746000","1432749600","1432753200","1432756800","1432760400","1432764000","1432767600","1432771200","1432774800","1432778400","1432782000","1432785600","1432789200","1432792800","1432796400","1432800000","1432803600","1432807200","1432810800","1432814400","1432818000","1432821600","1432825200","1432828800","1432832400","1432836000","1432839600","1432843200","1432846800","1432850400","1432854000","1432857600","1432861200","1432864800","1432868400","1432872000","1432879200","1432882800","1432886400","1432890000","1432893600","1432897200","1432900800","1432904400","1432908000","1432911600","1432915200","1432918800","1432922400","1432926000","1432929600","1432933200","1432936800","1432940400","1432944000","1432947600","1432951200","1432954800","1432958400","1432962000","1432965600","1432969200","1432972800","1432976400","1432980000","1432983600","1432987200","1432990800","1432994400","1432998000"]

Optimieren Sie Clientaufrufe an Serverschnittstellen, um die Anforderungsdatenkapazität zu reduzieren

Inhaltslänge der Anforderungsdaten:1916

Nach Erhalt kann das Backend den Zeitstempel in das Datum-Uhrzeit-Format konvertieren und verwenden

Verbesserungsmethode 2: Verwenden Sie eine 32 -Bit-Ganzzahlvariable zum stündlichen Konvertieren. Die entsprechende Beziehung zwischen der Periode

und der 32-Bit-Ganzzahl, die als eine der 32-Bit-Ganzzahlen gespeichert ist, ist
, beginnend von rechts nach links, 00: 00, 01:00, 02:00, 03:00 usw. Wenn es einen ausgewählten Zeitraum gibt, ist er 1, andernfalls ist er 0

Zum Beispiel: Sie müssen eine Reservierung vornehmen für 10:00, 12:00, 14:00 am 28.05.2016, 16:00, 18:00

 0   0    0   0   0   0   0    0   0  0  0  0  0  1  0  1  0  1  0  1  0  1  0  0  0  0  0  0  0  0  0  0
忽略 忽略 忽略 忽略 忽略 忽略 忽略 忽略 23 22 21 20 19 18 17 16 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00

wird in 32-Bit-Binärform als 1010101010000000000 ausgedrückt, das ist, dezimal 349184 = 2 hoch 10 + 2 hoch 12 + 2 hoch 14 + 2 hoch 16 + 2 hoch 18
Das Frontend Der Code wird wie folgt geändert: Ändern Sie die Javascript-fsubmit-Methode

  <script type="text/javascript">
    function fsubmit(){
        var timetable = [];        var tmp = {};
        $("#myform input[type=checkbox]").each(function(){
            if(this.checked){                // 拆分日期与时间
                var datetime = $(this).val();                var datetime = datetime.split(&#39; &#39;);                var day = datetime[0];                var time = parseInt(datetime[1].substring(0,2));                // 创建日期与时间数组
                if(typeof(tmp[day])==&#39;undefined&#39;){
                    tmp[day] = [];
                }
                tmp[day].push(time);
            }
        });        // 合拼数据,转换格式
        for(day in tmp){            // 根据数据集合,合拼,创建10进制数据
            var time = tmp[day];            var timeint = 0;            for(var i=0; i<time.length; i++){
                timeint += Math.pow(2,time[i]);
            }

            timetable.push(day+&#39; &#39;+timeint);
        }        if(timetable.length==0){
            alert(&#39;请选择预约时间&#39;);            return false;
        }

        $.post("http://localhost/server.php",{timetable:timetable}).done(function(data){
            if(data[&#39;success&#39;]==true){
                alert(&#39;提交成功&#39;);
            }else{
                alert(&#39;提交失败&#39;);
            }
        });

    }  </script>

Backend Die empfangenen Anforderungsdaten lauten wie folgt:

["2015-05-28 16777215","2015-05-29 16777215","2015-05-30 16777215"]

Optimieren Sie Clientaufrufe an Serverschnittstellen, um die Anforderungsdatenkapazität zu reduzieren

Inhaltslänge der Anforderungsdaten:107

Bei dieser Methode gibt es nur einen Datensatz, unabhängig davon, wie viele Reservierungszeiträume an einem Tag ausgewählt werden. Dadurch wird die Größe der übermittelten Daten erheblich reduziert.
Die Back-End-Methode zum Konvertieren von Dezimalzahlen in Zeitzahlen:
1. Konvertieren Sie Dezimalzahlen in Binärzahlen und umgekehrt
2. Durchlaufen Sie jedes Bit und zeichnen Sie auf
3 mit einem Wert von 1. Der Code zum Speichern von Datensätzen
lautet wie folgt:

<?php$datetime = &#39;2015-05-28 1398016&#39;;list($day, $time) = explode(&#39; &#39;, $datetime);$bintime = decbin($time);$bintime = strrev($bintime);$result = array();for($i=0,$len=strlen($bintime); $i<$len; $i++){    if(substr($bintime, $i, 1)==1){        $result[] = $day.&#39; &#39;.str_pad($i, 2, &#39;0&#39;, STR_PAD_LEFT).&#39;:00:00&#39;;
    }
}
print_r($result);?>

Ausgabe:

Array(
    [0] => 2015-05-28 08:00:00
    [1] => 2015-05-28 10:00:00
    [2] => 2015-05-28 12:00:00
    [3] => 2015-05-28 14:00:00
    [4] => 2015-05-28 16:00:00
    [5] => 2015-05-28 18:00:00
    [6] => 2015-05-28 20:00:00)

Zusammenfassung : Dieser Artikel stellt eine Methode bereit, mit der große Datenmengen in eine Datenübertragung mit geringer Kapazität umgewandelt werden können, es sind jedoch weitere Vorgänge erforderlich. Daher muss in der tatsächlichen Entwicklung beurteilt werden, ob der Algorithmus zum Austausch von Zeit gegen Raum oder Raum gegen Zeit auf der Grundlage der tatsächlichen Bedürfnisse geeignet ist.

In diesem Artikel wird erläutert, wie der Client so optimiert wird, dass er die Serverschnittstelle aufruft, um die Anforderungsdatenkapazität zu reduzieren. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website.

Verwandte Empfehlungen:

MySQL Order by Rand() Effizienzoptimierungsmethode

php Holen Sie sich das Startdatum und das Enddatum Alle Daten zwischen

php-Methode, um zufällige Kombinationen aus bestimmten Zahlen zu erhalten

Das obige ist der detaillierte Inhalt vonOptimieren Sie Clientaufrufe an Serverschnittstellen, um die Anforderungsdatenkapazität zu reduzieren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn