it-swarm.com.de

Laden Sie die minimale WordPress-Umgebung

Ich habe meinen eigenen Upload-Service für meine Website erstellt, der von WP getrennt ist, aber WP verwendet, um DB-Funktionen auf niedriger Ebene bereitzustellen und die Benutzer zu verifizieren. Dazu füge ich wp-load.php in mein Hauptskript (Uploadify) ein, aber dies scheint den Arbeitsspeicher des Servers mit unnötigen Komponenten zu füllen. Aus diesem Grund wird in meinem Skript ein Fehler angezeigt, der auf ein installiertes WP Plugin zu verweisen scheint.

Wie kann ich nur die WP Kernkomponenten laden und Plugins ignorieren? Ist das überhaupt möglich?

11
MechEngineer

Verwenden Sie BackPress , aber ich habe kleine Entwicklungen, bei denen ich eine Standardinstallation und eine kleinere Quelle über const verwende.

siehe auf dem wp-settings.php

// Stop most of WordPress from being loaded if we just want the basics.
if ( SHORTINIT )
    return false;

Setzen Sie die const SHORTINIT im wp-config.php auf true und sehen Sie, wie schnell es läuft. define( 'SHORTINIT', TRUE );

Dies sind die Dateien, die Sie erhalten:

// All are located in ABSPATH.WPINC
'/load.php'
'/default-constants.php'
'/version.php'
'/compat.php'
'/functions.php'
'/class-wp.php'
'/class-wp-error.php'
'/plugin.php'
'/default-filters.php'
'/pomo/mo.php'

// Only Multisite
'/ms-blogs.php'
'/ms-settings.php'
6
bueltge

Wenn Sie Plugins vollständig deaktivieren, verlieren Sie viele Vorteile.

Es gibt Distributionen von WordPress, die noch weiter gehen und Posts, Links usw. herausreißen, aber sie bleiben immer hinter dem WordPress-Kern zurück und überleben in der Regel nicht so lange.

Hier sind einige Dinge, die getan werden könnten

Short Init

Fügen Sie dies in Ihre wp-config.php ein:

define( 'SHORTINIT', TRUE );

Oder definieren Sie es irgendwo, bevor Sie es in WordPress laden, um den Ladevorgang zu reduzieren und es auf minimale Kernfunktionen zurück zu ziehen.

Sekundäre Lightweight-Installationen

Richten Sie eine zweite WordPress-Installation mit nur den gewünschten Plugins und Designs ein (falls vorhanden). Konfigurieren Sie dann die Datei wp-config.php so, dass sie dasselbe Verzeichnis und dieselben Datenbankwerte für wp-content verwendet.

Backpress

WordPress, das Original von BBpress und Glotpress, basiert unter anderem auf der BackPress-Bibliothek. Sie können dies anstelle von WordPress verwenden, um Ihre Arbeit zu erledigen, obwohl möglicherweise zahlreiche APIs und Funktionen fehlen oder eine Neuimplementierung/Portierung erforderlich ist

Optionstabellen

Ich würde auch bedenken, dass WordPress die gesamte Optionstabelle in den Speicher lädt, um Abfragen zu reduzieren. Wenn Sie dort große Werte speichern, wirkt sich dies auf die Leistung aus.

Frühes Verlassen

Sie können auch versuchen, in frühere Funktionen des WordPress-Ladeprozesses einzusteigen und den PHP -Prozess zu beenden, bevor WordPress abgeschlossen ist, aber ich kann nicht raten, wie sicher das wäre.

Plugins selektiv laden

Es gibt auch diesen Artikel über das selektive Laden von Plugins , aber es erfordert Hacks für die WordPress-Core-Dateien

6
Tom J Nowell

Um is_user_logged_in() und current_user_can() zum Laufen zu bringen, habe ich eine ähnliche Antwort gefunden hier (Kann nicht kommentieren) Der Vergleich stimmt hier mit den Antworten überein, wie:

Die manuelle Verwendung von define('SHORTINIT', true) + require('wp-load.php') + umfasst Folgendes:

Seitenladevorgang: 1,05 Sek. - enthaltene Dateien: 43 Dateien

Vergleichen: Verwenden vonONLYrequire('wp-load.php'):

Seitenladevorgang: 1,35 Sek. - enthaltene Dateien: 419 Dateien

Der Zeitunterschied (0,3 Sek.) Kann sich von Installationen und PHP Engines unterscheiden, aber während Sie viele Anfragen auf einer Seite validieren, summiert sich dies!/@ Anna Ericson

Es war eine gute Idee, einen relativen Aufruf für WP installiertes Verzeichnis zu verwenden. Von einem benutzerdefinierten Wordpress-Plugin "ROOT" wie:

$wordpress = '../../../wp-load.php';

Dann in meinem Plugin index.php:

define('SHORTINIT', true);
include_once $wordpress;

require_once ( ABSPATH . WPINC . '/class-wp-user.php' );
require_once ( ABSPATH . WPINC . '/class-wp-roles.php' );
require_once ( ABSPATH . WPINC . '/class-wp-role.php' );
require_once ( ABSPATH . WPINC . '/class-wp-session-tokens.php' );
require_once ( ABSPATH . WPINC . '/class-wp-user-meta-session-tokens.php' );
require_once ( ABSPATH . WPINC . '/formatting.php' );
require_once ( ABSPATH . WPINC . '/capabilities.php' );
//require_once ( ABSPATH . WPINC . '/query.php' ); // - might be useful
require_once ( ABSPATH . WPINC . '/user.php' );
require_once ( ABSPATH . WPINC . '/meta.php' );

wp_cookie_constants();

require_once ( ABSPATH . WPINC . '/vars.php' );
require_once ( ABSPATH . WPINC . '/kses.php' );
require_once ( ABSPATH . WPINC . '/rest-api.php' );
require_once ( ABSPATH . WPINC . '/pluggable.php' );

Danach funktioniert die Benutzervalidierung für mich. Dank an @Anna Ericson letzte Worte aus dem Originalcode:

Für eine andere Aufgabe, die mit einer oder zwei Anforderungen ausgeführt wird und andere benötigte Dateien aufspürt, ist möglicherweise nicht 0,3 Sek. wert. Überspringen Sie die SHORTINIT-Konstante und sorgen Sie manuell für Unordnung.

3
cavameta

Haben Sie define('SHORTINIT', true); ausprobiert? Ich habe es selbst nicht getestet, aber es scheint sehr wenige Aspekte von WP Core zu laden, während genügend Funktionalität erhalten bleibt, besonders wenn Sie sich nur mit der Datenbank befassen möchten.

2
Tomas Buteler