Повільне завантаження сайтів і як з нею боротися, хостинг огляд - епіцентр російськомовного хостингу

Напевно, будь-який веб-розробник хоча б іноді буває незадоволений швидкістю, з якою відкривається його сайт. В рамках віртуального хостингу існує кілька основних причин повільного завантаження сайту (головної його сторінки або якихось окремих розділів). Деякі з цих причин ми розглянемо в даній статті.

Передача даних по комутованій лінії

Якщо ж при передачі інформації модем намагається підібрати оптимальну швидкість, то дані в цей момент не передаються, і час завантаження сторінки може затягнутися до декількох десятків секунд.

Передача даних по виділеній лінії

Здавалося б, що в разі підключення по виділеній лінії подібного роду проблеми зі швидкістю завантаження повинні зникнути, але, виявляється, тут також є свої нюанси. Один з яких - мала пропускна здатність каналу. з'єднує мережі, в яких знаходиться сам сервер і комп'ютер, що запитав з нього документ.

Зазвичай така проблема може спостерігатися в разі переходу однієї з мереж на використання резервного каналу зв'язку, який, як правило, має меншу пропускну здатність, ніж основний канал. Також затримки при передачі даних можуть з'являтися в разі нестабільної роботи описуваних каналів - наприклад, через збої в роботі програмно-апаратної частини.

Подивитися маршрут і час затримки проходження пакетів на різних ділянках від клієнтського комп'ютера до сервера, на якому розташований сайт, можна за допомогою утиліти traceroute (в * nix-системах) або tracert (в Windows), яка показує список хостів, через які проходять пакети від локального комп'ютера до сайту.

Однак слід врахувати, що правильна робота даної утиліти залежить від схеми побудови вашої мережі, тому має сенс проконсультуватися з вашим системним адміністратором в разі, якщо трейс не видає повного списку хостів або ж взагалі не працює.

Передача даних по ADSL

Проблема із завантаженням каналу передачі даних також може виникати на виділеній лінії, що працює за технологією ADSL. Абревіатура ADSL (Asymmetric Digital Subscriber Line) розшифровується як "Асиметрична цифрова абонентська лінія", що підкреслює спочатку закладений в цій технології розходження швидкостей обміну даними в напрямках трафіку до абонента і від абонента. Як правило, швидкість передачі від абонента нижче, ніж швидкість до абонента. Нічого поганого в цьому немає, оскільки більшості користувачів, підключених по ADSL, швидкість якраз потрібна для того, щоб швидко завантажувати на свій комп'ютер дані з мережі Інтернет.

У цьому випадку передача службової інформації (наприклад, підтвердження прийняття даних) від абонента до джерела створює трафік, який становить малу частину від загальної пропускної здатності каналу, велика ж частина трафіку в цьому випадку йде до абонента. Якщо під час завантаження файлу або сторінки необхідна інформація від абонента перестає надходити до джерела, то останній, як правило, на якийсь час припиняє передачу даних клієнту. Таке може статися, якщо канал в напрямку від абонента до сервера повністю завантажений.

Динамічні сторінки, скрипти

Тепер розглянемо причини повільного завантаження сайту, які мають безпосереднє відношення до серверної стороні.

Дуже часто низька швидкість завантаження сайту обумовлена ​​повільним виконанням скриптів, які формують динамічний контент сайту. Як правило, це пов'язано з обмеженнями на використання ресурсів в рамках наданих тарифних планів. Іншими словами, користувач хостингу не може використовувати всі ресурси фізичної машини, на якій розташований його сайт. Такий механізм, реалізований тими чи іншими засобами, використовують практично всі хостингові компанії для запобігання перевантаження або відмови всієї фізичної машини через некоректно написаних скриптів окремого користувача.

Іншими словами, кожен призначений для користувача процес отримує в своє розпорядження лише частина ресурсів фізичної машини: частина оперативної пам'яті, певну кількість процесорного часу і т.д.

На низьку швидкість виконання скриптів можуть впливати наступні фактори:

  • Використання неефективних прийомів програмування.

  • Обробка великих обсягів даних
  • Обробка даних з повільних зовнішніх джерел.

    Припустимо, що скрипт повинен з'єднатися із зовнішнім хостом і отримати якісь дані по http. Чим довше будуть передаватися дані з зовнішнього джерела скрипту, тим довше він буде виконуватися.

  • Обсяг коду скрипта.

    Практично будь-який скриптова мова (Perl, PHP) майже завжди буде працювати свідомо повільніше, ніж програма, спомпілірованная і оптимізована безпосередньо під інструкції процесора, на якому вона буде виконуватися.

    Саме в разі роботи з PHP проблему багато в чому вирішує використання PHP-оптимізаторів (наприклад, Zend Optimizer або Turck MMCache). Основне їхнє завдання - оптимізація і прискорення виконання PHP-скриптів (компіляція скрипта в байт-код і кешування результатів для подальшого виклику саме скомпільованого варіанти).

    Приклад використання PHP-оптимізатора Turck MMCache

    Розглянемо спосіб діагностики за допомогою Turck MMCache.

    Ми розглядаємо Turck MMCache тільки в якості прикладу. Ви можете дізнатися, чи встановлені на Вашому хостингу ті чи інші PHP-оптимізатори, звернувшись до служби технічної підтримки Вашого хостинг-провайдера або подивившись висновок функції phpinfo ().

    Створіть в www-просторі php-файл з наступною рядком:

    Викликавши цей скрипт з браузера, ви побачите таблиці, в яких міститься інформація про роботу Turck MMCache:

  • таблиця з параметрами MMCache support відображає поточні настройки Turck MMCache;
  • параметр Memory Size відображає загальний обсяг виділеної для Turck MMCache пам'яті;
  • параметр Memory Allocated вказує обсяг пам'яті, який використовується в даний момент для кешування скриптів;
  • Cached Scripts - кількість скриптів, які Turck MMCache зміг закешовану.

    У другій таблиці представлений список всіх виконаних скриптів, а також такі параметри, як розмір (Size) кожного скрипта і кількість вдалих завантажень (Hits) з пам'яті Turck MMCache. Якщо параметр Hits має значення 0, то це означає, що Turck MMCache не зміг закешовану цей скрипт.

    Щоб визначити обсяг завантаження для виконання одного скрипта, потрібно спочатку очистити пам'ять Turck MMCache від уже закешовану скриптів. Для цього необхідно натиснути кнопку Clear і переконатися, що кеш-пам'ять очищена - в списку скриптів повинен залишитися тільки один створений нами скрипт. Після цього потрібно викликати конкретний скрипт через браузер і після завершення його роботи оновити сторінку з таблицями Turck MMCache. В результаті цих дій ви отримаєте список файлів, які викликаються при виконанні даного запиту. Загальний обсяг цих файлів можна підрахувати, підсумувавши всі показані скрипти по полю Size.

    Де використовувати оптимізатори PHP

    Відчутний приріст продуктивності PHP-оптимізатори дають в роботі форумів (наприклад, phpBB, vBulletin), CMS - систем управління контентом (наприклад, Бітрікс (Bitrix), PHP-Nuke, Mambo).

    В принципі, практично будь-яка велика система, написана на PHP, буде працювати швидше при використанні оптимізаторів PHP. Але, тим не менш, варто пам'ятати про те, що не завжди ті скрипти, які коректно працювали без оптимізаторів, будуть на 100% сумісні з додатковими модулями до PHP. При підключенні того чи іншого модуля постарайтеся переконатися в тому, що написаний вами код сумісний з ним.

    Робота з базою даних

    Ще одним «вузьким» місцем в роботі сайту найчастіше є неоптимальний використання бази даних.

    Наприклад, відвідувач вашого сайту звертається до динамічної сторінки, для побудови якої генерує її скрипт виконує один або кілька SQL-запитів. Якщо з якихось причин SQL-сервер буде довго їх обробляти або ж в результаті обробки запиту скрипту передаватиметься занадто багато даних, запитана сторінка буде генеруватися занадто довго.

    На віртуальному хостингу в якості бази даних найчастіше використовується MySQL. І однією з найбільш частих причин повільного виконання SQL-запитів є відсутність індексів в таблицях MySQL. Якщо база містить таблиці з великими обсягами даних, то виконання запитів типу SELECT по полях такої таблиці без індексів може зайняти досить тривалий час, що в кінцевому підсумку позначиться на часі формування сторінки. Саме тому рекомендується періодично відстежувати і оптимізувати такі запити. Це можна робити за допомогою команди MySQL SHOW FULL PROCESSLIST. яка виводить таблицю всіх виконуються в даний момент запитів. Колонка Time вказує, як довго виконується кожен запит. Якщо час виконання запиту становить більше однієї секунди - є привід перевірити кількість переглядаються цим запитом рядків в таблиці. Для цього потрібно використовувати команду EXPLAIN. яка також видасть таблицю з результатами. Значення в стовпці Rows покаже, скільки рядків у таблиці проглядається при виконанні даного запиту. Якщо кількість рядків більше 1000, то потрібно спробувати побудувати індекси для тих полів, за якими йде вибірка. Як правило, в більшості випадків після побудови індексів вдається домогтися зменшення числа відвіданих рядків в десятки разів, що позитивно позначається на часі виконання запиту.

    Розглянемо конкретний приклад:

    Ми робимо запит з таблиці 'products' з умовою по полю 'id', для якого не побудований індекс. Запит виконується 0.60 сек. і при його виконанні MySQL "переглядає" 175246 рядків в таблиці. Можна побудувати індекс по полю 'id' і порівняти результати. Після побудови індексу по полю 'id' той же запит виконується практично миттєво, так як MySQL фактично "переглядає" тільки один рядок.

    Більш докладно про оптимізацію роботи з MySQL можна прочитати на сайті розробників.

    Передача файлів великого обсягу по HTTP

    Ще одная часта проблема, яка веде до повільної завантаженні сайту, пов'язана з обсягом інформації, що скачується з сайту, і частотою запитів на скачування файлів. Припустимо, у Вас на сайті розташовано багато файлів дуже великого обсягу (по кілька мегабайт). Відвідувачі сайту можуть завантажувати ці файли, але на обробку їх запитів буде йти відчутний час через те, що файли мають великий обсяг. У разі, якщо запитів приходить відразу кілька, то велика ймовірність того, що сайт буде відкриватися з великими затримками або не відкривається зовсім, оскільки сервер буде зайнятий виключно обслуговуванням цих запитів. Часто така проблема може виникнути і через використання відвідувачами спеціальних програм, призначених для завантаження файлів (менеджери завантаження) - деякі такі програми скачують великі файли в кілька потоків, в результаті чого кількість працюючих на віртуальному сервері процесів множиться і дуже швидко досягає ліміту.

    У разі, якщо у Вас дійсно є необхідність постійно надавати для скачування файли великого об'єму, то краще за все розглянути можливість використання інших транспортів для передачі даних. Наприклад, надати доступ до файлів по протоколу FTP, якщо таку можливість може надати Вам Ваш хостер (можливо, у вигляді додаткової послуги). Тим самим Ви розвантажите веб-сервер Apache і перекладіть роботу по обробці запитів на скачування файлів на FTP-сервер.