Подобренията в производителността на WordPress, които могат да доведат до потенциални проблеми, са всичко
Ако някога сте търсили съвети за оптимизиране на производителността на WordPress, най-вероятно сте попаднали на различни техники, които хората препоръчват. Такива техники включват различни видове механизми за кеширане: обратни прокси сървъри, кеширане на обекти, добавки за кеширане, минимизиране на CSS, използване на спрайтове на изображения и т.н. Всички те са подходящи, ефективни начини за подобряване на производителността на WordPress сайтове. Въпреки това, когато прилагате тези техники на практика, трябва да бъдете много внимателни и не забравяйте да тествате как точно те влияят на ефективността на даден сайт.
В тази статия ще разгледаме някои от най-често срещаните проблеми със скоростта на сайта, които съм срещал в моя опит с WordPress, и ще видим как точно да коригирам или заобиколя тези проблеми.
Възможни проблеми при използване на обратни проксита като Varnish и Nginx
Ще започна с обратните проксита, защото когато се използват правилно, те могат да постигнат забележимо увеличение на скоростта, а когато се използват неправилно, могат да доведат до сериозни проблеми, като например недостъпност на уебсайт или показване на неправилна информация на потребителите.
Как работят обратните проксита?
Обратните проксита като Varnish и Nginx са междинни между вашите потребители и вашия сървър. Когато се направи заявка за извличане на една от страниците на вашия сайт, вашият уеб сървър обикновено трябва да стартира PHP услуга, която комуникира с базата данни и предоставя изхода на страницата заедно със статичните ресурси, необходими за изобразяване на страницата. Аковключите обратните проксита, този резултат ще бъде кеширан и следващия път, когато някой направи заявка към вашата страница, готовият изход ще бъде доставен на обратния прокси сървър, който е многократно по-бърз и не натоварва сървъра.
Възможни проблеми по време на актуализации на WordPress
При актуализиране WordPress поставя вашия уебсайт в режим на поддръжка, актуализира всички необходими файлове и след това деактивира режима на поддръжка. Обратните прокси сървъри може да кешират някои от вашите страници, когато уебсайтът е в режим на поддръжка. Това означава, че ако кешът не бъде изчистен, страницата за поддръжка ще продължи да се обслужва на посетителите, като им попречи да навигират през вашия сайт, дори ако сървърът вече работи.
Когато актуализирате плъгин, WordPress го деактивира, изтрива цялата му папка и след това добавя нови файлове. През това време плъгинът всъщност не работи. Ако това е голям плъгин, който добавя много функционалност, като галерии или онлайн магазин, тогава вашият обратен прокси може да кешира страници с грешки, вместо да кешира действителното съдържание.
Ако актуализирате ръчно, можете или да деактивирате кеша за времетраенето на актуализацията, или ръчно да изчистите кеша, след като актуализацията приключи. Ако обаче използвате собствената автоматична актуализация на WordPress, всички тези решения няма да са много практични. Един добър обратен прокси ще ви помогне да изчистите кеша автоматично при всяко събитие за актуализиране. Тъй като както основните актуализации, така и актуализациите на плъгини имат свои собствени кукички, можете лесно да постигнете изчистване на кеша или сами (използвайки проксита), или с помощта на хостинг доставчик (ако разчитате на вашата хостинг реализация).
Проблеми с добавкитеонлайн магазини в WordPress
Независимо кой WordPress плъгин използвате за внедряване на вашия онлайн магазин, трябва да бъдете много, много внимателни, когато активирате обратното прокси кеширане.
Например, можете да създадете приятно объркване с джаджа за пазарска количка, която показва артикулите, които клиентът е избрал да закупи. Ако това съдържание се кешира от обратни проксита, тогава всички ваши посетители ще видят продуктите, които първият клиент е избрал да поръча. Нещата могат да се влошат още повече, ако страниците съдържат лична информация, като например страница за благодарност за изпълнена поръчка, която ще бъде кеширана и показана на случайни посетители. Естествено, това трябва да се избягва на всяка цена.
Най-безопасният начин да заобиколите тези проблеми е да премахнете кеша на част от електронната търговия на вашия сайт. Често обратните проксита, използвани от хостинг компании, изключват най-популярните плъгини за електронна търговия от кеша по подразбиране.
Ако изключването на частта за електронна търговия от вашия сайт не е елегантно решение за вас - тъй като очевидно ще загубите всички предимства на скоростта - тогава в този случай теоретично можете да предприемете по-сложен подход: използвайте Edge Side Includes (ESI), за да определите кои части от страниците ви не трябва да бъдат кеширани. На теория е достатъчно лесно да оградите вашите HTML тагове с ESI тагове:
В резултат на това съдържанието между тези тагове ще се изобразява динамично, когато страницата бъде заявена.
За съжаление внедряването на ESI в WordPress не е толкова лесно поради липсата на собствена поддръжка за обратни проксита в WordPress. Тъй като ESI обикновено не е подходящ вариант за хостове, които поддържатобратни проксита. ESI обаче може да се обмисли, ако имате онлайн магазин на WordPress и сами сте внедрили обратни проксита.
Проблеми с плъгини за класиране
Ако използвате плъгин за класиране на сайт на WordPress, който е кеширан от обратни прокси сървъри, тогава шансовете посетителите често да виждат неправилно кеширано класиране вместо реално класиране се увеличават значително. Причината за това е, че гласът на посетителя, преминал през такъв плъгин, не е част от стандартните кукички на WordPress и следователно не инициира изчистване на кеша.
Подобно на проблемите с електронната търговия, можете или да изключите страници, които събират класации от кеша, или да приложите ESI модел към тези страници, ако е възможно.
Проблеми с добавки за кеширане на пълна страница
В случай, че вашият хостинг доставчик не предлага обратно прокси кеширане, можете да използвате един от така наречените плъгини за кеширане на цяла страница в WordPress. Когато посетител поиска страница, плъгинът записва действителния HTML изход във физически файл на сървъра. Следващият път, когато някой поиска тази страница, тя се обслужва като статичен HTML файл, което е много по-бавно, отколкото с обратни проксита, но по-бързо, отколкото с деактивирано кеширане.
За съжаление, в резултат на използваната техника за кеширане, всички възможни проблеми, които описах за обратните прокси сървъри, продължават да съществуват за плъгините за кеширане на пълна страница, плюс се появяват някои нови.
Невъзможно е да се даде точен брой записи, започвайки от които тази техника губи своята полезност, тъй като зависи и от конкретния начин, по който плъгинът съхранява кеша - използвайкиняколко папки вместо само една, например, може да са по-ефективен подход, но за наистина голям сайт това все пак може да не е достатъчно. Само имайте предвид, че ако използвате тази техника за кеширане и уебсайтът ви е бавен, тогава кеширането може да е причината за всички забавяния.
Кеширане на обекти (Memcached)
Кеширането на обекти е страхотно за уебсайт, който получава много заявки към своята база данни, и наистина може да ускори някои уебсайтове. Memcached запазва резултата от най-популярните заявки към вашата база данни в RAM на сървъра и предава кеширани резултати вместо постоянни MySQL заявки към сървъра. За съжаление, в някои ситуации можете действително да забавите работата на уебсайта си и ето защо.
Някои добавки за WordPress са кодирани (ужасно) за съхраняване на огромно количество данни в базата данни на приложението. Услугата Memcached има ограничено количество памет за кеширане. Представете си какво би се случило, ако плъгинът запази огромни изображения в базата данни. Memcached ще се опита да буферира резултата от тази заявка, но ще изчерпи наличното място. След това ще започне да изтрива предварително кеширано съдържание на принципа първи влязъл, първи излязъл. Ако резултатите от заявката са твърде големи, няма да се кешира реално съдържание, защото ще бъде изтрито, преди да бъде преиздадено. В този случай вашият уебсайт ще се забави много, защото не само няма да намалите натоварването на услугата MySQL, но напротив, ще добавите друга услуга към процеса, която изисква собствено време за изпълнение.
Ако смятате, че уебсайтът след добавяне на Memcachedзапочна да работи по-бавно, тогава, за съжаление, единственото решение е или да деактивирате всички добавки, които съхраняват голямо количество информация в базата данни, или да деактивирате самата услуга Memcached.
Спрайтове: да, те също могат да бъдат проблем
Харесвам спрайтове, които могат да увеличат ефективността на сайта, когато се използват правилно. Поради тази причина, по време на скорошния редизайн на SiteGround, решихме да конвертираме всички навигационни и потребителски елементи, както и много други елементи на страницата, в спрайтове. Сайтът ни започна да работи много по-бързо и бяхме доволни от резултата. В крайна сметка продължихме да добавяме елементи към спрайтовете, докато не се натъкнахме на проблеми при зареждането на някои страници на iOS устройства.
Това се случи, защото надхвърлихме ограничението на мобилното Safari за максималния брой декодирани пиксели, които могат да бъдат показани. Това ограничение варира за различните устройства. Можете лесно да генерирате спрайт с голям брой пиксели, но ако той надвишава зададения лимит за размер, тогава браузърът няма да го зареди, което ще остави вашия сайт без елементите, съдържащи се в този спрайт. Естествено, вие не искате това да се случи.
Симпатяга на име Уилям Малоун създаде удобен инструмент за проверка дали даден спрайт ще се визуализира правилно на всички iOS устройства. Въведете параметрите на вашия спрайт в калкулатора, след което отговорът ще се покаже на екрана.
Ако вашият спрайт е твърде голям, възможно решение е да го разделите на две изображения. Ако искате да направите това, тогава ви съветвам да направите следното: най-добре е да приписвате само най-скоро добавените елементи към новото изображение; в противен случай ще ви трябвакоригирайте целия CSS код, който използва спрайта, т.е. изпълнете задача, която искате да заобиколите, ако е възможно.
Съществуващи рискове с минимизиране на CSS и Javascript
Много инструменти и плъгини автоматично минимизират файловете. Някои от тях обаче са по-агресивни, като премахват повече от празни знаци. Някои инструменти пренареждат CSS селекторите, като ги групират по свойства и т.н. В някои случаи това може да наруши цялата логика на CSS файла и да превърне уебсайта в нещо, което прилича на необработения оригинал.
Gzip: не може да има грешки с него, но можем да направим компресията по-добра
Активирането на Gzip за WordPress значително ускорява зареждането на страницата. Gzip компресира изхода на страницата и го предава на браузъра на посетителя като ZIP файл, след което браузърът го декомпресира и обработва. Това е страхотен подход, защото времето, необходимо на браузъра за декомпресиране на архивираното съдържание, често е многократно по-малко от времето, необходимо за физическо прехвърляне на некомпресираното съдържание от сървъра към браузъра.
Повечето потребители на WordPress често разчитат на плъгини - поне за хора, които не могат или не искат да пишат код - включително когато Gzip е активиран. За съжаление Gzip плъгините работят чрез PHP, което въпреки скоростта на работа не ви позволява да постигнете същата скорост, както при работа директно от сървъра на Apache. Всичко, което трябва да направите, е да инсталирате mod_deflate (проверете при вашия хостинг доставчик дали тази функция е налична - обикновено е налична, тъй като е индустриален стандарт) и да добавите няколко реда към вашия .htaccess файл:
Заключение
Разбирането на рисковете, свързани с оптимизирането на скоростта на вашия WordPress сайт, не трябва да ви спира да експериментирате. Да сеЗа да получите най-добри резултати, просто следвайте няколко прости указания: не променяйте твърде много неща наведнъж, тествайте скоростта на зареждане, използвайте тестови копия, когато е възможно, и тествайте функционалността на уебсайта след прилагане на всяка нова техника. По този начин можете да увеличите скоростта на вашия сайт, без да нарушавате функционалността му и без да създавате проблеми на посетителите.