#30203 closed enhancement (wontfix)
Consider a Simple WordPress-specific Autoloader
Reported by: |
|
Owned by: | |
---|---|---|---|
Milestone: | Priority: | normal | |
Severity: | normal | Version: | 4.0 |
Component: | Bootstrap/Load | Keywords: | |
Focuses: | performance | Cc: |
Description
I'm familiar with #21300 and this is not the same.
I'd like to propose we consider adding the simplest possible autoloader to WordPress and change WordPress core to use the autoloader for all of it's classes.
In my testing I've found that it can improve memory usage by about 2% on a non-plugin site, which is not much relatively speaking but on WordPress.com that 2% could add up to an extra site for every 50 sites that can currently run on a server. But as I think WordPress.com hosts around 30 millions sites, that's enough memory for around 600,000 more sites (unless my calculations aren't taking something into consideration they should, which is quite possible. But still.)
Here's what such a propose autoloader might look like:
global $wp_autoload_classes; $wp_autoload_classes = array( 'WP_List_Table' => 'wp-admin/includes/class-wp-list-table.php', 'WP_Post_List_Table' => 'wp-admin/includes/class-wp-post-list-table.php', // ...And all the rest of classes in core. ); spl_autoload_register( 'wp_autoloader' ); function wp_autoloader( $class_name ) { global $wp_autoload_classes; if ( isset( $wp_autoload_classes[ $class_name ] ) ) { $filepath = $wp_autoload_classes[ $class_name ]; if ( '/' == $filepath[0] ) { // @todo Make Windows compatible require_once( $filepath ); } else { require_once( dirname( __FILE__ ) . "/{$filepath}" ); } } } function register_autoload_class( $class_name, $class_filepath ) { global $wp_autoload_classes; $wp_autoload_classes[ $class_name ] = $class_filepath; }
Then plugins could use the autoloader like so:
register_autoload_class( 'Jetpack_Admin', dirname( __FILE__ ) . '/class.jetpack-admin.php' ); register_autoload_class( 'Jetpack_Client', dirname( __FILE__ ) . '/class.jetpack-client.php' ); register_autoload_class( 'Jetpack_Data', dirname( __FILE__ ) . '/class.jetpack-data.php' ); //... and so on...
If this gets the green-light from the core developers I'll be happy to do the work to create a patch for review.
Per discussions with @nacin on Slack this ticket is not a good idea. Closing.