- аналізуем нагрузку
- аптымізацыя MySQL
- аптымізацыя wp_options
- Паскарэнне захавання і загрузкі палёў ACF
- кэшаванне
- аптымізацыя кода
- Минификация файлаў
- вынікі
Шмат копій было зламана ў абмеркаваннях, ці падыходзіць WordPress для рэалізацыі вялікіх і складаных праектаў, або на ім можна распрацоўваць толькі прасценькія блогі. Прэцэдэнтаў стварэння маштабных праектаў мноства: ад Techcrunch і vc.ru да Forbes і CNN. Але ці так проста зрабіць вялікі праект на WP? Ці не занадта ён пражэрлівы да рэсурсаў сервера? Гэтае пытанне мы з вамі і разгледзім у гэтым артыкуле.
Для прыкладу мы возьмем адзін з нашых праектаў на WP, прааналізуем яго нагрузку на сервер і разбярэм працэс яе аптымізацыі.
аналізуем нагрузку
Для пачатку давайце паспрабуем ацаніць маштабы бедства: колькі па часе адкрываецца сайт, колькі файлаў загружаецца і колькі запытаў да MySQL патрабуецца для адлюстравання старонкі.
У гэтым нам дапаможа выдатны убудова Query Monitor - ўсталёўваны яго. У нашым выпадку асноўная праблема ясная: пры загрузцы старонкі робіцца 70 запытаў да базе даных, прычым некаторыя займаюць да секунды. Давайце разбірацца, чаму ж так шмат запытаў патрабуецца для адмалёўкі прасценькай старонкі.
аптымізацыя MySQL
WordPress не быў бы такім папулярным, калі б не яго зручным адмінка. А зрабіць адмінку ў WP такой зручнай дазваляе цудоўны убудова Advanced Custom Fields. Калі вы яшчэ яго не выкарыстоўваеце, то абавязкова паспрабуйце, ён дазваляе выводзіць дадзеныя любых фарматаў на сайце і з выгодай рэдагаваць іх адміністратару.
аптымізацыя wp_options
Усе дадзеныя ў ACF захоўваюцца ў выглядзе асобных запісаў у табліцах з мета-дадзенымі: wp_postmeta, wp_usermeta і wp_options. На wp_options варта звярнуць увагу, пры аналізе тыпавога сайта мы можам убачыць дзесяткі падобных запытаў да БД:
Справа ў тым, што многія убудовы захоўваюць свае налады ў гэтай табліцы і ніяк не кешируют дадзеныя. Вось прыклад дадзеных у табліцы: справа - слупок autoload, які адказвае за папярэднюю загрузку (і кэшаванне) дадзеных.
Раім для часта выкарыстоўваюцца дадзеных выставіць autoload = yes. У нашым выпадку гэта зэканоміла ~ 50 запытаў да БД.
Дарэчы, пры стварэнні налад ACF можна пазбегнуць рэдагавання палёў у базе дадзеных, проста перадаўшы пры выкліку acf_add_options_page параметр autoload = true. Але для іншых убудоў налады лепш усё-ткі праверыць.
Паскарэнне захавання і загрузкі палёў ACF
Перад пачаткам распрацоўкі з выкарыстаннем Advanced Custom Fields абавязкова трэба ствараць у тэчцы тэмы каталог acf-json. Гэта дазволіць ўключыць функцыю Local JSON , Якая кеширует налады палёў у json файлах і значна паскарае іх загрузку і запіс, а таксама дазваляе з выгодай захоўваць структуру палёў, напрыклад, у git і працаваць над сайтам у камандзе.
кэшаванне
Калі на вашым сайце няма вялікай колькасці дынамічнага кантэнту (напрыклад, каментароў), але загрузка дадзеных патрабуе вялікіх рэсурсаў сервера, то варта падумаць аб кэшавання старонак цалкам.
У гэтым нам дапаможа убудова WP Simple Cache , Або любой яго аналаг. Калі кэшаванне старонак цалкам вам не падыходзіць, то ўсё роўна варта падумаць аб кэшавання канкрэтных сутнасцяў вашага сайта.
аптымізацыя кода
Праглядзіце увесь код, асабліва - цяжкія цыклы і блокі з wp_query. Не варта рабіць складаныя запыты, з вялікай колькасцю умоў да запісаў WP. Яны могуць выконвацца вельмі доўга з-за складаных JOIN'ов на ўзроўні базы дадзеных, так што часам прасцей атрымаць большую колькасць запісаў з базы і адфільтраваць іх на ўзроўні PHP. Мы сутыкнуліся якраз з такой праблемай: нам прыйшлося перакласці нагрузку на само прыкладанне, бо хостер накладаў жорсткія абмежаванні на нагрузку да БД.
Таксама праверце, магчыма, некаторыя ўчасткі вашага кода напісаны неаптымальна і іх можна палепшыць.
Минификация файлаў
Для паскарэння загрузкі старонкі не перашкодзіць злучыць усе js і css файлы ў адзін і сціснуць іх. Гэта не знізіць значна нагрузку на сервер, але старонкі будуць грузіцца трохі хутчэй, што, пагадзіцеся, таксама нядрэнна. Для сціску можна выкарыстаць, напрыклад, гэты убудова .
вынікі
За кошт памяншэння колькасці і аптымізацыі "цяжкіх" запытаў нам удалося паменшыць нагрузку на БД практычна да нуля пры узрослай наведвальнасці сайта.
Праўда, загрузка на працэсар трохі вырасла:
Спадзяемся, што гэтая нататка дапаможа вам зрабіць ваш сайт крыху больш хуткім і менш пражэрлівым. Калі ўзнікнуць пытанні ці спатрэбіцца дапамога - пішыце нам, мы бясплатна прааналізуем ваш сайт і прапануем рашэнне па аптымізацыі!
Але ці так проста зрабіць вялікі праект на WP?Ці не занадта ён пражэрлівы да рэсурсаў сервера?