В WordPress есть поддержка смайликов Emoji реализованная на уровне ядра и использующая библиотеку Twemoji от Twitter. Все это добро подключается прямо в шапку сайта js-скриптом, в задачу которого входит проверка вашего браузера на предмет поддержки Emoji и если таковой обнаружено не будет, то смайлики будут подгружены с сайта https://wordpress.org/.
Мало того, что шапка WordPress и так трещит по швам, от обилия стилей плагинов, шрифтов и прочих радостей жизни, так тут еще и это… Я специально сделал переносы текста, чтобы дать визуальное представление об объеме кода.
<script type="text/javascript"> window._wpemojiSettings = {"baseUrl":"https:\/\/s.w.org\/images\/core\ /emoji\/2\/72x72\/","ext":".png","svgUrl":"https:\/\/s.w.org\/images\ /core\/emoji\/2\/svg\/","svgExt":".svg","source":{"concatemoji": "https:\/\/techlist.top\/wp-includes\/js\/wp-emoji-release.min.js?ver=4.8"}}; !function(a,b,c){function d(a){var c,d,e,f,g,h=b.createElement("canvas"), i=h.getContext&&h.getContext("2d"),j=String.fromCharCode;if(!i||!i.fillText) return!1;switch(i.textBaseline="top",i.font="600 32px Arial",a) {case"flag":return i.fillText(j(55356,56806,55356,56826),0,0),!(h.toDataURL() .length<3e3)&&(i.clearRect(0,0,h.width,h.height),i.fillText (j(55356,57331,65039,8205,55356,57096),0,0),c=h.toDataURL(),i.clearRect (0,0,h.width,h.height),i.fillText(j(55356,57331,55356,57096),0,0),d=h.toDataURL() ,c!==d);case"diversity":return i.fillText(j(55356,57221),0,0),e=i.getImageData (16,16,1,1).data,f=e[0]+","+e[1]+","+e[2]+","+e[3],i.fillText (j(55356,57221,55356,57343),0,0),e=i.getImageData(16,16,1,1).data,g=e[0]+","+e [1]+","+e[2]+","+e[3],f!==g;case"simple":return i.fillText(j(55357,56835),0,0) ,0!==i.getImageData(16,16,1,1).data[0];case"unicode8":return i.fillText (j(55356,57135),0,0),0!==i.getImageData(16,16,1,1).data[0];case"unicode9" :return i.fillText(j(55358,56631),0,0),0!==i.getImageData(16,16,1,1).data[0]} return!1}function e(a){var c=b.createElement("script");c.src=a,c.type= "text/javascript",b.getElementsByTagName("head")[0].appendChild(c) }var f,g,h,i;for(i=Array("simple","flag","unicode8","diversity","unicode9"), c.supports={everything:!0,everythingExceptFlag:!0},h=0;h<i.length;h++) c.supports[i[h]]=d(i[h]),c.supports.everything=c.supports.everything&&c.supports [i[h]],"flag"!==i[h]&&(c.supports.everythingExceptFlag= c.supports.everythingExceptFlag&&c.supports[i[h]]); c.supports.everythingExceptFlag=c.supports.everythingExceptFlag&&! c.supports.flag,c.DOMReady=!1,c.readyCallback=function(){c.DOMReady=!0}, c.supports.everything||(g=function(){c.readyCallback()},b.addEventListener? (b.addEventListener("DOMContentLoaded",g,!1),a.addEventListener("load",g,!1)) :(a.attachEvent("onload",g),b.attachEvent("onreadystatechange",function() {"complete"===b.readyState&&c.readyCallback()})),f=c.source||{},f.concatemoji?e (f.concatemoji):f.wpemoji&&f.twemoji&&(e(f.twemoji),e(f.wpemoji)))} (window,document,window._wpemojiSettings); </script> <style type="text/css"> img.wp-smiley, img.emoji { display: inline !important; border: none !important; box-shadow: none !important; height: 1em !important; width: 1em !important; margin: 0 .07em !important; vertical-align: -0.1em !important; background: none !important; padding: 0 !important; } </style>
Все это тормозит загрузку страниц сайта, пусть незначительно, но тормозит. Мало того, еще и не предусматривает отключения за ненадобностью. Ну не все используют Emoji на своих сайтах, я вот не использую, но пользоваться загружать вынужден, потому как мне их навязали.
Естественно что у некоторых пользователей WordPress появляется потребность в отключении Emoji. Поскольку просто так отключить не получается, то в природе существует два способа это сделать.
Первый, это отключение Emoji с помощью плагина Disable Emojis, ничего сложного, скачайте плагин, установите и включите.
Второй способ подразумевает правку файла functions.php вашей текущей темы оформления. Пользователю предлагается добавить следующий код в файл.
function disable_emojis() { remove_action( 'wp_head', 'print_emoji_detection_script', 7 ); remove_action( 'admin_print_scripts', 'print_emoji_detection_script' ); remove_action( 'wp_print_styles', 'print_emoji_styles' ); remove_action( 'admin_print_styles', 'print_emoji_styles' ); remove_filter( 'the_content_feed', 'wp_staticize_emoji' ); remove_filter( 'comment_text_rss', 'wp_staticize_emoji' ); remove_filter( 'wp_mail', 'wp_staticize_emoji_for_email' ); add_filter( 'tiny_mce_plugins', 'disable_emojis_tinymce' ); } add_action( 'init', 'disable_emojis' ); function disable_emojis_tinymce( $plugins ) { if ( is_array( $plugins ) ) { return array_diff( $plugins, array( 'wpemoji' ) ); } else { return array(); } }
Код делает ровно то же, что и плагин. Как по мне, так данный код является частично выдранным из плагина, в нем отсутствует вот эта часть кода, отключающая подгрузку смайликов с CDN.
function disable_emojis_remove_dns_prefetch( $urls, $relation_type ) { if ( 'dns-prefetch' == $relation_type ) { /** This filter is documented in wp-includes/formatting.php */ $emoji_svg_url = apply_filters( 'emoji_svg_url', 'https://s.w.org/images/core/emoji/2.2.1/svg/' ); $urls = array_diff( $urls, array( $emoji_svg_url ) ); } return $urls; }
Так что если собрать все в одном файле, то получим содержание плагина, разве что без комментариев разработчика.
На самом деле данный способ не очень хорош в использовании. Знающие люди рекомендуют не загромождать functions.php лишним кодом, да и после смены темы, файл придется править заново. Так что лучше просто поставить плагин.
Чтобы не быть голословным насчет влияния Emoji на скорость загрузки страниц сайта, я провел небольшой эксперимент. Первым делом я установил плагин (бесплатный). Потом измерил скорость загрузки страниц с Emoji и без, то есть с включенным и выключенным плагином.
Замерял скорость не один раз, а несколько, результат всегда был разный. Но с выключенными Emoji всегда было быстрее. Так что пусть разница и незначительная, но она есть.
Со включенными Emoji главная страница грузится за 678 ms и имеет оценку (Perfomance grade) равную 84, при загрузке страницы происходит 41 запрос.
С выключенными Emoji главная страница сайта грузится за 642 ms и имеет оценку (Perfomance grade) равную 85, при загрузке страницы происходит 40 запросов.
Это тот самый отсутствующий запрос - файл wp-emoji-release.min.js?ver=4.8, скрипт постоянно подгружающийся при запросе страниц сайта и весящий 5.1 kB.
Разница конечно смехотворная, но она есть всегда и говорит о том, что влияние Emoji на скорость загрузки страниц есть.
Можете попробовать сами, только выбирайте ближайший к вам сервер, там их всего четыре. Два в США, один в Австралии и один в Европе. Если ваш хостинг в Европе, то и выбирайте Европу, нет смысла тестировать сайт скажем из США. Например при выборе США время загрузки возрастает до 3 - 3.5 s, а про Австралию вообще молчу - 5.77 s.