Как улучшить время отклика сервера?


17

Что я могу сделать, кроме использования плагина кеша, такого как jotcache, чтобы улучшить время отклика сервера моего сайта?

Я уже удалил все неактивные модули статей, плагины и компоненты, могу ли я что-то еще сделать, чтобы улучшить это?

Я говорю о времени, прежде чем клиент (браузер) получит ответ на свой запрос . И не время загрузки страницы.


Время для ответа - это время до того, как документ php закончится, поэтому вы хотите посмотреть вызовы sql и php, а затем кэшировать html-вопросы, которые я бы предложил
tristanbailey

Когда вы говорите время отклика сервера - вы имеете в виду ответ от сервера при первом запросе или время, которое требуется серверу для подготовки и обслуживания страницы? Запустите ваш сайт через тест скорости Pingdom и опубликуйте результаты, чтобы мы могли дать вам конкретные решения для конкретной проблемы.
Брент Фриар

Ответы:


25

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

Как и при любой оптимизации, вы должны измерить влияние, которое она оказывает на производительность вашего сайта. Для базовой оптимизации полезны такие инструменты, как PageSpeed и YSlow (я рекомендую версии Firefox). Для более глубокого понимания вам необходимо измерить фактическое время отклика вашей действующей системы за определенный период времени.

PHP

  1. Включить кеширование кода операции

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

  2. Обновить версию PHP

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

  3. Настройки PHP

    В более старых версиях PHP (<= 5.3) позаботьтесь о том, чтобы выключить register_globalsи magic_quotes_gpcполучить бесплатную производительность. На PHP> = 5.6 изменить always_populate_raw_post_dataна -1.

  4. Расширения PHP

    Joomla содержит некоторый код для обхода отсутствующих расширений PHP. Это всегда будет медленнее, чем эти расширения. Для достойного повышения производительности установите следующие расширения: mbstring, zip,ftp

Веб сервер

  1. Включить gzip

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

  2. Предварительно сжать статические ресурсы

    Я не говорю о минификации (хотя это тоже помогает), но вы можете настроить Nginx и Apache для сервера уже сжатых ресурсов, эффективно устраняя попадание процессора в сжатие gzip. Бонусные баллы: используйте Zopfli для еще небольших файлов.

  3. Используйте FastCGI для PHP

    Более конкретно, вы должны использовать php-fpm. Это предотвращает запуск PHP, когда браузер запрашивает не-PHP-файл.

  4. Используйте соответствующие заголовки кэша

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

апаш

Обычно я рекомендую использовать Nginx для высокопроизводительных сайтов. Если по какой-то причине вам абсолютно необходимо использовать Apache, я получил бонусный совет:

  1. Отключить AllowOverride

    Установка AllowOverrideдля Noneпредотвращает много дискового ввода - вывода и

Joomla

  1. Не используйте режим FTP

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

  2. Отключить неиспользуемые расширения

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

  3. Выключить подготовить контент

    Если вы используете много пользовательских модулей ( mod_customне пользовательских, как в самом написании), проверьте, можете ли вы отключить подготовку контента в них. Это экономит некоторую обработку.

  4. Использовать кеширование

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

  5. Используйте альтернативный обработчик сеанса

    Используя альтернативный обработчик сеанса, вы можете освободить базу данных для более важных вещей. Я бы не стал рекомендовать файл (который в настройках Joomla называется «None»), так как это снова увеличит дисковый ввод-вывод. Использование APC - это, пожалуй, самый быстрый способ, но он увеличивает риск потери всех данных сеанса. Правая золотая середина - Memcache. Хотя для этого требуется дополнительный процесс, он более надежен, чем APC, и намного быстрее, чем хранение всех данных в базе данных.

  6. Сделайте свой сайт простым

    Вам действительно нужна эта кнопка на Facebook? А как насчет этой милой иконки, которую никто никогда не видит, потому что она частично скрыта за каким-то баннером? Чем меньше будет отображаться ваш сайт, тем быстрее он будет. Также везде, где это возможно, используйте CSS3 вместо изображений.

Разнообразный

  1. Установить значок

    Благодаря решению, относящемуся к Internet Explorer 4.0, браузеры делают запрос на файл, вызываемый favicon.icoвсякий раз, когда пользователь посещает ваш сайт. Если у вас его нет, это вызывает ненужный ввод-вывод, поскольку 404 ответа не кэшируются. Либо укажите значок вашего сайта с метатегом HTML, либо добавьте файл с именем favicon.icoв корневой веб-каталог. Не хотите иконку? Поместите прозрачный PNG размером 1x1 пикселей в этом месте. Обратите внимание, что расширение все еще должно быть .ico.

  2. Оптимизируйте свои изображения

    Удивительно, какую экономию можно получить, оптимизируя изображения, особенно файлы PNG. Существует множество инструментов, доступных для любой операционной системы, лично я использую ImageOptim, который доступен для OS X. Основные образы Joomla уже оптимизированы, но изучите ваши собственные изображения, особенно важны шаблоны. Вы также можете проверить используемые вами расширения. Если они с открытым исходным кодом, почему бы вам не отправить запрос на извлечение, содержащий недавно оптимизированные изображения?

Продвинутый

Если вы действительно хотите сделать все возможное, рассмотрите возможность размещения Varnish перед вашим сайтом. Он кэширует запросы на ваш сайт и, если возможно, обслуживает их из своего собственного кэша, никогда не обращаясь к Joomla. Это сложный инструмент, но с большой силой. Joomla не будет использовать расширенные функциональные возможности, такие как Edge Side Includes (ESI), но ваш собственный код может.


8
Это кажется ... довольно недружественным. Просто к вашему сведению, я только что написал это, текст не был подготовлен. Не стесняйтесь гуглить это. Помните, что ответы должны помочь не только первоначальному спрашивающему, но и будущим пользователям, которые тоже найдут здесь дорогу.
Rouven Weßling

13

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

Снимок экрана настройки: введите описание изображения здесь

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


3
Я никогда не видел раздел подготовки контента раньше. К какой версии Joomla это относится?
TryHarder

1
если он включен, плагины могут работать с контентом. Таким образом, если вы поместите короткие коды позиций модулей или другие короткие коды плагинов в текстовое поле html, они не будут отображаться, вы просто увидите, например, «{tag_name}» на веб-сайте, а не подготовленную версию
tristanbailey

2
Опция «Подготовить контент» включена в Joomla 2.5 и 3.x. Значением по умолчанию является «Нет».
Нил Робертсон

8

Я предполагаю, что вы запустили свой сайт на скорости Google Page, и вы действительно пытаетесь сократить время отклика страницы, т.е. время, затрачиваемое вашей разметкой для отправки в браузер.

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

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


Можете ли вы дать какие-либо советы или снимки экрана, на которые похожи тяжелые запросы? Есть ли предел для достижения?
Дэвид Фрич

Это действительно зависит от вашего приложения. Однако любой запрос, который появляется в журнале медленных запросов (который при обычных настройках регистрирует любой запрос, выполнение которого занимает более 1 секунды), является хорошим кандидатом для разбиения и / или помещения в кеш. Еще одна вещь, которая может показаться глупой, но убедитесь, что все запросы имеют ПРЕДЕЛ.
Ашвин Дата

6

Вещи, которые я знаю об этом, могут помочь (большинство из которых были перечислены):

  1. Кэширование
  2. Сжатие (сжать файлы CSS и JS)
  3. Объединение файлов (все ваши CSS объединяются в один файл)
  4. Выгрузка изображений и файлов на CDN.

Я использовал комбинацию встроенного кеша Joomla (или даже APC, включенного на сервере) и плагинов, таких как gzip или плагин rockbooster для темы ракет. Я также использую плагин nonumbers CDN с учетной записью Amazon.

Это определенно помогает, но вы должны следить за своим сайтом и отключать кеш для компонентов, которые имеют проблемы. Мне пришлось обойти CiviCRM на нашем сайте, потому что это не очень хорошо с кешированием. Joomla поставляется с плагином cachecontrol, который может справиться с этим.


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

Я всегда забываю о спрайтах. :)
Брайан Пит

Обратите внимание на одну вещь, касающуюся спрайтов - фоновые изображения не отображаются, когда Windows переключена в режим высокой контрастности. Хотя такое поведение приветствуется для общей графики, это проблема для элементов управления, на которые пользователь должен щелкнуть - они просто исчезают (пример: кнопки голосования на этом сайте)
miroxlav

Хе, Брайан Пит, мне интересно, если вы заинтересованы в том, чтобы помочь нам запустить сайт CiviCRM на StackExchange. Нам нужны коммиттеры с более чем 200 репутацией на другом сайте StackExchange : area51.stackexchange.com/proposals/77367/civicrm Cheers!
Джо Мюррей

Я взгляну. Все это было на основе Joomla, и я не занимался программированием, но я мог бы помочь с основными вопросами.
Брайан Пит

4

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

'corePHP' jomCDN - https://www.corephp.com/joomla-products/jomcdn

NoNumbers CDN для Joomla! - http://www.nonumber.nl/extensions/cdnforjoomla

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


3

Вы также можете использовать этот код в вашем файле .htaccess:

RewriteEngine On
RewriteCond %{HTTP_HOST}  ^www.your domain [nocase]
RewriteRule ^(.*)         http://your domain/$1 [last,redirect=301]
RewriteEngine on
<ifmodule mod_deflate.c>
AddOutputFilterByType DEFLATE text/text text/html text/plain text/xml text/css application/x-javascript application/javascript text/javascript
</ifmodule>
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access 1 year"
ExpiresByType image/jpeg "access 1 year"
ExpiresByType image/gif "access 1 year"
ExpiresByType image/png "access 1 year"
ExpiresByType text/css "access 1 month"
ExpiresByType text/html "access 1 month"
ExpiresByType application/pdf "access 1 month"
ExpiresByType text/x-javascript "access 1 month"
ExpiresByType application/x-shockwave-flash "access 1 month"
ExpiresByType image/x-icon "access 1 year"
ExpiresDefault "access 1 month"
</IfModule>

это кажется интересным, вы можете объяснить, что он делает?
web-tiki

@ web-tiki Это настройка истекает заголовки. Заголовки Expires сообщают браузеру, должны ли они запрашивать определенный файл с сервера или должны ли они получить его из кэша браузера. Основная идея Expires Headers состоит не только в том, чтобы уменьшить загрузку с сервера (постоянная загрузка одного и того же файла, когда он не модифицирован, тратит драгоценное время загрузки), а скорее уменьшить количество HTTP-запросов к серверу. СПРАВКА gtmetrix.com/add-expires-headers.html
TryHarder,

2

Я создал более сотни сайтов, используя Joomla!

В большинстве случаев люди думают, что Joomla интенсивно работает на сервере, но, согласно проведенному мной анализу, самое важное для сохранения вашего сайта БЫСТРОМ - это ОПТИМИЗАЦИЯ ИЗОБРАЖЕНИЙ и JS / CSS.

Не используйте редакторы Joomla, такие как JCE, чтобы просто изменить размер изображения. Используйте графические редакторы, такие как Photoshop или любой другой редактор, чтобы изменить размер изображения до необходимого размера!

Используйте инструменты сжатия JS / CSS.

Мы всегда используем Pingdom Tools для анализа скорости работы сайта и используем встроенную функцию T3 Framework для оптимизации JS / CSS!


Какие инструменты вы используете для сжатия JS / CSS? Любые рекомендации о том, как кто-то может проанализировать свой сайт, как вы сделали для ваших сайтов?
Дэвид Фрич

Мы всегда используем Pingdom Tools для анализа скорости работы сайта и используем встроенную функцию T3 Framework для оптимизации JS / CSS!
Гев Балян

2
Я также успешно использовал оптимизацию JCH для достижения большого сжатия и минимизации. Другой вариант - использовать Apache mod_pagespeed, который в основном реализует большинство рекомендаций Google Pagespeed.
Эшвин Дата

2
Все хорошие инструменты. @GevBalyan, я бы порекомендовал добавить такие вещи в ваш ответ со ссылками. Спасает людей гуглить! Вы даже можете редактировать этот ответ, чтобы добавить их в этот. :)
Дэвид Фрич

Сжатие инструментов, которые не кэшируются, может на самом деле увеличить время отклика сервера, поскольку оно добавляет время обработки к отклику сервера.
Дон Гилберт

1

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

Вы должны понимать, какие расширения вы установили и как они взаимодействуют с Joomla!

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

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


Вы можете поговорить об этом подробнее? Что вы подразумеваете под "событиями, вызванными"? Как я могу сказать, какие события вызваны?
Дэвид Фрич

1
Хороший вопрос. Вы должны понимать, какие расширения вы установили и как они взаимодействуют с Joomla! Многие расширения устанавливают плагины, которые управляют контентом, системой или действиями пользователя для запуска функций кода. Некоторые из них могут быть лишними. Я знаю, что k2 устанавливает много плагинов, которые реагируют на события, связанные с языком, которые не дают реального вывода для сайтов с одним языком. Отмена публикации этих плагинов может сократить время обработки. Аналогичным образом, у самого K2 была плохая привычка создавать дорогие запросы для получения сомнительно достойных показателей.
Joomsavvy

1
Не могли бы вы обновить свой ответ с информацией в своем комментарии?
Харальд Лейтнер

1

Улучшение ресурсов плана сервера / веб-хостинга

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

Если вы используете общий веб-хостинг, переход с «экономичного» плана на «бизнес» или другой более продвинутый план может улучшить ресурсы сервера, доступные для вашего сайта, и сократить время отклика сервера. Переход на более качественную хостинговую компанию (например, с менее загруженными серверами общего веб-хостинга) также может помочь.

Лучший хостинг-план может также дать вам доступ к улучшениям производительности, которые не включены в базовый хостинг-план. Например, планы хостинга SiteGround «GrowBig» и «GoGeek» включают динамический кэш, который помогает значительно сократить время отклика сервера. Параметр динамического кэша недоступен в плане «Запуск».

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.