WordPress как на ладони
Наставник Трепачёв Д.П., phphtml.net wordpress jino

Использование dns-prefetch в WordPress

В WP с какого-то момента в коде страниц появилось следующее:

<link rel='dns-prefetch' href='//fonts.googleapis.com'>
<link rel='dns-prefetch' href='//s.w.org'>

Стоит ли это убирать или это реально полезная вещь? Ходят слухи, что это ускоряет процесс подгрузки файлов (картинки и т.д.) с перечисленных доменов.

P.S.: Интересная статья о предсказывающих страницах на Хабре попалась. Но всё же хотелось побеседовать на эту тему, кто уже использовал.

Нашлась функция в файле general-template.php:

/**
 * 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(
		'dns-prefetch' => wp_dependencies_unique_hosts(),
		'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 of relation type.
		 *
		 * @since 4.6.0
		 *
		 * @param array  $urls          URLs to print for resource hints.
		 * @param string $relation_type The relation type the URLs are printed for, e.g. 'preconnect' or 'prerender'.
		 */
		$urls = apply_filters( 'wp_resource_hints', $urls, $relation_type );

		foreach ( $urls as $key => $url ) {
			$url = esc_url( $url, array( 'http', 'https' ) );
			if ( ! $url ) {
				unset( $urls[ $key ] );
				continue;
			}

			if ( in_array( $relation_type, array( 'preconnect', 'dns-prefetch' ) ) ) {
				$parsed = wp_parse_url( $url );
				if ( empty( $parsed['host'] ) ) {
					unset( $urls[ $key ] );
					continue;
				}

				if ( 'preconnect' === $relation_type && ! empty( $parsed['scheme'] ) ) {
					$url = $parsed['scheme'] . '://' . $parsed['host'];
				} else {
					// Use protocol-relative URLs for dns-prefetch or if scheme is missing.
					$url = '//' . $parsed['host'];
				}
			}

			$urls[ $key ] = $url;
		}

		$urls = array_unique( $urls );

		foreach ( $urls as $url ) {
			printf( "<link rel='%s' href='%s'>\n", $relation_type, $url );
		}
	}
}
0
campusboy1746 11 месяцев назад
  • 1
    Kama4477

    Я не использовал пока нигде.

    Можно удалить, но если не заморачивался на счет этого и не понимаешь как и что работает, то наверное лучше оставить.

    Из минусов только минимальная нагрузка, в виде условно лишних операций по вычислению нужны эти теги или нет. Если знаешь что не нужно, то можно отключить этот фильтр так:

    remove_action( 'wp_head', 'wp_resource_hints', 2);

    Других минусов я не вижу.

    А плюсы могут быть - в миллисекундах конечно, но все же... Особенно в данном случае хороший плюс может быть для emoji:

    <link rel='dns-prefetch' href='//s.w.org'>

    Ну и вообще, если это использовать и настраивать, то наверное лучше юзать preconnect...

    Думаю как-то так. Все это без упора на практику - опыта нет...

    Комментировать
  • 0

    Может конечно у меня что с сайтом, но даже исключение из шаблонов движка вывод, все равно выводит эти строки... хотя все остальное типо версии нормально убралось. Плагинов кэширования не стоит... http://dss-club.ru/

    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Регистрация. Вход.