WordPress как на ладони
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
campusboy1848 год назад
  • 1
    Kama4464

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

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

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

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

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

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

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

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

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

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

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

    Alex месяц назад

    viraladmin (@viraladmin)

    Но могу ли я спросить, почему? Это улучшит производительность вашего сайта.

    Можете ли вы объяснить мне, КАК это могло бы повысить производительность?

    Это НИКОГДА не улучшало бы производительность. Фактически он будет почти ВСЕГДА иметь противоположный эффект. Первый раз, когда кто-то посещает URL-адрес - да, предварительная выборка приведет к тому, что страница будет немного быстрее - но каждая страница после первой - будет загружаться медленнее. Зачем? Потому что, предварительно загружая сценарий, полностью игнорирует встроенные в кеширование браузера и префикс URL, несмотря на то, что он уже хранится в браузере.

    Если вы сомневаетесь в этом - откройте свой сайт WordPress в Chrome. Затем зайдите в chrome: // net-internals / # dns

    Просмотрите все записи DNS, относящиеся к wordpress? Да, путем предварительной выборки - вы полностью игнорируете их и заставляете браузер идти в Интернет, чтобы получить информацию, которую он уже хранит в кеше.

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