Ressourcen sparen bei Ajax Calls in WordPress

Bei meiner Arbeit am Plugin BackWPup habe ich nach einer Möglichkeit gesucht Ressourcen bei Ajax Calls und bei der Auftragsausführung zu sparen. Die einzige große Einsparung, die ich bisher gefunden habe, ist es die Übersetzungen anderer Plugins nicht mit zu laden, da die enorm viel Speicher verbrauchen. Dies bringt in meiner Testinstallation mit 20 Plugins eine Einsparung von 31 MB auf 25,5 MB Script Speicher. Da die Dateien auch nicht geöffnet werden, wird das auch noch eine Einsparung bringen, die ich im Moment nicht beziffern kann.

Hier die Umsetzung:
Wichtig ist hierbei, dass ich nur die Übersetzungen nicht lade, wenn es sich um Calls meines Plugins handelt.

<?php
define( 'PLUGIN_MENU_PAGES', 'page1,page2' );
if ( defined( 'DOING_AJAX' ) and DOING_AJAX and in_array(
		$_POST[ 'backwpupajaxpage' ], explode( ',', PLUGIN_MENU_PAGES )
	)
) {
	add_filter(
		'override_load_textdomain', create_function(
			'$default, $domain, $mofile', 'if ($domain=="textdomain") return $default; else return true;'
		), 1, 3
	);
}

Zusätzlich musste ich noch einbauen, dass mein Plugin als erstes geladen wird:

<?php
define( 'PLGUNINNAME_PLUGIN_BASENAME', plugin_basename( __FILE__ ) );

public function pluginname_first_plugin( $newvalue, $oldvalue ) {

	if ( ! is_array( $newvalue ) ) {
		return $newvalue;
	}
	for ( $i = 0; $i < count( $newvalue ); $i++ ) {
		if ( $newvalue[ $i ] == PLGUNINNAME_PLUGIN_BASENAME ) {
			unset( $newvalue[ $i ] );
		}
	}
	array_unshift( $newvalue, PLGUNINNAME_PLUGIN_BASENAME );

	return $newvalue;
}

add_filter( 'pre_update_option_active_plugins', 'pluginname_first_plugin', 1, 2 );

Vielleicht kennt ja noch jemand eine Lösung die Ressourcen weiter zu optimieren und die WordPress eigene Ajax Behandlung zu nutzen…

Update:
mit einer etwas geänderten Funktion ist es nicht mehr notwendig das Plugin nach vorne zu schieben.

<?php
define( 'PLUGIN_MENU_PAGES', 'page1,page2' );
function overide_textdomain( $default, $domain, $mofile ) {

	if ( ( defined( 'DOING_CRON' ) && DOING_CRON )
		&& in_array(
			$_POST[ 'backwpupajaxpage' ], explode( ',', PLUGIN_MENU_PAGES )
		)
	) {
		global $l10n;
		if ( $domain == 'owntextdomainname' ) {
			foreach ( array_keys( $l10n ) as $domainkey ) {
				unset( $l10n[ $domainkey ] );
			}
		} else {
			return TRUE;
		}
	}

	return $default;
}

add_filter( 'override_load_textdomain', 'overide_textdomain' );

Update: Ich glaub das beste ist es, wenn in WordPress der WP-Performance-Gettext-Patch integriert wird. Nach meinen Tests bringt das am meisten. Der Speicherverbrauch geht dann auf ca. 17MB runter.

WordPress 3.3 add_contextual_help deprecated

Eine einfache Möglichkeit festzustellen, ob man mit „add_contextual_help()“ oder „get_current_screen()->add_help_tab“ arbeiten muss, um die abwärts Kompatibilität zu behalten.

<?php
if (method_exists(get_current_screen(),'add_help_tab')) {
    get_current_screen()->add_help_tab( array(
        'id' => 'plugininfo',
        'title' => 'Plugin Info',
        'content' => 'Text') );
} elseif (function_exists('add_contextual_help')) {
    add_contextual_help( get_current_screen(), 'Text');
}

Firefox: Seitenaktualisierung

Beim Mozilla Firefox gibt es auch die Einstellung wie oft die Seite, die man aufruft, auf Aktualität geprüft wird. Wenn der Browser meint, die Seite ist noch aktuell, wird die Seite aus dem Cache geladen, was dazu führen kann, dass man eine alte Version der Seite angezeigt bekommt. Diese Einstellung ist jedoch nicht wie im Internet Explorer über einen Menüpunkt zu erreichen, sondern muss über den Aufruf „about:config“ in der Adresszeile geändert werden.

Der Einstellung, die geändert werden muss, heißt „browser.cache.check_doc_frequency“ und kann folgende Werte enthalten:

  • 0 = Beim jedem Start von Firefox
  • 1 = Bei jedem Zugriff auf die Seite <– am besten
  • 2 = Nie
  • 3 = Automatisch <– Standart