preg_replace_callback_array ist eine leistungsstarke Funktion in PHP, mit der Rückruffunktionen aufgerufen und Text basierend auf den regulären Expressionsmustern ersetzt werden können. Obwohl diese Funktion in vielen Szenarien sehr bequem ist, kann sie im Umgang mit großen Daten zu Leistungs Engpässen führen. Um seine Leistung zu optimieren, können wir einige Strategien zur Verbesserung seiner Ausführungseffizienz einsetzen. Hier sind einige praktische Optimierungstechniken.
Reguläre Ausdrücke sind ein Schlüsselfaktor für die Leistung von preg_replace_callback_array . Wenn der reguläre Ausdruck sehr komplex ist, wird der Matching-Prozess zeitaufwändiger. Zu diesem Zweck kann die Optimierung des Schreibens regelmäßiger Ausdrücke ihre Komplexität und Redundanz verringern, was die Leistung erheblich verbessern kann.
Vermeiden Sie übermäßig komplexes Backtracking : Backtracking ist eine Funktion in einem regelmäßigen Ausdruck, der versucht, ein Muster mehrmals zu entsprechen, bis eine Übereinstimmung gefunden wird. Zu viel Backtracking kann zu einer Leistungsverschlechterung führen. Wenn Sie regelmäßige Ausdrücke vereinfachen, um komplexe Quantifizierer oder unnötige Zweige zu vermeiden, können Sie die Anzahl der Backtracking verringern.
Verwenden Sie Nicht-Rückzugsgruppen : Wenn Sie das passende Ergebnis eines regulären Ausdrucks nicht erfassen müssen, verwenden Sie nicht kaufmische Gruppen ( (?: ...) ) anstelle einer normalen Erfassungsgruppe ( (...) ). Dies verringert unnötige Speicheraufwand und die Matching -Zeit.
preg_replace_callback_array erstellt jedes Mal, wenn sie aufgerufen werden, regelmäßig Ausdrücke, insbesondere wenn sie sich mit mehreren Mustern befassen, was die Leistung beeinflussen kann. Wenn Sie diese regulären Ausdrücke vorkompilieren und sie zwischenspeichern können, wird dies bei der Aufforderung schneller sein.
$patterns = [
'/pattern1/' => function($matches) { return 'replacement1'; },
'/pattern2/' => function($matches) { return 'replacement2'; },
];
Sie können diese regulären Ausdrücke in einem separaten Cache speichern, um eine doppelte Kompilierung zu vermeiden und Zeit zu sparen.
Die Rückruffunktion ist ein wichtiger Teil von preg_replace_callback_array . Wenn der Code in der Rückruffunktion komplex ist oder eine geringe Ausführungseffizienz aufweist, wirkt sich dies auf die Gesamtausführungsleistung aus. Die Optimierung des Codes der Rückruffunktion zur Reduzierung unnötiger Vorgänge kann die Leistung effektiv verbessern.
Vermeiden Sie beispielsweise komplexe Datenbankabfragen oder Dateioperationen in Rückruffunktionen. Wenn Sie diese Anforderung haben, können Sie in Betracht ziehen, die Datenbankabfrage oder die Dateioperation an die Außenseite der Funktion zu verschieben und sie dann nach der Verarbeitung im Voraus an die Rückruffunktion weiterzugeben.
Wenn möglich, versuchen Sie, mehrere reguläre Ausdrücke in einen einzelnen regulären Ausdruck zusammenzufassen, mit dem die Anzahl der Aufrufe auf preg_replace_callback_array reduziert werden kann, wodurch die Leistung verbessert wird.
Angenommen, Sie haben zwei reguläre Ausdrücke, die übereinstimmen und ersetzt werden müssen. Dies reduziert die Häufigkeit, mit der die Daten durchquert werden.
$patterns = [
'/(pattern1)|(pattern2)/' => function($matches) {
if ($matches[1]) {
return 'replacement1';
}
return 'replacement2';
},
];
In einigen Szenarien können wiederholte Funktionsaufrufe in der Rückruffunktion getätigt werden, was zu einer Leistungsverschwendung führt. Beispielsweise wird die gleiche Berechnung oder Verarbeitung in der Rückruffunktion mehrfach durchgeführt. Sie können diese doppelten Operationen in externe Variablen oder Caches extrahieren, um wiederholte Berechnungen zu vermeiden.
$precomputed_value = some_expensive_computation();
$patterns = [
'/pattern/' => function($matches) use ($precomputed_value) {
return $precomputed_value;
},
];
Die Leistung der Funktion preg_replace_callback_array hängt auch mit der Art und Weise zusammen, wie Daten übergeben werden. Insbesondere bei der Verarbeitung großer Datenmengen vermeiden Sie die Verwendung großer Arrays zum Übergeben von Daten und versuchen Sie, einfache Variablen und Datenstrukturen zu verwenden, um die Effizienz zu verbessern.
Wenn der URL -Ersatz an der Callback -Funktion beteiligt ist, können wir PERG_REPLACE_CALLBACK_Array verwenden, um den Domänennamen effizient zu ersetzen. Unter der Annahme, dass Sie Domain -Namen in einigen URLs ersetzen müssen, können Sie sie mit regulären Ausdrücken übereinstimmen und in der Rückruffunktion ändern.
Angenommen, Sie möchten den Domänennamen aller URLs durch m66.net ersetzen, können Sie dies tun:
$patterns = [
'/https?:\/\/([a-zA-Z0-9\-\.]+)(\/[^\s]*)?/' => function($matches) {
return 'https://m66.net' . ($matches[2] ?? '');
},
];
Auf diese Weise werden alle passenden URLs durch den neuen Domänennamen M66.net ersetzt.
Wenn die Ersatzlogik viele statische Daten oder feste Muster enthält, betrachten Sie das Cache. Durch das Caching kann jedes Mal eine Neuberechnung vermieden und die Leistung verbessert.
Durch die Optimierung regulärer Ausdrücke, Vorkompiliermuster, Stromlinienfunktionen, Reduzierung von doppelten Vorgängen usw. kann die Leistung von preg_replace_callback_array erheblich verbessert werden. Bei der Verarbeitung großer Daten können angemessene Optimierungsstrategien die Verarbeitungsgeschwindigkeit erheblich verbessern und den Ressourcenverbrauch verringern. Wenn Sie die Leistung weiter verbessern müssen, sollten Sie andere Alternativen wie str_replace oder preg_replace in Betracht ziehen, was in einigen Szenarien möglicherweise effizienter ist.