it-swarm.com.de

Verwendung von get_posts vs. WP_Query

Ich führe den folgenden PHP Code Sniffs in WordPress-Code aus, und die folgende Warnung wird angezeigt

 352 | WARNING | get_posts is discouraged in favor of creating a new
     |         | WP_Query() so that Advanced Post Cache will cache
     |         | the query, unless you explicitly supply
     |         | suppress_filters => false.

Obwohl ich ein erfahrener Programmierer bin, bin ich mit der Geschichte von WordPress nicht besonders vertraut. Diese Warnung scheint wichtig, ist aber unangenehm formuliert. Ich bin in einigen Punkten verwirrt, und andere Antworten ich habe zum Thema gefunden scheint meine Punkte nicht anzusprechen.

  1. Was ist der "Advanced Post Cache"? Ich weiß, dass in WordPress (wie in vielen PHP Anwendungen) Caching auf verschiedenen Ebenen stattfindet.

  2. Sagt mir diese Warnung, dass get_posts niemals den Cache benutzen wird, aber WP_Query?

  3. Bedeutet diese Warnung, dass die Verwendung von suppress_filters mit WP_Query den erweiterten Post-Cache umgeht? Oder ruft die Verwendung von suppress_filters mit get_posts den Cache auf? Oder etwas anderes?

  4. Was macht suppress_filters noch?

Wenn jemand, der mit der Angelegenheit vertrauter ist, in einem WordPress-Newb davon wissen könnte, würde ich es begrüßen. Ich bin nicht auf der Suche nach einer Antwort "Immer X verwenden oder nie Y verwenden" - ich versuche, die Kompromisse der einzelnen Ansätze zu verstehen.

5
Alan Storm

Dies hängt direkt mit WordPress.com VIP zusammen und ist eine Folge davon

Bei VIP beschäftigen wir uns mit Websites, die Hunderte von Millionen Seitenaufrufen pro Woche aufweisen. Infolgedessen sind Situationen, die Ihre Website verlangsamen können, in dieser Größenordnung viel auffälliger als auf einem kleinen gemeinsam genutzten Host. Dies wirkt sich jedoch nach wie vor auf eine Website mit mäßigem Datenverkehr im Bereich von etwa 100 Benutzern mit einem anständigen VPS aus. Wir überprüfen auch alles, bevor der Code einer Agentur die Produktion erreicht

Insbesondere get_posts speichert die Ergebnisse nicht im Cache. Wenn Sie denselben get_posts fünfmal aufrufen, wird er fünfmal in die Datenbank übertragen, anstatt das Ergebnis für einen späteren Zeitpunkt zu speichern. WP_Query macht das nicht und kann viel besser zwischengespeichert werden, ebenso wie andere Optimierungen, die in get_posts nicht möglich sind, da der gesamte Beitrag vollständig erstellt wird.

Es gibt eine Möglichkeit, get_posts die Ergebnisse zwischenspeichern zu lassen. Die Option suppress_filters ist jedoch standardmäßig auf true gesetzt. Wenn Sie sie jedoch auf false setzen, werden die Caching-Mechanismen in WordPress ihre Arbeit erledigen und die Ergebnisse für später gespeichert.

Wo diese gespeichert sind, gibt es ein Objekt-Caching-System namens WP_Cache. Standardmäßig speichert dies alles, was Sie darin ablegen, und behält es im Griff (implementieren Sie nicht Ihren eigenen Cache, um zu verhindern, dass die Arbeit beim Laden einer Seite mehrmals ausgeführt wird. WP hat Sie abgedeckt!) .

Es gibt jedoch Plugins, die advanced-cache.php oder object-cache.php bereitstellen. WP_Cache kann persistent gemacht werden. batcache veranlasst beispielsweise WP_Cache, memcached zum Speichern von Dingen zu verwenden, sodass die Daten zwischen den Seitenladevorgängen bestehen bleiben und die Leistung erheblich verbessert wird. Es gibt ähnliche Plugins für Redis/memcache/etc

Ich empfehle, dass Sie sich https://vip.wordpress.com/documentation/ ansehen. Einige davon sind spezifisch für die WordPress.com VIP -Plattform, andere sind jedoch wichtig für Leistung und Sicherheit . Es gibt auch ein VIP Scanner-Tool, das andere Dinge erkennt, z. B. die Verwendung nicht zwischengespeicherter Funktionen.

9
Tom J Nowell