Конкурс инструкций

Ускоряем работу сайта на этапе разработки и обгоняем конкурентов в поиске

Приветствую!

В этой статье хочется обсудить такой важный параметр, как оптимизация скорости работы сайта на этапе разработки.

Поисковые системы потихоньку начинают давать всё больше значимости тому, как быстро работает сайт на смартфонах и ПК у пользователей.

В основном идею качества и здоровья сайта продвигает в массы Google.

Web Vitals — это именно его инициатива. Подробно в WV я углубляться не буду, есть куча статей на эту тему, кому интересно позалипать на технические термины — добро пожаловать на web.dev.

Яндекс по-прежнему отдаёт наибольший приоритет поведению пользователей, и именно оно зачастую решает нахождения сайта в топе результатов поиска.

Хотя в последнее время в Яндекс.Вебмастере появился блок с информацией о скорости сайта.

Как его вычисляет Яндекс, участвует ли это значение в формуле расчета ИКСа, и почему там именно 5 пунктов, никто пока не в курсе.

Факт остаётся фактом.

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

Готовь сани летом

На этапе разработки сайта мало кто вообще о чём-то задумывается, кроме того, как побыстрее сдать сайт заказчику и получить акты выполненных работ.

На моём опыте распределение примерно следующее: 1 из 50 заказчиков думает о скорости работы будущего сайта и полной внутренней оптимизации до запуска проекта и, как следствие, ставит нужные задачи программистам.

Даже не то что думает, а вообще подозревает, что такой параметр как скорость может играть какую-то роль.

Ну, как говорится, успех не для всех. Так что ловите несложную инструкцию и как можно скорее внедряйте это в свой сайт.

Ускоряем работу сайта самостоятельно

  • Включаем сжатие статических объектов.

Уверен, что малый процент читателей запускает или будет запускать свой сайт на выделенном сервере с самописной CMS, админкой и логикой.

Это далеко не дешёвое занятие, требующее определенных технических знаний, поэтому большинство разворачивает сайты на виртуальном сервере с платной или бесплатной CMS.

Обычно в ISP менеджере хостинг провайдера есть специальный раздел с настройками домена, где можно включить следующие опции.

Это самый простой и быстрый вариант требующий 0 знаний в области разработки. Кстати, рекомендую ставить уровень сжатия 6, чтобы сильно не нагружать CPU вашего сервера.

Включаем сжатие через файл. htaccess.

Тут возможно два варианта, если сервер поддерживает mod_deflate, то код будет такой:

<IfModule mod_deflate.c> AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE text/css AddOutputFilterByType DEFLATE text/javascript AddOutputFilterByType DEFLATE text/xml AddOutputFilterByType DEFLATE text/plain AddOutputFilterByType DEFLATE image/x-icon AddOutputFilterByType DEFLATE image/svg+xml AddOutputFilterByType DEFLATE application/rss+xml AddOutputFilterByType DEFLATE application/javascript AddOutputFilterByType DEFLATE application/x-javascript AddOutputFilterByType DEFLATE application/xml AddOutputFilterByType DEFLATE application/xhtml+xml AddOutputFilterByType DEFLATE application/x-font AddOutputFilterByType DEFLATE application/x-font-truetype AddOutputFilterByType DEFLATE application/x-font-ttf AddOutputFilterByType DEFLATE application/x-font-otf AddOutputFilterByType DEFLATE application/x-font-opentype AddOutputFilterByType DEFLATE application/vnd.ms-fontobject AddOutputFilterByType DEFLATE font/ttf AddOutputFilterByType DEFLATE font/otf AddOutputFilterByType DEFLATE font/opentype BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4\.0[678] no-gzip BrowserMatch \bMSIE !no-gzip !gzip-only-text/html </IfModule>

А если не поддерживает, то будем использовать mod_gzip:

<ifModule mod_gzip.c> mod_gzip_on Yes mod_gzip_dechunk Yes mod_gzip_item_include file \.(html?|txt|css|js|php|pl)$ mod_gzip_item_include mime ^application/x-javascript.* mod_gzip_item_include mime ^text/.* mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.* mod_gzip_item_exclude mime ^image/.* mod_gzip_item_include handler ^cgi-script$ </ifModule>

Чтобы проверить работает ли gzip-сжатие на вашем сайте, зайдите сюда www.giftofspeed.com/gzip-test/ и запустите тест.

  • Устранение CSS и JS, блокирующих отрисовку.

Многие думают, что залог зелёной зоны в PageSpeed Insights — это просто вес страницы. Типа, весит страница на сайте 50 мегабайт — плохо, весит 50 байт — жизнь удалась.

На самом деле всё не так. Общий вес документа напрямую не влияет на 100 баллов в тесте скорости. Вопрос в том, как быстро для пользователя будет отображен первый экран контента.

Поисковые системы хотят, чтобы пользователь как можно быстрее увидел контент сайта. Даже если там будут картинки по 20 мегабайт, это не играет никакой роли.

Так вот, некоторые CSS и JS могут серьёзно растягивать время до отображения контента страницы.

Тут возможны два варианта, в общем-то оба рабочие.

Оптимизации CSS и JS вручную на этапе разработки.

Все стили сайта размещаем сразу в теге Head без подключения через статические файлы.

Не используем внешние шрифты, типа Google Fonts. Всё это тормозит скорость отрисовки контента у конечных пользователей.

Если без каких-то внешних скриптов ваш сайт работать вообще не может, то все скрипты грузим асинхронно, пример:

<script async src="http://site.com/123.js"></script>

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

Все скрипты, которые работают корректно, объединяем и помещаем как можно ниже в коде сайта.

Подумайте, какие стили и скрипты можно загрузить позже, и реализуйте это.

Тут нам понадобятся атрибуты defer, async, тег script, и несколько часов работы.

Ускорить производительность сайта можно с помощью тега preload. Этот тег указывает, какие ресурсы понадобятся страницам сайта в ближайшие несколько секунд, и загружает их заранее, пример:

<link rel="preload" href="123.js" as="script"> <link rel="preload" href="style.css" as="style">

Не запихивайте в предзагрузку всё подряд, это только замедлит скорость работы сайта. Подумайте, какие скрипты и стили нужны пользователю, чтобы как можно быстрее увидеть первый экран страницы сайта.

Приоритеты загрузки в Google Chrome можете посмотреть в этой таблице docs.google.com/document/d/1bCDuq9H1ih9iNjgzyAL0gpwNFiEP4TZS-YLRp_RuMlc/

Для фоновой загрузки файлов с низким приоритетом, которые могут потребоваться на других страницах сайта, используйте тег prefetch, пример:

<link rel="prefetch" href="123.js" as="script"> <link rel="prefetch" href="style.css" as="style">

Если нужно заранее установить соединение с внешним сервисом, например Google Fonts, то используйте тег preconnect, пример:

<link rel= "preconnect" href="https://fonts.googleapis.com" />​

Не нужно злоупотреблять этим тегом, браузер пользователя может его проигнорировать, если уже установлено много соединений или недостаточно памяти на устройстве. Оптимально использовать предварительное подключение до 6 внешних ресурсов. Чем меньше, тем лучше.

Для ускорения резолвинга DNS и экономии до 120 мс используйте тег dns-prefetch, пример:

<link rel= "dns-prefetch" href="https://fonts.googleapis.com" />​

Этот тег ускоряет начальное соединение с внешним сайтом и работает с старыми браузерами.

Обязательно добавляйте параметр display swap, даже если шрифты загружаются из внешнего источника, пример:

@font-face { font-family: "Open Sans Regular"; src: url("..."); font-display: swap; } или https://fonts.googleapis.com/css?family=Creepster&font-display=swap

Лучше всего скачать шрифты и подгружать их с своего сервера, всё это увеличивает скорость работы вашего сайта.

  • Минифицируйте CSS, JS и HTML.

Если вы заказчик, то тут многое зависит от прямоты рук разработчиков, их уровня пофигизма, и конкретики в техническом задании.

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

Проверить это очень просто. Нам понадобится браузер Google Chrome.

Давайте проверим, какой объём кода не используется на сайте vc.ru, но его загружает ваш браузер.

Кликаем правой кнопкой мыши на произвольное место страницы, нажимаем «Посмотреть код». Далее выбираем вкладку «Console», чуть ниже около слова «Console» видим три точки столбиком и нажимаем на них, в выпадающем меню нажимаем «Coverage».

В этой таблице нас интересуют файлы, у которых значение «Unused bytes» (Неиспользованные байты) просто зашкаливающее.

У некоторых файлов «Unused bytes» = 100%.

Берём конкретные файлы и разбираемся, как их можно урезать и сократить или вообще отказаться от их использования, возможно ли это, какие последствия, что может поломаться.

Более подробно про инструмент Coverage можно прочитать тут developers.google.com/web/tools/chrome-devtools/coverage

Минифицируем CSS и JS вручную.

Заходим сюда minifier.org, загружаем CSS или JS файлы, жмём кнопку, всё готово.

Обязательно проверяйте работоспособность нового кода с отключенным кешированием на ПК и смартфоне, а лучше всего на копии сайта на служебном домене.

Минифицируем и объединяем CSS и JS через плагины.

Есть множество плагинов для популярных CMS и их вполне можно использовать. Работают сносно. Мусор в коде особо не генерируют и выполняют свои задачи.

Если плагин рушит работу всего сайта, то просто попробуйте другой. Такое бывает.

Годные плагины для Wordpress: WP Super Cache, W3 Total Cache, WP Fastest Cache, Hummingbird, LiteSpeed Cache, WP Rocket, Autoptimize.

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

  • Подключите CDN.

CDN — content delivery network или сеть доставки контента. Если простыми словами, то это сетка серверов по всему миру с специальным ПО, задача которого отдавать статический контент вашего сайта с самого ближайшего к пользователю сервера.

Пример: хостинг вашего сайта физически расположен в Москве, но сайтом пользуется множество пользователей, от Калининграда до Владивостока.

Соответственно, при подключенном провайдере CDN сайт будет молниеносно загружаться у пользователей из Питера с сервера в Питере, а у пользователей из Новосибирска с сервера в Новосибирске, а не с Москвы.

При отключенном CDN контент сайта всегда будет загружаться с сервера в Москве, что замедляет скорость загрузки у пользователей, которые живут за МКАДом.

Для зарубежных проектов лучше всего использовать Amazon CloudFront, Cloud CDN от Google, Windows Azure CDN и конечно же CloudFlare. Это одни из топовых поставщиков CDN.

Для проектов, которые ориентированы только на рунет, лучше всего использовать локальных поставщиков CDN, например G Core Labs, CDN Video, Akamai, Selectel, Leaseweb.

Немного дополнительных плюсов CDN.

  • Устойчивость к DDoS за счет распределённой архитектуры и высокой мощности серверов.
  • Уменьшение нагрузки на сервер хостинг-провайдера, на котором расположен сайт.
  • При кратковременной недоступности сервера хостинг-провайдера сайт будет доступен, так как копия страниц сайта расположена на CDN серверах.
  • Значительное улучшение SEO-метрик сайта в отдалённых регионах.

Стоимость CDN сервисов обычно зависит от объёмов трафика. Чем больше трафика собирает сайт, тем дороже будет стоить CDN.

Фиксированные тарифы как правило отсутствуют. Более подробный список провайдеров под свои задачи можно найти тут cdnfinder.com.

  • Настройте Lazy loading и сожмите все изображения.

Lazy loading — это асинхронная загрузка контента до того момента, когда это необходимо.

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

В некоторых CMS Lazy loading настроен по умолчанию, например в последнем обновлении Wordpress. Можно настроить плагинами, проблем не возникает. Если CMS самописная — всё индивидуально, нужно ставить задачу разработчику.

Используйте современный формат изображений webp.

Это формат сжатия изображений от Google. Разработан в 2010 году. Дело в том, что изображения в формате webp весят в несколько раз меньше, чем изображения других форматов. Иногда в несколько сотен раз меньше.

Всё это влияет на загрузку сайта и скорость работы. Этот формат поддерживается браузерами Google Chrome с версии 9, Opera с версии 11.10, Firefox с версии 65, Microsoft Edge.

Смартфоны на Android спокойно читают формат webp с версии 4.0. Поддержка webp в Safari на Mac и iOS будет доступна с версии 14, выход которой намечен на сентябрь 2020 года.

На данный момент поддержки webp в Safari нет и пользователям этих устройств нужно отдавать jpg или png изображения, а всем остальным webp.

Чтобы подружить большинство популярных браузеров с форматом webp нужно подключать библиотеки libwebpjs/libwebpas на JS и AS соответственно.

Внедрив webp в свой сайт на этапе разработки вы получите большое конкурентное преимущество. В рунете почти никто кроме гигантов этим не заморачивается.

Если вы категорически не можете использовать формат webp в своём проекте, то максимально сожмите изображения без изменения формата.

Делать это можно своим софтом, готовыми плагинами, или вообще вручную.

Годные плагины как правило стоят денег, да ещё и по подписке. Для малых объемов будет достаточно этого сервиса compressor.io.

  • Настройте длительное время кеширования.

mod_expires — специальный модуль сервера Apache, позволяющий задать время, на которое будут кешироваться статические ресурсы в браузере пользователя.

Кэшируем всё, CSS, JS, шрифты, изображения, пример кода для файла. htaccess:

<IfModule mod_expires.c> ExpiresActive On AddType image/webp .webp # Images ExpiresByType image/jpeg "access plus 1 year" ExpiresByType image/gif "access plus 1 year" ExpiresByType image/png "access plus 1 year" ExpiresByType image/webp "access plus 1 year" ExpiresByType image/svg+xml "access plus 1 year" ExpiresByType image/x-icon "access plus 1 year" # Video ExpiresByType video/mp4 "access plus 1 year" ExpiresByType video/mpeg "access plus 1 year" AddType application/vnd.ms-fontobject .eot AddType application/x-font-ttf .ttf AddType application/x-font-opentype .otf AddType application/x-font-woff .woff AddType application/x-font-woff2 .woff2 AddType image/svg+xml .svg # CSS, JavaScript ExpiresByType application/vnd.ms-fontobject "access plus 1 year" ExpiresByType application/x-font-ttf "access plus 1 year" ExpiresByType application/x-font-opentype "access plus 1 year" ExpiresByType image/svg+xml "access plus 1 year" ExpiresByType text/css "access plus 1 year" ExpiresByType application/x-font-woff "access plus 1 year" ExpiresByType application/x-font-woff2 "access plus 1 year" ExpiresByType text/javascript "access plus 1 year" ExpiresByType application/javascript "access plus 1 year" # Others ExpiresByType application/pdf "access plus 1 year" ExpiresByType application/x-shockwave-flash "access plus 1 year" </IfModule>

Кешировать счетчики аналитики и пиксели соц. сетей не получится.

Некоторые умельцы научились это делать с Google Analytcis на стороне пользователей, но я вам этого не рекомендую.

access plus 1 year — означает, что элемент будет кеширован на стороне пользователя сроком на 1 год после первого посещения сайта. При повторном посещении сайт откроется мгновенно, так как большинство ресурсов уже будет в кеше браузера пользователя.

  • Заблокируйте доступ к сайту для роботов и парсеров.

Существует огромное количество сервисов для SEO/PPC аналитики и не только.

Например, Semrush, Ahrefs, web.archive.org, pr-cy.ru, WebSpy и множество других.

Они парсят и агрегируют огромное количество сайтов и ежедневно создают нагрузку на ваш сайт. Это большая проблема в интернет-магазинах на сотни тысяч и миллионы SKU, может возникать повышенная нагрузка на БД.

Для отсечения самых популярных ботов на уровне сервера можно настроить специальные правила.

mod_setenvif — модуль сервера Apache, с помощью которого мы можем настроить полный запрет доступа к сайту для любых роботов и парсеров.

Пример кода для. htaccess:

<IfModule mod_setenvif.c> <IfModule mod_headers.c> SetEnvIfNoCase User-Agent "^LinksMasterRoBot" bot SetEnvIfNoCase User-Agent "^LinkStats" bot SetEnvIfNoCase User-Agent "^CNCat" bot SetEnvIfNoCase User-Agent "^linkdexbot" bot SetEnvIfNoCase User-Agent "^meanpathbot" bot SetEnvIfNoCase User-Agent "^NetSeer" bot SetEnvIfNoCase User-Agent "^statdom.ru" bot SetEnvIfNoCase User-Agent "^StatOnlineRuBot" bot SetEnvIfNoCase User-Agent "^WebArtexBot" bot SetEnvIfNoCase User-Agent "^Web-Monitoring" bot SetEnvIfNoCase User-Agent "^Runet-Research-Crawler" bot SetEnvIfNoCase User-Agent "^pr-cy.ru" bot SetEnvIfNoCase User-Agent "^SeopultContentAnalyzer" bot SetEnvIfNoCase User-Agent "^Seopult" bot SetEnvIfNoCase User-Agent "^spbot" bot SetEnvIfNoCase User-Agent "^rogerbot" bot SetEnvIfNoCase User-Agent "^sitebot" bot SetEnvIfNoCase User-Agent "^dotbot" bot SetEnvIfNoCase User-Agent "^Linux" bot SetEnvIfNoCase User-Agent "^SemrushBot" bot SetEnvIfNoCase User-Agent "^SemrushBot-SA" bot SetEnvIfNoCase User-Agent "^SemrushBot-BA" bot SetEnvIfNoCase User-Agent "^SemrushBot-SI" bot SetEnvIfNoCase User-Agent "^SemrushBot-SWA" bot SetEnvIfNoCase User-Agent "^SemrushBot-CT" bot SetEnvIfNoCase User-Agent "^SemrushBot-BM" bot SetEnvIfNoCase User-Agent "^SemrushBot-SEOAB" bot SetEnvIfNoCase User-Agent "^MJ12bot" bot SetEnvIfNoCase User-Agent "^Vivaldi" bot SetEnvIfNoCase User-Agent "^AhrefsBot" bot SetEnvIfNoCase User-Agent "^ArchiveBot" bot SetEnvIfNoCase User-Agent "^archive.org_bot" bot SetEnvIfNoCase User-Agent "^ia_archiver" bot SetEnvIfNoCase User-Agent "^ia_archiver-web.archive.org" bot SetEnvIfNoCase User-Agent "AhrefsSiteAudit" bot SetEnvIfNoCase User-Agent "^PaleMoon" bot SetEnvIfNoCase User-Agent "^Pale Moon" bot SetEnvIfNoCase User-Agent "Sovetnik" bot SetEnvIfNoCase User-Agent "sovetnik" bot SetEnvIfNoCase User-Agent "80legs" bot SetEnvIfNoCase User-Agent "360Spider" bot SetEnvIfNoCase User-Agent "^8484 Boston Project" bot SetEnvIfNoCase User-Agent "Aboundex" bot SetEnvIfNoCase User-Agent "^Alexibot" bot SetEnvIfNoCase User-Agent "^asterias" bot SetEnvIfNoCase User-Agent "^attach" bot SetEnvIfNoCase User-Agent "^AIBOT" bot SetEnvIfNoCase User-Agent "^Accelerator" bot SetEnvIfNoCase User-Agent "^Ants" bot SetEnvIfNoCase User-Agent "^Ask Jeeves" bot SetEnvIfNoCase User-Agent "^Atomic_Email_Hunter" bot SetEnvIfNoCase User-Agent "^atSpider" bot SetEnvIfNoCase User-Agent "^autoemailspider" bot SetEnvIfNoCase User-Agent "archive.org_bot" bot SetEnvIfNoCase User-Agent "^a.pr-cy.ru" bot SetEnvIfNoCase User-Agent "^BackDoorBot" bot SetEnvIfNoCase User-Agent "^BackWeb" bot SetEnvIfNoCase User-Agent "Bandit" bot SetEnvIfNoCase User-Agent "^BatchFTP" bot SetEnvIfNoCase User-Agent "^Bigfoot" bot SetEnvIfNoCase User-Agent "^Black.Hole" bot SetEnvIfNoCase User-Agent "^BlackWidow" bot SetEnvIfNoCase User-Agent "^BlowFish" bot SetEnvIfNoCase User-Agent "^BotALot" bot SetEnvIfNoCase User-Agent "Buddy" bot SetEnvIfNoCase User-Agent "^BuiltBotTough" bot SetEnvIfNoCase User-Agent "^Bullseye" bot SetEnvIfNoCase User-Agent "^BunnySlippers" bot SetEnvIfNoCase User-Agent "^Baiduspider" bot SetEnvIfNoCase User-Agent "^Bot\ mailto:[email protected]" bot SetEnvIfNoCase User-Agent "^Buddy" bot SetEnvIfNoCase User-Agent "^bwh3_user_agent" bot SetEnvIfNoCase User-Agent "BLEXBot" bot SetEnvIfNoCase User-Agent "^Cegbfeieh" bot SetEnvIfNoCase User-Agent "^CheeseBot" bot SetEnvIfNoCase User-Agent "^CherryPicker" bot SetEnvIfNoCase User-Agent "^ChinaClaw" bot SetEnvIfNoCase User-Agent "Collector" bot SetEnvIfNoCase User-Agent "Copier" bot SetEnvIfNoCase User-Agent "^CopyRightCheck" bot SetEnvIfNoCase User-Agent "^cosmos" bot SetEnvIfNoCase User-Agent "^Crescent" bot SetEnvIfNoCase User-Agent "^Custo" bot SetEnvIfNoCase User-Agent "^Cogentbot" bot SetEnvIfNoCase User-Agent "^China" bot SetEnvIfNoCase User-Agent "^ContactBot" bot SetEnvIfNoCase User-Agent "^ContentSmartz" bot SetEnvIfNoCase User-Agent "^CCBot" bot SetEnvIfNoCase User-Agent "^Cluuz" bot SetEnvIfNoCase User-Agent "^DISCo" bot SetEnvIfNoCase User-Agent "^DIIbot" bot SetEnvIfNoCase User-Agent "^DittoSpyder" bot SetEnvIfNoCase User-Agent "^Download\ Demon" bot SetEnvIfNoCase User-Agent "^Download\ Devil" bot SetEnvIfNoCase User-Agent "^Download\ Wonder" bot SetEnvIfNoCase User-Agent "^dragonfly" bot SetEnvIfNoCase User-Agent "^Drip" bot SetEnvIfNoCase User-Agent "^DataCha0s" bot SetEnvIfNoCase User-Agent "^DBrowse" bot SetEnvIfNoCase User-Agent "^Demo Bot" bot SetEnvIfNoCase User-Agent "^Dolphin" bot SetEnvIfNoCase User-Agent "Download" bot SetEnvIfNoCase User-Agent "^DSurf15" bot SetEnvIfNoCase User-Agent "^eCatch" bot SetEnvIfNoCase User-Agent "^EasyDL" bot SetEnvIfNoCase User-Agent "^ebingbong" bot SetEnvIfNoCase User-Agent "^EirGrabber" bot SetEnvIfNoCase User-Agent "^EmailCollector" bot SetEnvIfNoCase User-Agent "^EmailSiphon" bot SetEnvIfNoCase User-Agent "^EmailWolf" bot SetEnvIfNoCase User-Agent "^EroCrawler" bot SetEnvIfNoCase User-Agent "^Exabot" bot SetEnvIfNoCase User-Agent "^Express\ WebPictures" bot SetEnvIfNoCase User-Agent "Extractor" bot SetEnvIfNoCase User-Agent "^EyeNetIE" bot SetEnvIfNoCase User-Agent "^EBrowse" bot SetEnvIfNoCase User-Agent "^Educate Search VxB" bot SetEnvIfNoCase User-Agent "EmailSpider" bot SetEnvIfNoCase User-Agent "^ESurf15" bot SetEnvIfNoCase User-Agent "ExtractorPro" bot SetEnvIfNoCase User-Agent "^Foobot" bot SetEnvIfNoCase User-Agent "^focusbot" bot SetEnvIfNoCase User-Agent "^flunky" bot SetEnvIfNoCase User-Agent "^FrontPage" bot SetEnvIfNoCase User-Agent "^FileHound" bot SetEnvIfNoCase User-Agent "^FlashGet" bot SetEnvIfNoCase User-Agent "^Flexum" bot SetEnvIfNoCase User-Agent "^Franklin Locator" bot SetEnvIfNoCase User-Agent "^FSurf15" bot SetEnvIfNoCase User-Agent "^Full Web Bot" bot SetEnvIfNoCase User-Agent "^Go-Ahead-Got-It" bot SetEnvIfNoCase User-Agent "^gotit" bot SetEnvIfNoCase User-Agent "^GrabNet" bot SetEnvIfNoCase User-Agent "^Grafula" bot SetEnvIfNoCase User-Agent "^GetRight" bot SetEnvIfNoCase User-Agent "^Gets" bot SetEnvIfNoCase User-Agent "^GetWeb!" bot SetEnvIfNoCase User-Agent "^Gigabot" bot SetEnvIfNoCase User-Agent "^Go!Zilla" bot SetEnvIfNoCase User-Agent "^GoZilla" bot SetEnvIfNoCase User-Agent "^Grab.*Site" bot SetEnvIfNoCase User-Agent "^Grabber" bot SetEnvIfNoCase User-Agent "^grub-client" bot SetEnvIfNoCase User-Agent "^gsa-crawler" bot SetEnvIfNoCase User-Agent "^Guestbook Auto Submitter" bot SetEnvIfNoCase User-Agent "^Gulliver" bot SetEnvIfNoCase User-Agent "^Guzzle" bot SetEnvIfNoCase User-Agent "^GuzzleHttp" bot SetEnvIfNoCase User-Agent "^Harvest" bot SetEnvIfNoCase User-Agent "^hloader" bot SetEnvIfNoCase User-Agent "^HMView" bot SetEnvIfNoCase User-Agent "^HTTrack" bot SetEnvIfNoCase User-Agent "^humanlinks" bot SetEnvIfNoCase User-Agent "HubSpot" bot SetEnvIfNoCase User-Agent "^IlseBot" bot SetEnvIfNoCase User-Agent "^Image\ Stripper" bot SetEnvIfNoCase User-Agent "^Image\ Sucker" bot SetEnvIfNoCase User-Agent "Indy\ Library" bot SetEnvIfNoCase User-Agent "^InfoNavibot" bot SetEnvIfNoCase User-Agent "^InfoTekies" bot SetEnvIfNoCase User-Agent "^Intelliseek" bot SetEnvIfNoCase User-Agent "^InterGET" bot SetEnvIfNoCase User-Agent "^Internet\ Ninja" bot SetEnvIfNoCase User-Agent "^Iria" bot SetEnvIfNoCase User-Agent "^IBrowse" bot SetEnvIfNoCase User-Agent "^Industry Program" bot SetEnvIfNoCase User-Agent "^inktomi\.com" bot SetEnvIfNoCase User-Agent "^Internet\ Ninja"" bot SetEnvIfNoCase User-Agent "^ISC Systems iRc Search" bot SetEnvIfNoCase User-Agent "^IUPUI Research" bot SetEnvIfNoCase User-Agent "^ia_archiver" bot SetEnvIfNoCase User-Agent "^Jakarta" bot SetEnvIfNoCase User-Agent "^JennyBot" bot SetEnvIfNoCase User-Agent "^JetCar" bot SetEnvIfNoCase User-Agent "^JOC" bot SetEnvIfNoCase User-Agent "^JustView" bot SetEnvIfNoCase User-Agent "^Jyxobot" bot SetEnvIfNoCase User-Agent "^Java" bot SetEnvIfNoCase User-Agent "^jetcar" bot SetEnvIfNoCase User-Agent "^Kenjin.Spider" bot SetEnvIfNoCase User-Agent "^Keyword.Density" bot SetEnvIfNoCase User-Agent "^larbin" bot SetEnvIfNoCase User-Agent "^LexiBot" bot SetEnvIfNoCase User-Agent "^lftp" bot SetEnvIfNoCase User-Agent "^libWeb/clsHTTP" bot SetEnvIfNoCase User-Agent "^likse" bot SetEnvIfNoCase User-Agent "^LinkextractorPro" bot SetEnvIfNoCase User-Agent "^LinkScan/8.1a.Unix" bot SetEnvIfNoCase User-Agent "^LNSpiderguy" bot SetEnvIfNoCase User-Agent "^LinkWalker" bot SetEnvIfNoCase User-Agent "^lwp-trivial" bot SetEnvIfNoCase User-Agent "^LWP::Simple" bot SetEnvIfNoCase User-Agent "^LARBIN-EXPERIMENTAL" bot SetEnvIfNoCase User-Agent "^leech" bot SetEnvIfNoCase User-Agent "^LeechFTP" bot SetEnvIfNoCase User-Agent "^LetsCrawl.com" bot SetEnvIfNoCase User-Agent "^libwww-perl" bot SetEnvIfNoCase User-Agent "^Lincoln State Web Browser" bot SetEnvIfNoCase User-Agent "^LMQueueBot" bot SetEnvIfNoCase User-Agent "^LinkpadBot" bot SetEnvIfNoCase User-Agent "^Magnet" bot SetEnvIfNoCase User-Agent "^MegaIndex.ru" bot SetEnvIfNoCase User-Agent "^Mag-Net" bot SetEnvIfNoCase User-Agent "^MarkWatch" bot SetEnvIfNoCase User-Agent "^Mass\ Downloader" bot SetEnvIfNoCase User-Agent "^Mata.Hari" bot SetEnvIfNoCase User-Agent "^Memo" bot SetEnvIfNoCase User-Agent "^Microsoft.URL" bot SetEnvIfNoCase User-Agent "^Microsoft URL Control" bot SetEnvIfNoCase User-Agent "^MIDown\ tool" bot SetEnvIfNoCase User-Agent "^MIIxpc" bot SetEnvIfNoCase User-Agent "^Mirror" bot SetEnvIfNoCase User-Agent "^Missigua\ Locator" bot SetEnvIfNoCase User-Agent "^Mister\ PiX" bot SetEnvIfNoCase User-Agent "^moget" bot SetEnvIfNoCase User-Agent "^Mac Finder" bot SetEnvIfNoCase User-Agent "^MFC Foundation Class Library" bot SetEnvIfNoCase User-Agent "^Missauga Loca" bot SetEnvIfNoCase User-Agent "^Missouri College Browse" bot SetEnvIfNoCase User-Agent "^Mizzu Labs" bot SetEnvIfNoCase User-Agent "^Mo College" bot SetEnvIfNoCase User-Agent "^MVAClient" bot SetEnvIfNoCase User-Agent "^MJ12bot" bot SetEnvIfNoCase User-Agent "^mfibot" bot SetEnvIfNoCase User-Agent "^NAMEPROTECT" bot SetEnvIfNoCase User-Agent "^Navroad" bot SetEnvIfNoCase User-Agent "^NearSite" bot SetEnvIfNoCase User-Agent "^NetAnts" bot SetEnvIfNoCase User-Agent "^Netcraft" bot SetEnvIfNoCase User-Agent "^NetMechanic" bot SetEnvIfNoCase User-Agent "^NetSpider" bot SetEnvIfNoCase User-Agent "^Net\ Vampire" bot SetEnvIfNoCase User-Agent "^NetZIP" bot SetEnvIfNoCase User-Agent "^NextGenSearchBot" bot SetEnvIfNoCase User-Agent "^NG" bot SetEnvIfNoCase User-Agent "^NICErsPRO" bot SetEnvIfNoCase User-Agent "^niki-bot" bot SetEnvIfNoCase User-Agent "^NimbleCrawler" bot SetEnvIfNoCase User-Agent "^Ninja" bot SetEnvIfNoCase User-Agent "^NPbot" bot SetEnvIfNoCase User-Agent "^nutch-1.4" bot SetEnvIfNoCase User-Agent "^NameOfAgent (CMS Spider)" bot SetEnvIfNoCase User-Agent "^NASA Search" bot SetEnvIfNoCase User-Agent "^Net\ Reaper" bot SetEnvIfNoCase User-Agent "^Ninja" bot SetEnvIfNoCase User-Agent "^Nsauditor" bot SetEnvIfNoCase User-Agent "^NetLyzer" bot SetEnvIfNoCase User-Agent "^Octopus" bot SetEnvIfNoCase User-Agent "^Offline\ Explorer" bot SetEnvIfNoCase User-Agent "^Offline\ Navigator" bot SetEnvIfNoCase User-Agent "^Offline" bot SetEnvIfNoCase User-Agent "^Openfind" bot SetEnvIfNoCase User-Agent "^OutfoxBot" bot SetEnvIfNoCase User-Agent "^PageGrabber" bot SetEnvIfNoCase User-Agent "^Papa\ Foto" bot SetEnvIfNoCase User-Agent "^pavuk" bot SetEnvIfNoCase User-Agent "^pcBrowser" bot SetEnvIfNoCase User-Agent "^PHP\ version\ tracker" bot SetEnvIfNoCase User-Agent "^Pockey" bot SetEnvIfNoCase User-Agent "^ProPowerBot/2.14" bot SetEnvIfNoCase User-Agent "^ProWebWalker" bot SetEnvIfNoCase User-Agent "^psbot" bot SetEnvIfNoCase User-Agent "^Pump" bot SetEnvIfNoCase User-Agent "^ParseMX" bot SetEnvIfNoCase User-Agent "^Page.*Saver" bot SetEnvIfNoCase User-Agent "^PBrowse" bot SetEnvIfNoCase User-Agent "^PEval" bot SetEnvIfNoCase User-Agent "^Pita" bot SetEnvIfNoCase User-Agent "^Poirot" bot SetEnvIfNoCase User-Agent "^Port Huron Labs" bot SetEnvIfNoCase User-Agent "^Production Bot" bot SetEnvIfNoCase User-Agent "^Program Shareware" bot SetEnvIfNoCase User-Agent "^PSurf15" bot SetEnvIfNoCase User-Agent "^psycheclone" bot SetEnvIfNoCase User-Agent "^QueryN.Metasearch" bot SetEnvIfNoCase User-Agent "^RealDownload" bot SetEnvIfNoCase User-Agent "Reaper" bot SetEnvIfNoCase User-Agent "Recorder" bot SetEnvIfNoCase User-Agent "^ReGet" bot SetEnvIfNoCase User-Agent "^RepoMonkey" bot SetEnvIfNoCase User-Agent "^RMA" bot SetEnvIfNoCase User-Agent "^RookeeBot" bot SetEnvIfNoCase User-Agent "^Readability" bot SetEnvIfNoCase User-Agent "^Reaper" bot SetEnvIfNoCase User-Agent "^RSurf15" bot SetEnvIfNoCase User-Agent "Siphon" bot SetEnvIfNoCase User-Agent "^SiteSnagger" bot SetEnvIfNoCase User-Agent "^SlySearch" bot SetEnvIfNoCase User-Agent "^SmartDownload" bot SetEnvIfNoCase User-Agent "^Snake" bot SetEnvIfNoCase User-Agent "^Snapbot" bot SetEnvIfNoCase User-Agent "^Snoopy" bot SetEnvIfNoCase User-Agent "^sogou" bot SetEnvIfNoCase User-Agent "^SpaceBison" bot SetEnvIfNoCase User-Agent "^SpankBot" bot SetEnvIfNoCase User-Agent "^spanner" bot SetEnvIfNoCase User-Agent "^Sqworm" bot SetEnvIfNoCase User-Agent "Stripper" bot SetEnvIfNoCase User-Agent "Sucker" bot SetEnvIfNoCase User-Agent "^SuperBot" bot SetEnvIfNoCase User-Agent "^SuperHTTP" bot SetEnvIfNoCase User-Agent "^Surfbot" bot SetEnvIfNoCase User-Agent "^suzuran" bot SetEnvIfNoCase User-Agent "^Szukacz/1.4" bot SetEnvIfNoCase User-Agent "^SeznamBot" bot SetEnvIfNoCase User-Agent "^Site-Shot" bot SetEnvIfNoCase User-Agent "^Slackbot-LinkExpanding" bot SetEnvIfNoCase User-Agent "^Scrapy" bot SetEnvIfNoCase User-Agent "^Spider/Bot" bot SetEnvIfNoCase User-Agent "^Scooter" bot SetEnvIfNoCase User-Agent "^searchbot [email protected]" bot SetEnvIfNoCase User-Agent "^SEO search Crawler" bot SetEnvIfNoCase User-Agent "^SEOsearch" bot SetEnvIfNoCase User-Agent "^ShablastBot" bot SetEnvIfNoCase User-Agent "^Snagger" bot SetEnvIfNoCase User-Agent "^snap.com beta crawler" bot SetEnvIfNoCase User-Agent "^sogou develop spider" bot SetEnvIfNoCase User-Agent "^Sogou Orion spider" bot SetEnvIfNoCase User-Agent "^sogou spider" bot SetEnvIfNoCase User-Agent "^Sogou web spider" bot SetEnvIfNoCase User-Agent "^sohu agent" bot SetEnvIfNoCase User-Agent "^SSurf15" bot SetEnvIfNoCase User-Agent "^SafeSearch_microdata_crawler_" bot SetEnvIfNoCase User-Agent "^SafeDNSBot" bot SetEnvIfNoCase User-Agent "^SafeDNSBot_" bot SetEnvIfNoCase User-Agent "^tAkeOut" bot SetEnvIfNoCase User-Agent "^Teleport" bot SetEnvIfNoCase User-Agent "^Telesoft" bot SetEnvIfNoCase User-Agent "^TurnitinBot/1.5" bot SetEnvIfNoCase User-Agent "^The.Intraformant" bot SetEnvIfNoCase User-Agent "^TheNomad" bot SetEnvIfNoCase User-Agent "^TightTwatBot" bot SetEnvIfNoCase User-Agent "^Titan" bot SetEnvIfNoCase User-Agent "^True_bot" bot SetEnvIfNoCase User-Agent "^turingos" bot SetEnvIfNoCase User-Agent "^TurnitinBot" bot SetEnvIfNoCase User-Agent "^Teleport\ Pro" bot SetEnvIfNoCase User-Agent "^Triton" bot SetEnvIfNoCase User-Agent "^TSurf15" bot SetEnvIfNoCase User-Agent "^Twiceler" bot SetEnvIfNoCase User-Agent "^URLy.Warning" bot SetEnvIfNoCase User-Agent "^Under the Rainbow" bot SetEnvIfNoCase User-Agent "^Yo-yo" bot SetEnvIfNoCase User-Agent "^Yanga" bot SetEnvIfNoCase User-Agent "^Vacuum" bot SetEnvIfNoCase User-Agent "^VCI" bot SetEnvIfNoCase User-Agent "^VoidEYE" bot SetEnvIfNoCase User-Agent "^Virusdie_crawler" bot SetEnvIfNoCase User-Agent "^VadixBot" bot SetEnvIfNoCase User-Agent "^voyager" bot SetEnvIfNoCase User-Agent "^Web\ Image\ Collector" bot SetEnvIfNoCase User-Agent "^Web\ Sucker" bot SetEnvIfNoCase User-Agent "^WebAuto" bot SetEnvIfNoCase User-Agent "^WebBandit" bot SetEnvIfNoCase User-Agent "^Webclipping.com" bot SetEnvIfNoCase User-Agent "^WebCopier" bot SetEnvIfNoCase User-Agent "^WebEMailExtrac.*" bot SetEnvIfNoCase User-Agent "^WebEnhancer" bot SetEnvIfNoCase User-Agent "^WebFetch" bot SetEnvIfNoCase User-Agent "^WebGo\ IS" bot SetEnvIfNoCase User-Agent "^Web.Image.Collector" bot SetEnvIfNoCase User-Agent "^WebLeacher" bot SetEnvIfNoCase User-Agent "^WebmasterWorldForumBot" bot SetEnvIfNoCase User-Agent "^WebReaper" bot SetEnvIfNoCase User-Agent "^WebSauger" bot SetEnvIfNoCase User-Agent "^Website\ eXtractor" bot SetEnvIfNoCase User-Agent "^Website\ Quester" bot SetEnvIfNoCase User-Agent "^Webster" bot SetEnvIfNoCase User-Agent "^WebStripper" bot SetEnvIfNoCase User-Agent "^WebWhacker" bot SetEnvIfNoCase User-Agent "^WebZIP" bot SetEnvIfNoCase User-Agent "Whacker" bot SetEnvIfNoCase User-Agent "^Widow" bot SetEnvIfNoCase User-Agent "^WISENutbot" bot SetEnvIfNoCase User-Agent "^WWWOFFLE" bot SetEnvIfNoCase User-Agent "^WWW-Collector-E" bot SetEnvIfNoCase User-Agent "^W3C-checklink" bot SetEnvIfNoCase User-Agent "^Weazel" bot SetEnvIfNoCase User-Agent "^Web.*Spy" bot SetEnvIfNoCase User-Agent "^WebAlta" bot SetEnvIfNoCase User-Agent "^WebCapture" bot SetEnvIfNoCase User-Agent "^WebMirror" bot SetEnvIfNoCase User-Agent "^WebRecorder" bot SetEnvIfNoCase User-Agent "^WebSpy" bot SetEnvIfNoCase User-Agent "^WebVulnCrawl.unknown" bot SetEnvIfNoCase User-Agent "^Wells Search" bot SetEnvIfNoCase User-Agent "^WEP Search" bot SetEnvIfNoCase User-Agent "^www\.asona\.org" bot SetEnvIfNoCase User-Agent "^Wget" bot SetEnvIfNoCase User-Agent "^Xaldon" bot SetEnvIfNoCase User-Agent "^Xenu" bot SetEnvIfNoCase User-Agent "^Xaldon\ WebSpider" bot SetEnvIfNoCase User-Agent "^Zeus" bot SetEnvIfNoCase User-Agent "ZmEu" bot SetEnvIfNoCase User-Agent "^Zyborg" bot SetEnvIfNoCase User-Agent "^_CommonCrawler_Node_" bot SetEnvIfNoCase User-Agent "^_Cliqzbot" bot SetEnvIfNoCase User-Agent "^_Baiduspider" bot SetEnvIfNoCase User-Agent "^_Exabot" bot SetEnvIfNoCase User-Agent "^_GrapeshotCrawler" bot SetEnvIfNoCase User-Agent "^_Gluten_Free_Crawler" bot SetEnvIfNoCase User-Agent "^_DeuSu" bot SetEnvIfNoCase User-Agent "^_Dataprovider" bot SetEnvIfNoCase User-Agent "^_DuckDuckGo-Favicons-Bot" bot SetEnvIfNoCase User-Agent "^_SeznamBot" bot SetEnvIfNoCase User-Agent "^_007ac9_Crawler" bot SetEnvIfNoCase User-Agent "^_wmtips" bot SetEnvIfNoCase User-Agent "^rv" bot <Limit GET POST HEAD> Order Allow,Deny Allow from all Deny from env=bot </Limit> </IfModule> </IfModule>

Что будет, если робот "AhrefsBot" попробует зайти на сайт? Он получит в ответ ошибку 403 — доступ запрещён, и не сможет загрузить никакой контент сайта.

Важная особенность. При блокировке доступа роботам от популярных сервисов вы и ваши конкуренты не смогут получить никакой аналитики по вашему сайту, у систем просто не будет никаких данных.

Если ваша работа завязана на аналитику в Semrush, Ahrefs, Similarweb, и прочих сервисах, то настройку подобной блокировки нужно делать внимательно.

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

Вместо заключения

Даже если вы внедрите хоть что-нибудь из текста выше — ваш сайт начнёт работать быстрее.

Думайте о скорости работы сайта на этапе разработки. Это влияет на SEO и конверсии, а в конечном итоге на деньги.

Полезные сервисы и плагины для оценки скорости работы сайта:

  • developers.google.com/speed/pagespeed/insights/
  • gtmetrix.com
  • googlechrome.github.io/lighthouse/viewer/
  • web.dev/measure/
  • chrome.google.com/webstore/detail/web-vitals/ahfhijdlegdabablpippeagghigmibma
0
39 комментариев
Написать комментарий...
Валерий Алексеев

Перед минификацией CSS ещё можно прогнать его через Critical, чтобы разделить файл на две части: то, что нужно для отображения верхней части сайта обязательно, и всё остальное. Первый файл кинуть в HEAD, а второй уже в самом низу.

Ответить
Развернуть ветку
Алексей из LOADING.express

Что делать с внешними скриптами - откладывать их по времени от 100мс до 5000мс. Это всегда помогает разгрузить основной поток.
Рассказывали про это подробно на YouTube, можете найти поиском «что делать с внешними скриптами».

Ответить
Развернуть ветку
Василий Туркин

Спасибо, годная статья. Однозначно в закладки.

Ответить
Развернуть ветку
Alexander Peshkov

😢 когда у тебя сайт на tilda

Ответить
Развернуть ветку
Артем Акулов
Автор

Конструктор для лендинга ок. Для полноценного сайта не годится, какой бы там функционал не был. Это мое мнение.

Ответить
Развернуть ветку
Вадим Зотов

Обидно, когда гугловская рекапча 3 не даёт пройти гугловский тест Core web vitals в гугловской PageSpeed.
Статья прикольная, жаль никто никогда не рассказывает как на практике решить проблему внешних скриптов, как правильно сделать criticalpath и как грамотно настраивать wp super cache.

Ответить
Развернуть ветку
Артем Акулов
Автор

Это индивидуально. Например на одном шаблоне wp super cache работает, а на втором после активации ошибка 500. Бывает настройки разные для сайтов на одинаковый платформе с одинаковым плагином. В общем, надо тестировать комбинации настроек и смотреть что выдает PageSpeed, выбирать лучший вариант.

Ответить
Развернуть ветку
Lilkan

Возьмите за правило размещать изображения в тегах , а все остальные элементы (иконки, логотипы и т.д.) помещайте в теги

.

не очень понял о чем это.

Ускорять битрикс, 1с и прочее крайне запарно. Там от веса картинок и css, js файлов мало что зависит. Хоть все на свете сожми, не факт что в зеленую зону попадешь. Надо об этом думать на этапе написания тз.

Ответить
Развернуть ветку
Артем Акулов
Автор

Там есть волшебная кнопка "Композитный сайт", многие магазины начинают работать значительно быстрее.

Ответить
Развернуть ветку
Vyacheslav Rubanyuk

На Wordpress есть смысл несколько плагинов вместе для ускорения использовать ? Например, WP Rocket + что-то еще ? Или лучше выбрать один ?

Ответить
Развернуть ветку
Артем Акулов
Автор

Одного может быть недостаточно. Вполне нормально использовать для кеширования wp rocket, а для оптимизации css и js другой плагин. У меня на одном сайте стоит wp rocket + Smush Image Compression and Optimization. И работает лучше, нежели один wp rocket. Не факт, что в вашем шаблоне будет так же. Я искал лучшее сочетание просто методом перебора, в любом случае у плагинов есть moneyback если что.

Ответить
Развернуть ветку
Артем Акулов
Автор

WP Rocket несомненное один из лучших плагинов, в нем есть всё, своих денег точно стоит.

Ответить
Развернуть ветку
Араич

Отличная статья. Будет полезно думаю расписать более подробно по Битриксу, думаю многие строят сайты на нем. Какие есть полезные модули, решения и тд. 

Ответить
Развернуть ветку
Артем Акулов
Автор

Битрикс обычно покупают для интернет-магазинов, там может быть прикручено всё что угодно, поэтому универсальный мануал вряд ли получится собрать.

Ответить
Развернуть ветку
badResistor

На счет оптимизации:
В шапке нет ни описания на чем сервер, ни вообще что за сайт и на чем сделан(cms или фреймворк какого языка). 

Конечно, читая текст можно понять о чем речь, но по факту это очень странные советы, применять которые надо внимательно разобрав, в первую очередь задать - а это вообще к вам относится? и только потом начинать использовать.

Ответить
Развернуть ветку
Артем Акулов
Автор

В основном инструкция актуальная для Apache 2.4, популярных cms Битрикс, WP.
Кто умеет поднимать проекты на nginx и так все это знают и даже больше.

Ответить
Развернуть ветку
badResistor

ну вот вы напишите что речь о битриксе на апаче, а то будет у кого поднятый кем-то(исполнитель) проект на nginх-e и вообще без cms и беды не миновать) 

Ответить
Развернуть ветку
Ирина Севрюкова

Добавление кеширующего реверсивного прокси (напр.Varmish) подходит?

Ответить
Развернуть ветку
Артем Акулов
Автор

Конечно, особенно для сайтов на Symfony2 с высокой нагрузкой.

Ответить
Развернуть ветку
Misha Lebedev

Я смотрю тут серьёзных разработчиков нет , не слово про , cdn , http/3  , и тем более апачь ну не смешно ли ? А где haproxy spring nginx ? Видно сразу что pagespeed  больше 95 не у кого не был.

Ответить
Развернуть ветку
Pavel Sherer

1. CDN вполне себе нормально описан в посте. Будьте чуть повнимательнее.
2. Стандарт http/3 пока только готовится к релизу, его ни apache, ни nginx не поддерживают из коробки пока. Да и вторую версию чтобы врубить на том же Debian 9, нужно прилично попотеть. Мне кажется, что тонкая серверная настройка выходит за рамки подобных статей.
3. Насчёт HAProxy и прочих балансировщиков, равно как и иной тонкой настройки серверных компонентов - см. предыдущий пункт. Разработка и оптимизация интернет-ресурса - не то же самое, что настройка серверной инфраструктуры.
4. Синтаксис, пунктуация и общий тон комментирования.

Ответить
Развернуть ветку
Misha Lebedev

Если  Unix готовить не умеете то не беритесь,  Дебиан  мало поддерживаеться в отличие от Убунты , да и из изходников  скомпилить  вообще не трудно
http/2  уже в поддержке с  nginx 1.9.5 22.09.2015 

http/3  уже можно собрать https://habr.com/ru/news/t/506322/

да и использовать для разработки уже можно 
https://github.com/aiortc/aioquic/blob/main/examples/http3_server.py

по Поводу  Haproxy  , y ну вот это явно солиднне и интереснее чем  унылое говно на апаче 
https://medium.com/@pawilon/tuning-your-linux-kernel-and-haproxy-instance-for-high-loads-1a2105ea553e

Темболее тут некоторые битрикс используют , в то время как ужаснее кода и  и глупее программистов   чем битрексеры  это ещё поискать надо .

Может реальную оптимизацию вы просто не умеете готовить ?
PS: Это я ещё с кубернетис не упомянул 

Ответить
Развернуть ветку
Pavel Sherer

Вы так ничего и не поняли. Но это не важно, мне ваш тон не нравится. Всего доброго.

Ответить
Развернуть ветку
Misha Lebedev

Заднюю включил

Ответить
Развернуть ветку
Игорь

Сейчас комп версия 96-100, мобильная 95-98. Тут мне кажется на любом сайте как ни оптимизируй, всегда будут разные показатели. Сайт на вордпресс, шаблон сам делаю. Обычная вдс, сильных манипуляций не делал в плане оптимизации. Картинки отдает WebP. В целом структура шаблона аналогичная виси. 

Ответить
Развернуть ветку
Misha Lebedev

Вордпрес это начальный уровень, серьёзные проекты делаются на других вещах бэк laravel/dgango/spring  фронт vue/react/angular

Ответить
Развернуть ветку
Игорь

Серьезный проект сделать можно на чем угодно, было бы желание. Что по вашему серьезный? Детский лепет какой-то. На вордпресс полно известных и посещаемых порталов. Его легко доработать под свои нужды и не боятся обновлений и слета всех функций. 

Ответить
Развернуть ветку
Misha Lebedev

Тото   vc.ru  , habr ,  auto.ru , vk.com , ok.ru на вордпрес не сделали

Ответить
Развернуть ветку
Игорь

Вопрос средств. Не у всех есть сходу деньги на разработку таких порталов. Кто-то начинает с того же вордпресс. Что то на php, что это. 

WordPress — это CMS, а Laravel — фреймворк (framework). CMS ориентирована на обычного пользователя (контент-менеджера, редактора, администратора сайта), фреймворк на программиста. Обе системы Open source. Обе бесплатны. 

Вк, хабр и этот сайт и другие, написаны на php. Остальное дело удобства и знаний. Я не программист. Мне проще с вордпресс начать, даже изучать php лучше и проще на нем, а потом уже лезть во фрейворки или при росте проекта уже нанимать в команду программиста и выстраивать портал на том же laravel. 

Так что фигню городите тут. 

Есть конечно у ВП слабые места, база данных тяжеловата будет. Это я бы сказал самый критичный ее момент, но он по сути легко решается. Остальные недостатки это уже вкусовщина и мелочи. Которые тоже решаются. 

Ответить
Развернуть ветку
Misha Lebedev

Ну если вы не программист то что рассуждаете  ? Во первых Wordpress  это тоже framework  ВО вторых торможения базы идёт от проектирования без индексов ,  втретьих я  в Веб разработке более 10 лет, и вот смотрю на это как вы (любители) с пеной у рта пытаетесь что доказать обсолютно не разбираясь в Fullstack . Просто смешно ...

Ответить
Развернуть ветку
Игорь

А мне смешно, как всякие "иксперты" с пеной у рта доказывают, что на том же вордпресс нельзя создать что-то более менее крупное. Но есть другая категория людей, которая берет и делает. Тот же лайфхакер. Дневная посещаемость их сайта составляет 1 млн человек.

Ответить
Развернуть ветку
Misha Lebedev

И ты говоришь о фронте а оптимизация более сильная на бэке

Ответить
Развернуть ветку
Aleksander Prokofiev

Круть какая! Как раз сейчас голову ломаем, как ускорить сайт без большой разработки. Спасибо большое.

Ответить
Развернуть ветку
Бабкин Пётр

а как закрыть доступ к phpmyadmin на том же webhost1?  

Ответить
Развернуть ветку
Иннокентий

Супер, очень полезно. Спасибо за ваш труд!

Ответить
Развернуть ветку
Vyacheslav Rubanyuk

Что делать, если в вопросе Coverage в десктопе CSS файл почти весь используется, а на мобильном - частично ? Развести их в два файла, чтобы один подключался на мобильном, а другой - на десктопе ? 

Ответить
Развернуть ветку
Артем Акулов
Автор

Да, отдавать разные файлы в зависимости от устройства.

Ответить
Развернуть ветку
Артем Акулов
Автор
Ответить
Развернуть ветку
Игорь

Отличная статья. Всегда придерживаюсь правила быстрой загрузки в мобильной и десктопной версии. И в данный момент разрабатываю шаблон под вордпресс, закрыв сайт от всех и открываю только для проверки в сервисах скорости и верстки. Пару месяцев обычно оттачиваю все, на новом шаблоне. 

Ответить
Развернуть ветку
Читать все 39 комментариев
null