Ich habe eine Webversion der Suchfunktion erstellt.
Die Suche wird von der Rezeption initiiert, die Suche wird im Hintergrund ausgeführt und die Suchergebnisse werden zurückgegeben.
Wenn ich auf eine Ordnersuche stoße und der Ordner viele Dateien enthält (mehr als 20.000), ist die Suchzeit sehr lang (es dauert etwa 2 Minuten, bis ich die Ergebnisse erhalte). Also klicke ich einfach, um die Suche zu beenden.
<code> // 终止搜索 stopSearch: function(){ console.log('xhr请求集合: ' , this.reqList); for (var i = 0; i < this.reqList.length; ++i) { if (this.reqList[i].readyState !== 0 || this.reqList[i].status !== 200) { this.reqList[i].abort(); } } } </code>
Nachdem Sie auf „Stoppen der Suche“ geklickt haben, wird die Rezeption tatsächlich gestoppt:
Aber das PHP-Skript im Hintergrund läuft immer noch (und ich habe die maximale Ausführungszeit des PHP-Skripts auf 3 Minuten festgelegt. Es dauert immer noch relativ lange (mehr als 1 Minute). Ehrliche Situation (nur einer wird initiiert), wenn die Maus während des Vogelfeuers wild klickt, dann muss ich wahrscheinlich den Server neu starten ... Seufz (das Folgende sind die Folgen des verrückten Klickens, nur zwei oder drei Klicks, die längste Anfrage Zeit erreicht 5 Minuten...)!
Gibt es eine Möglichkeit, die Ausführung des Hintergrund-PHP-Skripts zu beenden, wenn die Anfrage gestoppt wird? ?
Ich habe eine Webversion der Suchfunktion erstellt.
Die Suche wird von der Rezeption initiiert, die Suche wird im Hintergrund ausgeführt und die Suchergebnisse werden zurückgegeben.
Wenn ich auf eine Ordnersuche stoße und der Ordner viele Dateien enthält (mehr als 20.000), ist die Suchzeit sehr lang (es dauert etwa 2 Minuten, bis ich die Ergebnisse erhalte). Also klicke ich einfach, um die Suche zu beenden.
<code> // 终止搜索 stopSearch: function(){ console.log('xhr请求集合: ' , this.reqList); for (var i = 0; i < this.reqList.length; ++i) { if (this.reqList[i].readyState !== 0 || this.reqList[i].status !== 200) { this.reqList[i].abort(); } } } </code>
Nachdem die Suche gestoppt wurde, hat die Rezeption tatsächlich aufgehört:
Aber das Hintergrund-PHP-Skript läuft noch (und ich habe die maximale Zeit für die Ausführung des PHP-Skripts auf 3 Minuten festgelegt. Es dauert immer noch relativ lange (mehr als 1 Minute). Ehrliche Situation (nur einer wird initiiert), wenn die Maus während des Vogelfeuers wild klickt, dann muss ich wahrscheinlich den Server neu starten ... Seufz (das Folgende sind die Folgen des verrückten Klickens, nur zwei oder drei Klicks, die längste Anfrage Zeit erreicht 5 Minuten...)!
Gibt es eine Möglichkeit, die Ausführung des Hintergrund-PHP-Skripts zu beenden, wenn die Anfrage gestoppt wird? ?
Nein, Sie können lediglich Ihre Suchleistung optimieren
Der einzige Weg, damit anzufangen, ist die Optimierung der Suchleistung. Das HTTP-Protokoll verfügt nicht über eine „Anfrage“, um eine Anforderungsbeendigung im Hintergrund zu initiieren, und wenn der Front-End-Server Nginx verwendet, weiß der PHP-Anwendungsserver nicht einmal, dass der Client die Verbindung getrennt hat.
In diesem Fall können Sie nur mit dem Optimierungshintergrund beginnen.