Ich habe diesen Code auf meiner Website, diese Funktion wird auf jeder Webseite aufgerufen, aber es ist langsam (ich habe eine Menge Forschung und ohne diese Funktion der TTFB ist etwa 100ms, aber damit kann es sein sogar 2 Sekunden).Beschleunigen Sie meine PHP-Funktion
Die Funktion ersetzt jeden Text in [] zu einem Link, wenn eine Übereinstimmung in der Kartendatenbank gefunden wird. Z.B .: [Inneres Feuer] >> und die Ausgabe auf der Website wird:
<a href/card/id/name" class="quality1">Inner Fire</a>
Es ist wirklich toll funktioniert, aber es gibt 3000 Karten in der Datenbank und das ist langsam. Jeder kann eine bessere Lösung finden, um den Prozess zu beschleunigen?
Vielen Dank im Voraus.
Einige Erklärungen vor dem Code: sql_query:
function sql_query($conn, $query)
{
return mysqli_query($conn, $query);
}
ähnliche Funktion mit sql_fetch.
char_convert: wandelt utf-8-Zeichen in HTML-Entität (dezimal)
function coloredcard($text)
{
global $conn;
$query = "SELECT id, quality, name, collectible FROM cards";
$result = sql_query($conn, $query);
while ($card = sql_fetch($result))
{
$name_replace = strtolower(str_replace(str_split("\' "), "-", $card['name']));
if ($card['collectible']!=0) //if collectible, replace [card_names]
{
$from = '['.char_convert($card['name']).']';
$to = '<a href="/card/'.$card['id'].'/'.$name_replace.'" class="quality'.$card['quality'].'">'.$card['name'].'</a>';
$text = str_ireplace($from, $to, $text);
}
elseif ($card['collectible']==0) //if not collectible replace (noncollectible card names)
{
$from = '('.char_convert($card['name']).')';
$to = '<a href="/card/'.$card['id'].'/'.$name_replace.'" class="quality'.$card['quality'].'">'.$card['name'].'</a>';
$text = str_ireplace($from, $to, $text);
}
}
return $text;
}
Bitte lassen Sie mich wissen, wenn Sie weitere Informationen benötigen.
Dies ist wahrscheinlich die beste Antwort. Sieht wirklich toll aus. – Joey
Können Sie mir ein bisschen mehr helfen? Es funktioniert großartig, aber ich habe ein kleines Problem. Mein preg_match_all sieht folgendermaßen aus:/\ [([^ \]] *) \] /, aber wenn jemand [[inneres Feuer] eintippt) macht es [inneres Feuer], anstatt es [inneres Feuer] zu machen. Warum entfernt es die beiden vom Ende, aber entfernt eines von Anfang an? Ich möchte es unter allen Umständen entfernen. – Joey