mirror of
https://github.com/gosticks/wordpress-develop.git
synced 2026-06-28 22:30:04 +00:00
Multisite: Improve performance by caching not found lookups for sites and networks.
With this change, the result of a site or network lookup by ID will be cached even if the ID does not exist. When a new site or network is created, the cache for the respective new ID is cleared. Props mnelson4, nielsdeblaauw. Fixes #42251. git-svn-id: https://develop.svn.wordpress.org/trunk@45910 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
@@ -613,6 +613,49 @@ if ( is_multisite() ) :
|
||||
|
||||
$this->assertSame( (string) self::$different_site_ids[0], $network->blog_id );
|
||||
}
|
||||
|
||||
/**
|
||||
* @ticket 42251
|
||||
*/
|
||||
public function test_get_network_not_found_cache() {
|
||||
global $wpdb;
|
||||
|
||||
$new_network_id = $this->_get_next_network_id();
|
||||
$this->assertNull( get_network( $new_network_id ) );
|
||||
|
||||
$num_queries = $wpdb->num_queries;
|
||||
$this->assertNull( get_network( $new_network_id ) );
|
||||
$this->assertSame( $num_queries, $wpdb->num_queries );
|
||||
}
|
||||
|
||||
/**
|
||||
* @ticket 42251
|
||||
*/
|
||||
public function test_get_network_not_found_cache_clear() {
|
||||
$new_network_id = $this->_get_next_network_id();
|
||||
$this->assertNull( get_network( $new_network_id ) );
|
||||
|
||||
$new_network = $this->factory()->network->create_and_get();
|
||||
|
||||
// Double-check we got the ID of the new network correct.
|
||||
$this->assertEquals( $new_network_id, $new_network->id );
|
||||
|
||||
// Verify that if we fetch the network now, it's no longer false.
|
||||
$fetched_network = get_network( $new_network_id );
|
||||
$this->assertInstanceOf( 'WP_Network', $fetched_network );
|
||||
$this->assertEquals( $new_network_id, $fetched_network->id );
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the ID of the site with the highest ID
|
||||
* @return int
|
||||
*/
|
||||
protected function _get_next_network_id() {
|
||||
global $wpdb;
|
||||
//create an extra network, just to make sure we know the ID of the following one
|
||||
static::factory()->network->create();
|
||||
return (int) $wpdb->get_var( 'SELECT id FROM ' . $wpdb->site . ' ORDER BY id DESC LIMIT 1' ) + 1;
|
||||
}
|
||||
}
|
||||
|
||||
endif;
|
||||
|
||||
@@ -2383,6 +2383,51 @@ if ( is_multisite() ) :
|
||||
$this->wp_initialize_site_meta = array();
|
||||
}
|
||||
|
||||
/**
|
||||
* @ticket 42251
|
||||
*/
|
||||
public function test_get_site_not_found_cache() {
|
||||
global $wpdb;
|
||||
|
||||
$new_site_id = $this->_get_next_site_id();
|
||||
$this->assertNull( get_site( $new_site_id ) );
|
||||
|
||||
$num_queries = $wpdb->num_queries;
|
||||
$this->assertNull( get_site( $new_site_id ) );
|
||||
$this->assertSame( $num_queries, $wpdb->num_queries );
|
||||
}
|
||||
|
||||
/**
|
||||
* @ticket 42251
|
||||
*/
|
||||
public function test_get_site_not_found_cache_clear() {
|
||||
$new_site_id = $this->_get_next_site_id();
|
||||
$this->assertNull( get_site( $new_site_id ) );
|
||||
|
||||
$new_site = $this->factory()->blog->create_and_get();
|
||||
|
||||
// Double-check we got the ID of the new site correct.
|
||||
$this->assertEquals( $new_site_id, $new_site->blog_id );
|
||||
|
||||
// Verify that if we fetch the site now, it's no longer false.
|
||||
$fetched_site = get_site( $new_site_id );
|
||||
$this->assertInstanceOf( 'WP_Site', $fetched_site );
|
||||
$this->assertEquals( $new_site_id, $fetched_site->blog_id );
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the ID of the next site that will get inserted
|
||||
* @return int
|
||||
*/
|
||||
protected function _get_next_site_id() {
|
||||
global $wpdb;
|
||||
//create an entry
|
||||
static::factory()->blog->create();
|
||||
//get the ID after it
|
||||
return (int) $wpdb->get_var( 'SELECT blog_id FROM ' . $wpdb->blogs . ' ORDER BY blog_ID DESC LIMIT 1' ) + 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Capture the $meta value passed to the wpmu_new_blog action and compare it.
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user