PHP html_entity_decode optimieren



  • Hallo,

    ich habe in PHP ein Array von ca. 500.000 Werten, die alle mit html_entity_decode durchlaufen werden müssen. Leider ist das relative träge und langsam... daher meine Frage ob es hier irgendein Optimierungspotential gibt? (Egal ob hübsch oder nicht...)


  • Mod

    Der Optimierungsansatz ist, kein Array mit 500.000 Werten zu haben über das man etwas drüber laufen lassen muss. Eine halbe Million Elemente in einem Array ist viel. Hier könnte man ansätzen.

    Weiters: html_entity_decode macht viel - ist das alles notwendig? uU reicht ein str_replace für die wichtigsten entities die decoded werden sollen.

    Was genau machst du denn? Denn idR kann man viel besser optimieren indem man weiter oben anfängt. Wenn ich zB meine Lauftechnik optimieren will, kann ich das nur bis zu einem gewissen Grad machen - viel einfacher wäre es, zB ein Fahrrad zu benutzen, denn ein unoptimiertes Fahrrad ist schneller als mein optimiertester Lauf 😉



  • Ich fürchte ich komme leider nicht um die 500.000 Werte herum, das es sich um einen Export handelt, in dem all diese Werte enthalten sein müssen.

    Das Problem an der Sache ist, dass in all diesen Werten beliebige HTML Special Chars vorkommen können, die decoded werden müssen.

    Der Flaschenhals ist in meinem Fall eine verschachtelte foreach-Schleife, die ein zweidimensionales array durchläuft und alles decoded.

    Ich konnte schon viele Funktionsaufrufe einsparen, in dem ich einem str_replace immer die erste Ebene des Arrays übergeben habe und nicht jedes einzelne Unterelement separat. Leider akzeptiert html_entity_decode keine Arrays, sodass ich für jeden Wert in der zweiten Ebene die Funktion aufrufen muss.

    Ich weiss nicht genau ob die Infos weiterhelfen um vielleicht einen anderen Ansatz zu wählen?


  • Mod

    Um was für Daten handelt es sich denn?

    uU reicht ein preg_replace auf die gängigsten entities?

    Oder vielleicht das Array als einen string an die Funktion übergeben und nachher wieder splitten. Je nachdem. Schwer zu sagen.

    Wie sehen denn die Elemente des Arrays aus? Kommen doppelte Einträge vor? Wieviele Zeichen sind es insgesamt?



  • Es handelt sich hauptsächlich um Strings. Leider kann man nicht von gängigen HTML-Entities ausgehen... Es sind wohl insgesamt ca. 25.000.000 Zeichen und Doppelungen sind nicht ausgeschlossen.

    Die Idee mit dem Array zum String war super. Ich hab das Array einfach serialisiert und dann darauf ein html_entity_decode gemacht was wesentlich schneller war. Allerdings hab ich ein Problem wenn in den Werten ein Komma oder Semikolon vorkommen, da PHP die Werte des serialisierten Arrays mit diesen Zeichen abtrennt...



  • parallelisieren 😉



  • wenn du schon so eine funktion verwenden musst dann nimm doch htmlspecialchars() bzw. den decode dazu der ist nen tick schneller und sollte doch ausreichen.

    Vll. ist auch array_map interessant für dich? Musst du mal testen ob das schneller sein kann in deinem Fall.


Log in to reply