Index: src/wp-admin/includes/admin-filters.php
===================================================================
--- src/wp-admin/includes/admin-filters.php	(revision 37898)
+++ src/wp-admin/includes/admin-filters.php	(working copy)
@@ -43,6 +43,9 @@
 add_action( 'admin_head', 'wp_site_icon'             );
 add_action( 'admin_head', '_ipad_meta'               );
 
+// Prerendering.
+add_filter( 'admin_head', 'wp_resource_hints' );
+
 add_action( 'admin_print_scripts-post.php',     'wp_page_reload_on_back_button_js' );
 add_action( 'admin_print_scripts-post-new.php', 'wp_page_reload_on_back_button_js' );
 
Index: src/wp-includes/default-filters.php
===================================================================
--- src/wp-includes/default-filters.php	(revision 37898)
+++ src/wp-includes/default-filters.php	(working copy)
@@ -235,6 +235,7 @@
 add_action( 'wp_head',             'wp_print_head_scripts',            9    );
 add_action( 'wp_head',             'wp_generator'                           );
 add_action( 'wp_head',             'rel_canonical'                          );
+add_action( 'wp_head',             'wp_resource_hints'                      );
 add_action( 'wp_head',             'wp_shortlink_wp_head',            10, 0 );
 add_action( 'wp_head',             'wp_site_icon',                    99    );
 add_action( 'wp_footer',           'wp_print_footer_scripts',         20    );
Index: src/wp-includes/general-template.php
===================================================================
--- src/wp-includes/general-template.php	(revision 37898)
+++ src/wp-includes/general-template.php	(working copy)
@@ -2788,6 +2788,96 @@
 }
 
 /**
+ * Prints resource hints to browsers for pre-fetching, pre-rendering and pre-connecting to web sites.
+ *
+ * Gives hints to browsers to prefetch specific pages or render them in the background,
+ * to perform DNS lookups or to begin the connection handshake (DNS, TCP, TLS) in the background.
+ *
+ * These performance improving indicators work by using `<link rel"…">`.
+ *
+ * @since 4.6.0
+ */
+function wp_resource_hints() {
+	$hints = array(
+		'preconnect'   => array( 's.w.org' ),
+		'prerender'    => array(),
+		'prefetch'     => array(),
+		'dns-prefetch' => wp_resource_hints_scripts_styles(),
+	);
+
+	if ( is_admin() ) {
+		$screen = get_current_screen();
+
+		if ( 'edit-post' === $screen->id ) {
+			$hints['prefetch'][] = admin_url( 'css/edit.css' );
+			$hints['prefetch'][] = includes_url( 'js/tinymce/tinymce.min.js' );
+		} else if ( 'users' === $screen->id ) {
+			$hints['prefetch'][] = admin_url( 'js/user-profile.js' );
+		}
+	}
+
+	foreach ( $hints as $method => $urls ) {
+		/**
+		 * Filters domains and URLs for resource hints.
+		 *
+		 * @since 4.6.0
+		 *
+		 * @param array  $urls   URLs to print for resource hints.
+		 * @param string $method The method the URLs are printed for, e.g. 'preconnect' or 'prerender'.
+		 */
+		$urls = array_unique( apply_filters( 'wp_resource_hints', $urls, $method ) );
+
+		foreach ( $urls as $url ) {
+			$url = esc_url( $url, array( 'http', 'https' ) );
+
+
+			if ( in_array( $method, array( 'preconnect', 'dns-prefetch' ) ) ) {
+				$parsed = parse_url( $url );
+
+				if ( ! empty( $parsed['scheme'] ) ) {
+					$url = $parsed['scheme'] . '://' . $parsed['host'];
+				} else {
+					$url = $parsed['host'];
+				}
+			}
+
+			printf( "<link rel='%s' href='%s'>\r\n", $method, $url );
+		}
+	}
+}
+
+/**
+ * Adds dns-prefetch for all scripts and styles enqueued from external hosts.
+ *
+ * @since 4.6.0
+ */
+function wp_resource_hints_scripts_styles() {
+	global $wp_scripts, $wp_styles;
+
+	$unique_hosts = array();
+
+	if ( is_object( $wp_scripts ) && ! empty( $wp_scripts->registered ) ) {
+		foreach ( $wp_scripts->registered as $registered_script ) {
+			$this_host = parse_url( $registered_script->src, PHP_URL_HOST );
+			if ( ! in_array( $this_host, $unique_hosts ) && ! empty( $this_host ) && $this_host !== $_SERVER['SERVER_NAME'] ) {
+				$unique_hosts[] = $this_host;
+			}
+		}
+	}
+
+	if ( is_object( $wp_styles ) && ! empty( $wp_styles->registered ) ) {
+		foreach ( $wp_styles->registered as $registered_style ) {
+			$this_host = parse_url( $registered_style->src, PHP_URL_HOST );
+			if ( ! in_array( $this_host, $unique_hosts ) && ! empty( $this_host ) && $this_host !== $_SERVER['SERVER_NAME'] ) {
+				$unique_hosts[] = $this_host;
+			}
+		}
+	}
+
+	return $unique_hosts;
+}
+
+/**
  * Whether the user should have a WYSIWIG editor.
  *
  * Checks that the user requires a WYSIWIG editor and that the editor is
Index: tests/phpunit/tests/general/resourceHints.php
===================================================================
--- tests/phpunit/tests/general/resourceHints.php	(revision 0)
+++ tests/phpunit/tests/general/resourceHints.php	(working copy)
@@ -0,0 +1,163 @@
+<?php
+
+/**
+ * @group  template
+ * @ticket 34292
+ */
+class Tests_WP_Resource_Hints extends WP_UnitTestCase {
+	private $old_wp_scripts;
+
+        function setUp() {
+                parent::setUp();
+                $this->old_wp_scripts = isset( $GLOBALS['wp_scripts'] ) ? $GLOBALS['wp_scripts'] : null;
+                remove_action( 'wp_default_scripts', 'wp_default_scripts' );
+                $GLOBALS['wp_scripts'] = new WP_Scripts();
+                $GLOBALS['wp_scripts']->default_version = get_bloginfo( 'version' );
+        }
+
+        function tearDown() {
+                $GLOBALS['wp_scripts'] = $this->old_wp_scripts;
+                add_action( 'wp_default_scripts', 'wp_default_scripts' );
+                parent::tearDown();
+        }
+
+	function test_should_have_defaults_on_frontend() {
+		$expected = "<link rel='preconnect' href='http://s.w.org'>\r\n";
+
+		$this->expectOutputString( $expected );
+
+		wp_resource_hints();
+	}
+
+	function test_edit_post_screen() {
+		$expected = "<link rel='preconnect' href='http://s.w.org'>\r\n" .
+		            "<link rel='prefetch' href='" . admin_url( 'css/edit.css' ) . "'>\r\n" .
+		            "<link rel='prefetch' href='" . includes_url( 'js/tinymce/tinymce.min.js' ) . "'>\r\n";
+
+		set_current_screen( 'edit.php' );
+
+		$actual = get_echo( 'wp_resource_hints' );
+
+		set_current_screen( 'front' );
+
+		$this->assertEquals( $expected, $actual );
+	}
+
+	function test_users_screen() {
+		$expected = "<link rel='preconnect' href='http://s.w.org'>\r\n" .
+		            "<link rel='prefetch' href='" . admin_url( 'js/user-profile.js' ) . "'>\r\n";
+
+		set_current_screen( 'users.php' );
+
+		$actual = get_echo( 'wp_resource_hints' );
+
+		set_current_screen( 'front' );
+
+		$this->assertEquals( $expected, $actual );
+	}
+
+	function test_dns_prefetching() {
+		$expected = "<link rel='preconnect' href='http://s.w.org'>\r\n" .
+		            "<link rel='dns-prefetch' href='http://wordpress.org'>\r\n" .
+		            "<link rel='dns-prefetch' href='https://google.com'>\r\n" .
+		            "<link rel='dns-prefetch' href='make.wordpress.org'>\r\n";
+
+		add_filter( 'wp_resource_hints', array( $this, '_add_dns_prefetch_domains' ), 10, 2 );
+
+		$actual = get_echo( 'wp_resource_hints' );
+
+		remove_filter( 'wp_resource_hints', array( $this, '_add_dns_prefetch_domains' ) );
+
+		$this->assertEquals( $expected, $actual );
+	}
+
+	function _add_dns_prefetch_domains( $hints, $method ) {
+		if ( 'dns-prefetch' === $method ) {
+			$hints[] = 'http://wordpress.org';
+			$hints[] = 'https://google.com';
+			$hints[] = '//make.wordpress.org';
+		}
+
+		return $hints;
+	}
+
+	function test_prerender() {
+		$expected = "<link rel='preconnect' href='http://s.w.org'>\r\n" .
+		            "<link rel='prerender' href='https://make.wordpress.org/great-again'>\r\n" .
+		            "<link rel='prerender' href='http://jobs.wordpress.net'>\r\n" .
+		            "<link rel='prerender' href='//core.trac.wordpress.org'>\r\n";
+
+		add_filter( 'wp_resource_hints', array( $this, '_add_prerender_urls' ), 10, 2 );
+
+		$actual = get_echo( 'wp_resource_hints' );
+
+		remove_filter( 'wp_resource_hints', array( $this, '_add_prerender_urls' ) );
+
+		$this->assertEquals( $expected, $actual );
+	}
+
+	function _add_prerender_urls( $hints, $method ) {
+		if ( 'prerender' === $method ) {
+			$hints[] = 'https://make.wordpress.org/great-again';
+			$hints[] = 'http://jobs.wordpress.net';
+			$hints[] = '//core.trac.wordpress.org';
+		}
+
+		return $hints;
+	}
+
+	function test_parse_url_dns_prefetch() {
+		$expected = "<link rel='preconnect' href='http://s.w.org'>\r\n" .
+			    "<link rel='dns-prefetch' href='http://make.wordpress.org'>\r\n";
+
+		add_filter( 'wp_resource_hints', array( $this, '_add_dns_prefetch_long_urls' ), 10, 2 );
+
+		$actual = get_echo( 'wp_resource_hints' );
+
+		remove_filter( 'wp_resource_hints', array( $this, '_add_dns_prefetch_long_urls' ) );
+
+		$this->assertEquals( $expected, $actual );
+	}
+
+	function _add_dns_prefetch_long_urls( $hints, $method ) {
+		if ( 'dns-prefetch' === $method ) {
+			$hints[] = 'http://make.wordpress.org/wp-includes/css/editor.css';
+		}
+
+		return $hints;
+	}
+
+	function test_dns_prefetch_styles() {
+		$expected = "<link rel='preconnect' href='http://s.w.org'>\r\n" .
+			    "<link rel='dns-prefetch' href='http://fonts.googleapis.com'>\r\n";
+
+		$args = array(
+			'family' => 'Open+Sans:400',
+			'subset' => 'latin',
+		);
+
+		wp_enqueue_style( 'googlefonts', add_query_arg( $args, "//fonts.googleapis.com/css" ) );
+
+		$actual = get_echo( 'wp_resource_hints' );
+
+		$this->assertEquals( $expected, $actual );
+
+	}
+
+	function test_dns_prefetch_scripts() {
+		$expected = "<link rel='preconnect' href='http://s.w.org'>\r\n" .
+			    "<link rel='dns-prefetch' href='http://fonts.googleapis.com'>\r\n";
+
+		$args = array(
+			'family' => 'Open+Sans:400',
+			'subset' => 'latin',
+		);
+
+		wp_enqueue_script( 'googlefonts', add_query_arg( $args, "//fonts.googleapis.com/css" ) );
+
+		$actual = get_echo( 'wp_resource_hints' );
+
+		$this->assertEquals( $expected, $actual );
+	}
+
+}
