From 63b7f3da1b1338c43c62437ae95fb73b21465213 Mon Sep 17 00:00:00 2001 From: Dominik Schilling Date: Wed, 20 Jul 2016 18:18:30 +0000 Subject: [PATCH] Script Loader: Use `dns-prefetch` for the Emoji CDN. * `preconnect` will be potentially pretty heavy on the CDN. With the Unicode 9.0 emoji update, almost all browsers will trigger the `preconnect`. * `preconnect` only opens one connection, but `s.w.org` is HTTP/1.1, so the browser will use the preconnected connection for the first emoji, then it has to open new connections for subsequent emoji. Also use the same URL as we use for the `emoji_svg_url` filter. This will print the hint for the correct CDN in case someone uses a custom CDN. Props peterwilsoncc. Fixes #37387. git-svn-id: https://develop.svn.wordpress.org/trunk@38122 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/general-template.php | 9 ++++++++- tests/phpunit/tests/general/resourceHints.php | 20 +++++++++---------- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/src/wp-includes/general-template.php b/src/wp-includes/general-template.php index 0b6e576f92..44e87ffd53 100644 --- a/src/wp-includes/general-template.php +++ b/src/wp-includes/general-template.php @@ -2802,11 +2802,18 @@ function wp_site_icon() { function wp_resource_hints() { $hints = array( 'dns-prefetch' => wp_dependencies_unique_hosts(), - 'preconnect' => array( 's.w.org' ), + 'preconnect' => array(), 'prefetch' => array(), 'prerender' => array(), ); + /* + * Add DNS prefetch for the Emoji CDN. + * The path is removed in the foreach loop below. + */ + /** This filter is documented in wp-includes/formatting.php */ + $hints['dns-prefetch'][] = apply_filters( 'emoji_svg_url', 'https://s.w.org/images/core/emoji/2/svg/' ); + foreach ( $hints as $relation_type => $urls ) { /** * Filters domains and URLs for resource hints. diff --git a/tests/phpunit/tests/general/resourceHints.php b/tests/phpunit/tests/general/resourceHints.php index 95958e7f6b..75468758ec 100644 --- a/tests/phpunit/tests/general/resourceHints.php +++ b/tests/phpunit/tests/general/resourceHints.php @@ -31,7 +31,7 @@ class Tests_WP_Resource_Hints extends WP_UnitTestCase { } function test_should_have_defaults_on_frontend() { - $expected = "\n"; + $expected = "\n"; $this->expectOutputString( $expected ); @@ -39,10 +39,10 @@ class Tests_WP_Resource_Hints extends WP_UnitTestCase { } function test_dns_prefetching() { - $expected = "\n" . + $expected = "\n" . + "\n" . "\n" . - "\n" . - "\n"; + "\n"; add_filter( 'wp_resource_hints', array( $this, '_add_dns_prefetch_domains' ), 10, 2 ); @@ -67,7 +67,7 @@ class Tests_WP_Resource_Hints extends WP_UnitTestCase { } function test_prerender() { - $expected = "\n" . + $expected = "\n" . "\n" . "\n" . "\n"; @@ -93,8 +93,8 @@ class Tests_WP_Resource_Hints extends WP_UnitTestCase { } function test_parse_url_dns_prefetch() { - $expected = "\n" . - "\n"; + $expected = "\n" . + "\n"; add_filter( 'wp_resource_hints', array( $this, '_add_dns_prefetch_long_urls' ), 10, 2 ); @@ -115,7 +115,7 @@ class Tests_WP_Resource_Hints extends WP_UnitTestCase { function test_dns_prefetch_styles() { $expected = "\n" . - "\n"; + "\n"; $args = array( 'family' => 'Open+Sans:400', @@ -134,7 +134,7 @@ class Tests_WP_Resource_Hints extends WP_UnitTestCase { function test_dns_prefetch_scripts() { $expected = "\n" . - "\n"; + "\n"; $args = array( 'family' => 'Open+Sans:400', @@ -151,7 +151,7 @@ class Tests_WP_Resource_Hints extends WP_UnitTestCase { } function test_dns_prefetch_scripts_does_not_included_registered_only() { - $expected = "\n"; + $expected = "\n"; $unexpected = "\n"; wp_register_script( 'jquery-elsewhere', 'https://wordpress.org/wp-includes/js/jquery/jquery.js' );