Index: src/wp-admin/includes/admin-filters.php
===================================================================
--- src/wp-admin/includes/admin-filters.php	(revision 37473)
+++ 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_browser_hints' );
+
 add_action( 'post_edit_form_tag', 'post_form_autocomplete_off' );
 
 add_action( 'update_option_home',          'update_home_siteurl', 10, 2 );
Index: src/wp-includes/default-filters.php
===================================================================
--- src/wp-includes/default-filters.php	(revision 37473)
+++ 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_browser_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 37473)
+++ src/wp-includes/general-template.php	(working copy)
@@ -2755,6 +2755,172 @@
 }
 
 /**
+ * Makes sure browser hint array has unique values.
+ *
+ * @since 4.6.0
+ *
+ * @param array $urls Array of browser hints.
+ */
+function unique_browser_hints( $urls ) {
+	$seen = array();
+	foreach( $urls as $url ) {
+		if ( ! in_array( $url, $seen ) ) {
+			array_push( $seen, $url );
+		}
+	}
+	return $seen;
+}
+
+/**
+ * Prints out brower hints for dns-prefetch, prerender, preconnect, etc.
+ *
+ * @since 4.6.0
+ */
+function wp_browser_hints() {
+
+	$default_urls = array(
+		array( 'preconnect', 's.w.org' ),
+	);
+
+	/**
+	 * Filters domains and urls for browser hints.
+	 *
+	 * @since 4.6.0
+	 *
+	 * @param array $urls URL's to print for browser hints.
+	 */
+	$urls           = apply_filters( 'browser_hints', $default_urls );
+	$prerender_urls = wp_prerender_posts();
+	$enqueued_hosts = wp_hint_scripts_styles();
+	$urls           = array_merge( $urls, $prerender_urls, $enqueued_hosts );
+
+	if ( is_admin() ) {
+		$admin_urls = prerender_admin_urls();
+		$urls       = array_merge( $urls, $admin_urls );
+	}
+
+	$urls = unique_browser_hints( $urls );
+
+	foreach ( $urls as $url ) {
+		if ( $url[0] === 'prerender' ) {
+			$url[1] = esc_url( $url[1], array( 'http', 'https' ) );
+		} elseif ( $url[0] === 'dns-prefetch' || $url[0] === 'preconnect' ) {
+			$url[1] = esc_url( untrailingslashit( $url[1] ), array( 'http', 'https' ) );
+		}
+		printf( "<link rel='%s' href='%s'>\r\n", $url[0], $url[1] );
+	}
+}
+
+/**
+ * Adds posts to be prerendered.
+ *
+ * @since 4.6.0
+ */
+function wp_prerender_posts() {
+	/**
+	 * Filters the number of posts to prerender.
+	 *
+	 * @since 4.6.0
+	 *
+	 * @param int $prerender_count Number of posts to prerender.
+	 */
+	$num_posts = apply_filters( 'prerender_count', 1 );
+
+	$posts_to_prerender = array();
+
+	if ( is_home() ) {
+
+		$count = 1;
+		while( have_posts() && $count <= $num_posts ) {
+			the_post();
+			array_push( $posts_to_prerender, array( 'prerender', get_the_permalink() ) );
+			$count++;
+		}
+
+		rewind_posts();
+
+	} elseif ( is_single() ) {
+
+		$next_post = get_next_post();
+		$previous_post = get_previous_post();
+
+		if ( ! empty( $next_post ) ) {
+			array_push( $posts_to_prerender, array( 'prerender', get_permalink( $next_post->ID ) ) );
+		}
+
+		if ( ! empty( $previous_post ) ) {
+			array_push( $posts_to_prerender, array( 'prerender', get_permalink( $previous_post->ID ) ) );
+		}
+
+	}
+
+	return $posts_to_prerender;
+}
+
+/**
+ * Prerender pages in the admin that users are most likely to visit.
+ *
+ * @since 4.6.0
+ */
+function prerender_admin_urls() {
+
+	$default_urls = array(
+		array( 'prerender', admin_url( 'post-new.php' ) ),
+	);
+
+	/**
+	 * Filters which admin pages will be prerendered.
+	 *
+	 * @since 4.6.0
+	 *
+	 * @param array $urls Admin URL's to prerender.
+	 */
+	$urls = apply_filters( 'prerender_admin_pages', $default_urls );
+
+	return $urls;
+}
+
+/**
+ * Adds dns-prefetch for all scripts and styles enqueued from external hosts.
+ *
+ * @since 4.6.0
+ */
+function wp_hint_scripts_styles() {
+	global $wp_scripts, $wp_styles;
+
+	$unique_hosts = array();
+
+	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;
+		}
+	}
+
+	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;
+		}
+	}
+
+	$unique_hosts = array_map( 'add_prefetch_attr', $unique_hosts );
+	return $unique_hosts;
+}
+
+/**
+ * Adds dns-prefetch to hosts of scripts and styles.
+ *
+ * @since 4.6.0
+ *
+ * @param array $hosts A hostname.
+ */
+function add_prefetch_attr( $host ) {
+	$host = array( 'dns-prefetch', $host );
+	return $host;
+}
+
+/**
  * 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/template.php
===================================================================
--- tests/phpunit/tests/general/template.php	(revision 37473)
+++ tests/phpunit/tests/general/template.php	(working copy)
@@ -345,4 +345,50 @@
 		$this->custom_logo_id  = $this->_make_attachment( $upload );
 		return $this->custom_logo_id;
 	}
+
+	/**
+	 * @ticket 34292
+	 */
+	function test_wp_dns_prefetch() {
+		$this->assertEmpty( get_echo( 'wp_dns_prefetch' ) );
+
+		add_filter( 'dns_prefetch_domains', array( $this, '_add_dns_prefetch_domains' ) );
+
+		$expected = "<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";
+
+		$this->assertEquals( $expected, get_echo( 'wp_dns_prefetch' ) );
+	}
+
+	function _add_dns_prefetch_domains( $domains ) {
+		$domains[] = 'http://wordpress.org';
+		$domains[] = 'https://google.com';
+		$domains[] = '//make.wordpress.org';
+
+		return $domains;
+	}
+
+	/**
+	 * @ticket 34292
+	 */
+	function test_wp_prerender() {
+		$this->assertEmpty( get_echo( 'wp_prerender' ) );
+
+		add_filter( 'prerender_urls', array( $this, '_add_prerender_urls' ) );
+
+		$expected = "<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";
+
+		$this->assertEquals( $expected, get_echo( 'wp_prerender' ) );
+	}
+
+	function _add_prerender_urls( $urls ) {
+		$urls[] = 'https://make.wordpress.org/great-again';
+		$urls[] = 'http://jobs.wordpress.net';
+		$urls[] = '//core.trac.wordpress.org';
+
+		return $urls;
+	}
 }
