ÐÑÐ½Ð¾Ð²Ñ Ð¿ÑоизводиÑелÑноÑÑи
ÐнглийÑкое Ñлово Performance, коÑоÑое иÑполÑзÑеÑÑÑ Ð² ÑÑаÑÑÑÑ Ð¾ пÑоизводиÑелÑноÑÑи пÑиложений, Ñакже можно пеÑевеÑÑи, как "ÑÑÑекÑивноÑÑÑ". ÐÑÐ¾Ñ Ð´Ð¾ÐºÑÐ¼ÐµÐ½Ñ Ð¾Ð±ÑÑÑнÑÐµÑ Ð¾ÑÐ½Ð¾Ð²Ñ Ð¿ÑоизводиÑелÑноÑÑи, Ñого как бÑаÑзеÑÑ Ð¿Ð¾Ð¼Ð¾Ð³Ð°ÑÑ ÑлÑÑÑиÑÑ ÐµÑ Ð¸ какие инÑÑÑÑменÑÑ Ð¸ пÑоÑеÑÑÑ Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ, ÑÑÐ¾Ð±Ñ ÐµÑ ÑлÑÑÑиÑÑ.
ЧÑо Ñакое пÑоизводиÑелÑноÑÑÑ?
ÐÑÑÑÐ°ÐµÐ¼Ð°Ñ Ð¿Ð¾Ð»ÑзоваÑелем "пÑоизводиÑелÑноÑÑÑ" - ÑÑо единÑÑÐ²ÐµÐ½Ð½Ð°Ñ Ð¿ÑоизводиÑелÑноÑÑÑ, коÑоÑÐ°Ñ Ð¸Ð¼ÐµÐµÑ Ð·Ð½Ð°Ñение. ÐолÑзоваÑели взаимодейÑÑвÑÑÑ Ñ ÑиÑÑемой Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð²Ð²Ð¾Ð´Ð° ÐºÐ°ÐºÐ¸Ñ -Ñо даннÑÑ : пÑикоÑновений, Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð¸ ÑеÑи. РоÑвеÑ, они полÑÑаÑÑ ÑеакÑиÑ, оÑнованнÑÑ Ð½Ð° зÑиÑелÑном, ÑакÑилÑном или ÑлÑÑ Ð¾Ð²Ð¾Ð¼ аппаÑаÑÐ°Ñ . ÐÑоизводиÑелÑноÑÑÑ - ÑÑо каÑеÑÑво Ñого, как ÑиÑÑема ÑеагиÑÑÐµÑ Ð½Ð° дейÑÑÐ²Ð¸Ñ Ð¿Ð¾Ð»ÑзоваÑелÑ.
ÐÑи пÑоÑÐ¸Ñ ÑавнÑÑ , код, опÑимизиÑованнÑй Ð´Ð»Ñ ÐºÐ°ÐºÐ¸Ñ -Ñо инÑÑ Ñелей, кÑоме оÑÑÑаемой полÑзоваÑелем пÑоизводиÑелÑноÑÑи (здеÑÑ Ð¸ далÑÑе UPP, user-perceived performance) вÑегда пÑоигÑÑÐ²Ð°ÐµÑ ÐºÐ¾Ð´Ñ, коÑоÑÑй опÑимизиÑован Ð´Ð»Ñ UPP. УпÑоÑÑнно говоÑÑ, полÑзоваÑели пÑедпоÑиÑаÑÑ Ð¾ÑзÑвÑивое и плавное пÑиложение, коÑоÑое обÑабаÑÑÐ²Ð°ÐµÑ 1,000 ÑÑанзакÑий к базе даннÑÑ Ð² ÑекÑÐ½Ð´Ñ Ð³ÑÑÐ±Ð¾Ð¼Ñ Ð½ÐµÐ¾ÑзÑвÑÐ¸Ð²Ð¾Ð¼Ñ Ð¿ÑиложениÑ, коÑоÑое обÑабаÑÑÐ²Ð°ÐµÑ 100,000,000 запÑоÑов в ÑекÑндÑ. ÐонеÑно, ÑÑо не ознаÑаеÑ, ÑÑо дÑÑгие меÑÑики ÑÑановÑÑÑÑ Ð½ÐµÐ½ÑжнÑм, но пеÑвой ваÑей ÑелÑÑ Ð´Ð¾Ð»Ð¶Ð½Ð° бÑÑÑ UPP.
СледÑÑÑие ÑÐ°Ð·Ð´ÐµÐ»Ñ ÑкажÑÑ Ð¸ обÑÑÑнÑÑ Ð½ÐµÐºÐ¾ÑоÑÑе меÑÑики пÑоизводиÑелÑноÑÑи:
ÐÑзÑвÑивоÑÑÑ
ÐÑзÑвÑивоÑÑÑ - ÑÑо Ñо, как бÑÑÑÑо ÑиÑÑема пÑÐµÐ´Ð»Ð°Ð³Ð°ÐµÑ Ð¾ÑÐ²ÐµÑ (или множеÑÑво оÑвеÑов) на запÑÐ¾Ñ Ð¿Ð¾Ð»ÑзоваÑелÑ. ÐапÑимеÑ, когда полÑзоваÑÐµÐ»Ñ Ð½Ð°Ð¶Ð¸Ð¼Ð°ÐµÑ Ð½Ð° ÑкÑан, он ожидаеÑ, ÑÑо пикÑели под палÑÑем изменÑÑÑÑ ÐºÐ°ÐºÐ¸Ð¼-Ñо обÑазом. ÐÐ»Ñ ÑÑого ÑлÑÑÐ°Ñ Ð²Ð·Ð°Ð¸Ð¼Ð¾Ð´ÐµÐ¹ÑÑÐ²Ð¸Ñ Ñ Ð¾ÑоÑей меÑÑикой бÑÐ´ÐµÑ Ð²ÑемÑ, коÑоÑое пÑоÑло Ð¼ÐµÐ¶Ð´Ñ Ð¼Ð¾Ð¼ÐµÐ½Ñом нажаÑÐ¸Ñ Ð¸ изменением пикÑелей.
ÐÑзÑвÑивоÑÑÑ Ð¸Ð½Ð¾Ð³Ð´Ð° вклÑÑÐ°ÐµÑ Ð² ÑÐµÐ±Ñ Ð½ÐµÑколÑко ÑÑапов. ÐапÑÑк пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ - один из важнейÑÐ¸Ñ ÑÑапов. ÐÑ Ð¾Ð±ÑÑдим его ниже.
ÐÑзÑвÑивоÑÑÑ Ð²Ð°Ð¶Ð½Ð° пÑоÑÑо поÑомÑ, ÑÑо полÑзоваÑели ÑеÑÑÑÑÑÑ Ð¸ злÑÑÑÑ, когда Ð¸Ñ Ð¸Ð³Ð½Ð¾ÑиÑÑÑÑ. ÐаÑе пÑиложение игноÑиÑÑÐµÑ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ ÐºÐ°Ð¶Ð´ÑÑ ÑекÑндÑ, когда оно не оÑвеÑÐ°ÐµÑ Ð½Ð° полÑзоваÑелÑÑкий ввод.
ЧаÑÑоÑа кадÑов
ЧаÑÑоÑа кадÑов - ÑÑо ÑаÑÑоÑа, Ñ ÐºÐ¾ÑоÑой ÑиÑÑема пеÑеÑиÑовÑÐ²Ð°ÐµÑ Ð¿Ð¸ÐºÑели, оÑобÑажаемÑе полÑзоваÑелÑ. ÐÑо Ð·Ð½Ð°ÐºÐ¾Ð¼Ð°Ñ ÐºÐ¾Ð½ÑепÑиÑ: каждÑй пÑедпоÑиÑаеÑ, Ñкажем, игÑÑ, коÑоÑÑе ÑабоÑаÑÑ Ð² Ñежиме 60 кадÑов в ÑекÑÐ½Ð´Ñ Ð¸Ð³Ñам, коÑоÑÑе ÑабоÑаÑÑ Ñ ÑаÑÑоÑой 10 кадÑов в ÑекÑндÑ. Ðаже еÑли они не ÑмогÑÑ Ð¾Ð±ÑÑÑниÑÑ Ð¿ÑиÑÐ¸Ð½Ñ ÑÑого.
ЧаÑÑоÑа кадÑов важна пÑимеÑно Ñак же, как "каÑеÑÑво обÑлÑживаниÑ". ÐиÑплеи ÑÑÑÑойÑÑв ÑпÑоекÑиÑÐ¾Ð²Ð°Ð½Ñ Ñак, ÑÑÐ¾Ð±Ñ Ð¾Ð±Ð¼Ð°Ð½ÑваÑÑ Ð³Ð»Ð°Ð·Ð° полÑзоваÑелей, доÑÑавлÑÑ ÑоÑÐ¾Ð½Ñ ÑвеÑа Ñак, ÑÑÐ¾Ð±Ñ Ð¸Ð·Ð¾Ð±Ñажение бÑло Ð¿Ð¾Ñ Ð¾Ð¶Ð¸Ð¼ на ÑеалÑное. ÐапÑимеÑ, бÑмага, покÑÑÑÐ°Ñ Ð½Ð°Ð¿ÐµÑаÑаннÑми бÑквами, оÑÑÐ°Ð¶Ð°ÐµÑ ÑоÑÐ¾Ð½Ñ Ð¾Ð¿ÑеделÑннÑм обÑазом. ÐанипÑлиÑÑÑ ÑендеÑингом, пÑиложениÑ-ÑиÑалки пÑÑаÑÑÑÑ Ð¾ÑпÑавиÑÑ ÑоÑÐ¾Ð½Ñ Ð¿Ð¾Ñ Ð¾Ð¶Ð¸Ð¼ обÑазом, обманÑÐ²Ð°Ñ Ð³Ð»Ð°Ð·Ð°.
ÐÐ°Ñ Ð¼Ð¾Ð·Ð³ знаеÑ, ÑÑо движение - ÑÑо не оÑÑÑвÑаÑÑй или диÑкÑеÑнÑй пÑоÑеÑÑ, а плавнÑй и поÑледоваÑелÑнÑй. ÐиÑплей ÑÑÑÑойÑÑв Ñ Ð²ÑÑокой ÑаÑÑоÑой кадÑов ÑÐ´ÐµÐ»Ð°Ð½Ñ Ð¿ÑоÑÑо Ð´Ð»Ñ Ñого, ÑÑÐ¾Ð±Ñ ÑделаÑÑ ÑÑÑ Ð¸Ð»Ð»ÑÐ·Ð¸Ñ Ð±Ð¾Ð»ÐµÐµ ÑеалÑной. (ÐнÑеÑеÑно, ÑÑо ÑÑÑобоÑÐºÐ¾Ð¿Ñ Ð¿ÐµÑевоÑаÑиваÑÑ ÑÑÑ ÐºÐ¾Ð½ÑепÑиÑ, заÑÑавлÑÑ Ð½Ð°Ñ Ð¼Ð¾Ð·Ð³ ÑоздаваÑÑ Ð¸Ð»Ð»ÑÐ·Ð¸Ñ Ð´Ð¸ÑкÑеÑной ÑеалÑноÑÑи).
ÐÑимеÑание: ÐÑди обÑÑно не могÑÑ Ð¿Ð¾ÑÑвÑÑвоваÑÑ ÑазниÑÑ Ð¼ÐµÐ¶Ð´Ñ ÑаÑÑоÑами кадÑов вÑÑе 60Hz. Ðо ÑÑой пÑиÑин болÑÑÐ°Ñ ÑаÑÑÑ ÑовÑеменнÑÑ ÑлекÑÑоннÑÑ Ð´Ð¸Ñплеев ÑпÑоекÑиÑÐ¾Ð²Ð°Ð½Ñ Ð´Ð»Ñ Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ ÐºÐ°ÑÑинки Ñ Ñакой ÑаÑÑоÑой. Ðднако, Ð´Ð»Ñ Ð½ÐµÐºÐ¾ÑоÑÑÑ Ð¶Ð¸Ð²ÑÑ ÑÑÑеÑÑв ÑÐ°ÐºÐ°Ñ ÑаÑÑоÑа кадÑов бÑÐ´ÐµÑ ÐºÐ°Ð·Ð°ÑÑÑÑ Ð·Ð°Ð¼ÐµÐ´Ð»ÐµÐ½Ð½Ð¾Ð¹. ÐапÑимеÑ, Ð´Ð»Ñ ÐºÐ¾Ð»Ð¸Ð±Ñи.
ÐÑполÑзование памÑÑи
ÐÑполÑзование памÑÑи - ÑÑо оÑделÑÐ½Ð°Ñ ÐºÐ»ÑÑÐµÐ²Ð°Ñ Ð¼ÐµÑÑика. РоÑлиÑии Ð¾Ñ Ð¾ÑзÑвÑивоÑÑи и ÑаÑÑоÑÑ ÐºÐ°Ð´Ñов, полÑзоваÑели не могÑÑ Ð½Ð°Ð¿ÑÑмÑÑ Ð¿Ð¾ÑÑвÑÑвоваÑÑ Ð¸ÑполÑзование памÑÑи, но ÐµÑ Ð¸ÑполÑзование влиÑÐµÑ Ð½Ð° "ÑоÑÑоÑние полÑзоваÑелÑ". ÐдеалÑÐ½Ð°Ñ ÑиÑÑема бÑÐ´ÐµÑ Ð¿Ð¾Ð´Ð´ÐµÑживаÑÑ 100% ÑоÑÑоÑÐ½Ð¸Ñ Ð²ÑÐµÑ Ð¿Ñиложений вÑÑ Ð²ÑемÑ: вÑе пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð±ÑдÑÑ Ð·Ð°Ð¿ÑÑкаÑÑÑÑ Ð¾Ð´Ð½Ð¾Ð²Ñеменно, а каждое пÑиложение бÑÐ´ÐµÑ Ð²Ð¾Ð·Ð²ÑаÑаÑÑÑÑ Ðº ÑоÑÑоÑниÑ, коÑоÑое бÑло в поÑледний Ñаз, когда полÑзоваÑÐµÐ»Ñ Ñ Ð½Ð¸Ð¼ взаимодейÑÑвовал (ÑоÑÑоÑние пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ñ ÑаниÑÑÑ Ð² компÑÑÑеÑной памÑÑи - поÑÑÐ¾Ð¼Ñ ÑÑо ÑÑавнение его Ñ user state доволÑно ÑоÑное).
ÐÑÑÑда ÑледÑÐµÑ Ð¾Ð´Ð½Ð¾ неоÑевидное заклÑÑение: Ñ Ð¾ÑоÑо ÑпÑоекÑиÑÐ¾Ð²Ð°Ð½Ð½Ð°Ñ ÑиÑÑема не забоÑиÑÑÑ Ð¾Ð± ÑвелиÑении Ñвободной памÑÑи. ÐамÑÑÑ - ÑÑо ÑеÑÑÑÑ, а ÑÐ²Ð¾Ð±Ð¾Ð´Ð½Ð°Ñ Ð¿Ð°Ð¼ÑÑÑ - неиÑполÑзÑемÑй ÑеÑÑÑÑ. ÐаобоÑоÑ, Ñ Ð¾ÑоÑо ÑпÑоекÑиÑÐ¾Ð²Ð°Ð½Ð½Ð°Ñ ÑиÑÑема иÑполÑзÑÐµÑ Ð´Ð¾ÑÑаÑоÑно много памÑÑи, ÑÑÐ¾Ð±Ñ Ð¾Ð±ÐµÑпеÑиÑÑ Ñакое ÑоÑÑоÑние, когда полÑзоваÑÐµÐ»Ñ Ð½Ðµ ÑÑвÑÑвÑÐµÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹ в пÑоизводиÑелÑноÑÑи.
ÐÑо не ознаÑаеÑ, ÑÑо ÑиÑÑема должна ÑÑаÑиÑÑ Ð¿Ð°Ð¼ÑÑÑ. Ðогда ÑиÑÑема иÑполÑзÑÐµÑ Ð±Ð¾Ð»ÑÑе памÑÑи, Ñем ÑÑо Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ Ð´Ð»Ñ Ð¿Ð¾Ð´Ð´ÐµÑÐ¶Ð°Ð½Ð¸Ñ ÑоÑÑоÑÐ½Ð¸Ñ Ð¿ÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ - она ÑÑаÑÐ¸Ñ Ð¿Ð°Ð¼ÑÑÑ. Ð ÑÑом ÑлÑÑае, дÑÑгое пÑиложение (или даже дÑÑгое ÑоÑÑоÑние), коÑоÑÑе могли Ð±Ñ Ð¸ÑполÑзоваÑÑ ÑÑÑ Ð¿Ð°Ð¼ÑÑÑ - не могÑÑ ÐµÑ Ð¸ÑполÑзоваÑÑ. Ðа пÑакÑике, ни одна ÑиÑÑема не Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾Ð´Ð´ÐµÑживаÑÑ Ð² памÑÑи вÑе ÑоÑÑоÑÐ½Ð¸Ñ Ð¾Ð´Ð½Ð¾Ð²Ñеменно. РазÑмное ÑаÑпÑеделение памÑÑи, доÑÑаÑоÑное Ð´Ð»Ñ Ð¿Ð¾Ð´Ð´ÐµÑжки ÑоÑÑоÑÐ½Ð¸Ñ Ð¿ÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ - ÑÑо Ð²Ð°Ð¶Ð½Ð°Ñ Ð¿Ñоблема, коÑоÑÑÑ Ð¼Ñ ÑаÑÑмоÑÑим позже.
ÐÑполÑзование ÑнеÑгии
ÐоÑледний показаÑелÑ, коÑоÑÑй нÑжно ÑпомÑнÑÑÑ - ÑÑо поÑÑебление ÑнеÑгии. Ðодобно иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð°Ð¼ÑÑи, полÑзоваÑÐµÐ»Ñ ÑÑвÑÑвÑÐµÑ Ð¿Ð¾ÑÑебление ÑнеÑгии опоÑÑедованно, оÑмеÑÐ°Ñ Ð²ÑемÑ, ÑеÑез коÑоÑое ÑÑÑÑойÑÑво наÑÐ¸Ð½Ð°ÐµÑ Ð¸Ð·Ð¼ÐµÐ½ÑÑÑ Ð²Ð¾ÑпÑинимаемÑÑ Ð¿Ð¾Ð»ÑзоваÑелем пÑоизводиÑелÑноÑÑÑ (UPP). ÐÐ»Ñ Ð¼Ð¸Ð½Ð¸Ð¼Ð¸Ð·Ð°Ñии оÑÑиÑаÑелÑнÑÑ ÑÑÑекÑов иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÑнеÑгии, Ð¼Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð´ÐµÐ»Ð°ÑÑ ÑиÑÑÐµÐ¼Ñ Ñкономной.
ÐÐ»Ñ Ð¿ÑимеÑа, вÑпомниÑе, как ÑабоÑаÑÑ Ð¼Ð¾Ð±Ð¸Ð»ÑнÑе ÑÑÑÑойÑÑва: Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе вклÑÑиÑÑ Ñежим ÑнеÑгоÑбеÑежениÑ, когда оÑклÑÑаÑÑÑÑ Ð´ÑÑгие ÑиÑÑемÑ. Ðо еÑÑÑ Ð¸ более жÑÑÑкий Ñежим, коÑоÑÑй вклÑÑаеÑÑÑ Ð°Ð²ÑомаÑиÑеÑки, когда заÑÑд ÑменÑÑаеÑÑÑ Ð´Ð¾ 5% - ÑиÑÑема вклÑÑÐ°ÐµÑ ÑÑоÑÑлинг пÑоÑеÑÑоÑа, замедлÑÑ Ð²Ñполнение вÑÐµÑ Ð¸Ð½ÑÑÑÑкÑий.
ÐÑÑ Ð¾ÑÑавÑÑÑÑÑ ÑаÑÑÑ ÑÑаÑÑи Ð¼Ñ Ð±Ñдем обÑÑждаÑÑ Ð¿ÑоизводиÑелÑноÑÑÑ Ð² ÑвеÑе ÑÑÐ¸Ñ Ð¿Ð¾ÐºÐ°Ð·Ð°Ñелей.
ÐпÑимизаÑÐ¸Ñ Ð¿Ð»Ð°ÑÑоÑмÑ
Ð ÑÑой ÑекÑии пÑиводиÑÑÑ ÐºÑаÑкий Ð¾Ð±Ð·Ð¾Ñ Ñого, как Firefox/Gecko вкладÑваеÑÑÑ Ð² пÑоизводиÑелÑноÑÑÑ Ð² Ñелом, не заоÑÑÑÑÑ Ð²Ð½Ð¸Ð¼Ð°Ð½Ð¸Ðµ на конкÑеÑнÑÑ Ð¿ÑиложениÑÑ . ÐÐ»Ñ ÑазÑабоÑÑиков и полÑзоваÑелей ÑÑо бÑÐ´ÐµÑ Ð¾ÑÐ²ÐµÑ Ð½Ð° вопÑÐ¾Ñ "Ðак плаÑÑоÑма Ð¿Ð¾Ð¼Ð¾Ð³Ð°ÐµÑ Ð¼Ð½Ðµ?".
Web ÑÐµÑ Ð½Ð¾Ð»Ð¾Ð³Ð¸Ð¸
Web плаÑÑоÑма пÑедоÑÑавлÑÐµÑ Ð¼Ð½Ð¾Ð³Ð¾ инÑÑÑÑменÑов, некоÑоÑÑе из коÑоÑÑÑ
лÑÑÑе подÑ
одÑÑ Ð´Ð»Ñ ÐºÐ¾Ð½ÐºÑеÑнÑÑ
задаÑ, а некоÑоÑÑе - Ñ
Ñже. Ðогика пÑиложений пиÑеÑÑÑ Ð½Ð° JavaScript. ÐÐ»Ñ Ð¾ÑобÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð³ÑаÑики ÑазÑабоÑÑики могÑÑ Ð¸ÑполÑзоваÑÑ HTML или CSS (Ñ.е. иÑполÑзÑÑÑÑÑ Ð²ÑÑокоÑÑовневÑе деклаÑаÑивнÑе ÑзÑки); ÑазÑабоÑÑики Ñакже могÑÑ Ð¸ÑполÑзоваÑÑ Ð½Ð¸Ð·ÐºÐ¾ÑÑовневÑе инÑеÑÑейÑÑ, доÑÑÑпнÑе в <canvas> (вклÑÑÐ°Ñ WebGL). Ðде-Ñо Ð¼ÐµÐ¶Ð´Ñ HTML/CSS и Canvas Ð»ÐµÐ¶Ð¸Ñ SVG, коÑоÑÑй пÑÐµÐ´Ð»Ð°Ð³Ð°ÐµÑ Ð½ÐµÐºÐ¾ÑоÑÑе пÑеимÑÑеÑÑва обеиÑ
ÑиÑÑем.
HTML и CSS знаÑиÑелÑно ÑвелиÑиваÑÑ Ð¿ÑоизводиÑелÑноÑÑÑ, иногда ÑÐ½Ð¸Ð¶Ð°Ñ ÑаÑÑоÑÑ ÐºÐ°Ð´Ñов и не Ð´Ð°Ð²Ð°Ñ ÐºÐ¾Ð½ÑÑолиÑоваÑÑ ÐºÐ°Ð¶Ð´Ñй пикÑÐµÐ»Ñ Ð¿Ñи ÑендеÑе. ТекÑÑ Ð¸ изобÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð¿ÐµÑеÑиÑовÑваÑÑÑÑ Ð°Ð²ÑомаÑиÑеÑки, UI-ÑлеменÑÑ Ð°Ð²ÑомаÑиÑеÑки полÑÑаÑÑ ÑиÑÑемнÑÑ ÑемÑ, а ÑиÑÑема пÑедоÑÑавлÑÐµÑ Ð½ÐµÐºÐ¾ÑоÑÑÑ "вÑÑÑоеннÑÑ" поддеÑÐ¶ÐºÑ Ð´Ð»Ñ Ð½ÐµÐºÐ¾ÑоÑÑÑ ÑлÑÑаев, о коÑоÑÑÑ ÑазÑабоÑÑик Ð¼Ð¾Ð¶ÐµÑ Ð¸ не задÑмÑваÑÑÑÑ Ð¸Ð·Ð½Ð°ÑалÑно. ÐапÑимеÑ, оÑобÑажение конÑенÑа пÑи ÑазнÑÑ ÑазÑеÑениÑÑ .
ÐÐ»ÐµÐ¼ÐµÐ½Ñ Ð¥Ð¾Ð»ÑÑ (canvas) пÑедоÑÑавлÑÐµÑ Ð¿ÑÑмой доÑÑÑп к пикÑелÑÐ½Ð¾Ð¼Ñ Ð±ÑÑеÑÑ, где ÑазÑабоÑÑик Ð¼Ð¾Ð¶ÐµÑ ÑиÑоваÑÑ.ÐÑо даÑÑ ÑазÑабоÑÑÐ¸ÐºÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ ÐºÐ¾Ð½ÑÑолиÑоваÑÑ ÐºÐ°Ð¶Ð´Ñй пикÑÐµÐ»Ñ Ð²Ð¾ вÑÐµÐ¼Ñ ÑендеÑинга, ÑоÑно конÑÑолиÑоваÑÑ ÑаÑÑоÑÑ ÐºÐ°Ð´Ñов; но Ñогда ÑазÑабоÑÑик должен имеÑÑ Ð² Ð²Ð¸Ð´Ñ ÑабоÑÑ Ñ Ð±Ð¾Ð»ÑÑим колиÑеÑÑвом ÑазÑеÑений ÑкÑанов и оÑиенÑаÑий; RTL ÑзÑками и Ñ.д. РазÑабоÑÑики, ÑабоÑаÑÑие напÑÑмÑÑ Ñ Ñ
олÑÑами, иÑполÑзÑÑÑ Ð»Ð¸Ð±Ð¾ знакомое 2D API, либо API WebGL, доÑÑаÑоÑно "близкий к железÑ" и по болÑÑей ÑаÑÑи пÑидеÑживаÑÑийÑÑ OpenGL ES 2.0.
Ðак ÑендеÑÐ¸Ñ Gecko
Ðвижок Gecko JavaScript поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ just-in-time (JIT) компилÑÑиÑ. ÐлагодаÑÑ ÑÑомÑ, логика пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð²ÑполнÑеÑÑÑ Ð¿ÑимеÑно Ñак же, как ÑÑо пÑоиÑÑ Ð¾Ð´Ð¸Ñ Ð² дÑÑÐ³Ð¸Ñ Ð¿ÑиложениÑÑ Ð½Ð° виÑÑÑалÑнÑÑ Ð¼Ð°ÑÐ¸Ð½Ð°Ñ - напÑимеÑ, Java Virtual Machines - а в некоÑоÑÑÑ ÑлÑÑаÑÑ ÑÑÑекÑивноÑÑÑ ÑÑÐ¸Ñ Ð¿Ñиложений близка к "наÑÐ¸Ð²Ð½Ð¾Ð¼Ñ ÐºÐ¾Ð´Ñ".
ÐнÑÑÑÑменÑÑ, необÑ
одимÑе Ð´Ð»Ñ ÑабоÑÑ Ñ HTML, CSS и Canvas опÑимизиÑÐ¾Ð²Ð°Ð½Ñ Ð½ÐµÑколÑкими пÑÑÑми. ÐапÑимеÑ, композиÑÐ¸Ñ (ÑÑап, извеÑÑнÑй как Layout) в HTML/CSS и код, оÑвеÑаÑÑий за гÑаÑÐ¸ÐºÑ Ð² Gecko, ÑÐ´ÐµÐ»Ð°Ð½Ñ Ñаким обÑазом, ÑÑÐ¾Ð±Ñ ÑменÑÑиÑÑ ÐºÐ¾Ð»Ð¸ÑеÑÑво опеÑаÑий ÑевалидаÑии и пеÑеÑиÑовки Ð´Ð»Ñ Ð¾Ð±ÑиÑ
ÑлÑÑаев (напÑимеÑ, ÑкÑоллинг); ÑÑи опÑимизаÑии вклÑÑÐµÐ½Ñ "по ÑмолÑаниÑ", поÑÑÐ¾Ð¼Ñ ÑазÑабоÑÑики полÑзÑÑÑÑÑ Ð¸Ð¼Ð¸ беÑплаÑно. ÐÑÑеÑÑ Ð¿Ð¸ÐºÑелей, оÑÑиÑованнÑÑ
как Ð´Ð»Ñ Gecko "авÑомаÑиÑеÑки", Ñак и Ð´Ð»Ñ canvas "вÑÑÑнÑÑ", минимизиÑÑÑÑ ÐºÐ¾Ð»Ð¸ÑеÑÑво копий, коÑоÑÑе пеÑедаÑÑÑÑ Ð² бÑÑÐµÑ ÐºÐ°Ð´Ñов диÑплеÑ. ЧÑÐ¾Ð±Ñ Ð´Ð¾ÑÑиÑÑ ÑÑого, Gecko ÑÑаÑаеÑÑÑ Ð¸Ð·Ð±ÐµÐ³Ð°ÑÑ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¿ÑомежÑÑоÑнÑÑ
ÑлоÑв (напÑимеÑ, во многиÑ
дÑÑгиÑ
опеÑаÑионнÑÑ
ÑиÑÑемаÑ
ÑоздаÑÑÑÑ Ð¿Ð¸ÐºÑелÑнÑе ÑоновÑе бÑÑеÑÑ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ оÑделÑного пÑиложениÑ), но взамен Gecko иÑполÑзÑÐµÑ ÑпеÑиалÑнÑе ÑÑаÑÑки памÑÑи Ð´Ð»Ñ Ñ
ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð³ÑаÑиÑеÑкиÑ
бÑÑеÑов. Ð ÑÑой памÑÑи Ð¸Ð¼ÐµÐµÑ Ð¿ÑÑмой доÑÑÑп железо, коÑоÑое оÑвеÑÑÑвенно за ÑоÑмиÑование каÑÑинки. СложнÑе ÑÑÐµÐ½Ñ ÑендеÑÑÑÑÑ Ñ Ð¸ÑполÑзованием гÑаÑиÑеÑкого адапÑеÑа (видеокаÑÑÑ). РпÑоÑÑÑе ÑÑенÑ, Ð´Ð»Ñ Ñкономии ÑнеÑгии, ÑендеÑÑÑÑÑ ÑпеÑиалÑнÑм вÑделеннÑм железом Ð´Ð»Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð·Ð¸Ñии, в Ñо вÑемÑ, как гÑаÑиÑеÑкий адапÑÐµÑ Ð½Ð°Ñ
одиÑÑÑ Ð² Ñежиме Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ Ð¸Ð»Ð¸ вÑклÑÑен.
ÐÐ»Ñ Ð¿ÑодвинÑÑÑÑ
пÑиложений полноÑÑÑÑ ÑÑаÑиÑнÑй конÑÐµÐ½Ñ ÑкоÑее ÑвлÑеÑÑÑ Ð¸ÑклÑÑением, Ñем пÑавилом. Такие пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¸ÑполÑзÑÑÑ Ð´Ð¸Ð½Ð°Ð¼Ð¸ÑеÑкий конÑенÑ, анимиÑÑемÑй Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ animation и transition. ÐеÑеÑ
Ð¾Ð´Ñ Ð¸ анимаÑии оÑобенно Ð²Ð°Ð¶Ð½Ñ Ð´Ð»Ñ Ð¿Ñиложений: ÑазÑабоÑÑики могÑÑ Ð¸ÑполÑзоваÑÑ CSS Ð´Ð»Ñ Ð¾Ð±ÑÑÐ²Ð»ÐµÐ½Ð¸Ñ Ñложного Ð¿Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¿ÑоÑÑого вÑÑокоÑÑовнего ÑинÑакÑиÑа. С дÑÑгой ÑÑоÑонÑ, движок Gecko Ñ
оÑоÑо опÑимизиÑован Ð´Ð»Ñ Ñого, ÑÑÐ¾Ð±Ñ ÑендеÑиÑÑ ÑакÑÑ Ð°Ð½Ð¸Ð¼Ð°ÑÐ¸Ñ ÑÑÑекÑивно. Ð Ñелом, обÑепÑинÑÑÑе анимаÑии пеÑедаÑÑÑÑ Ðº обÑабоÑке ÑиÑÑÐµÐ¼Ð½Ð¾Ð¼Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÑикÑ, коÑоÑÑй Ð¼Ð¾Ð¶ÐµÑ Ð¾ÑÑендеÑиÑÑ Ð¸Ñ
в ÑÑÑекÑивном, ÑнеÑгоÑбеÑегаÑÑем Ñежиме.
ÐÑоизводиÑелÑноÑÑÑ Ð¿Ñиложений
ÐÑа ÑекÑÐ¸Ñ Ð¿Ð¾Ð¿ÑÑаеÑÑÑ Ð¾ÑвеÑиÑÑ Ð½Ð° вопÑÐ¾Ñ "как ÑделаÑÑ Ð¿Ñиложение бÑÑÑÑее?".
СкоÑоÑÑÑ Ð·Ð°Ð³ÑÑзки
ÐагÑÑзка пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ð¾Ð´ÐµÐ»ÐµÐ½Ð° на ÑÑи ÑÑапа, коÑоÑÑе влиÑÑÑ Ð½Ð° UPP:
- ÐеÑÐ²Ð°Ñ Ð¾ÑÑиÑовка. ÐоменÑ, когда пÑиложение загÑÑзило доÑÑаÑоÑно даннÑÑ Ð¸ ÑеÑÑÑÑов, ÑÑÐ¾Ð±Ñ Ð¾ÑÑиÑоваÑÑ Ð¿ÐµÑвÑй - наÑалÑнÑй - кадÑ
- ÐаÑало инÑеÑакÑивноÑÑи - напÑимеÑ, когда полÑзоваÑÐµÐ»Ñ ÑÑановиÑÑÑ Ð´Ð¾ÑÑÑпна возможноÑÑÑ Ð½Ð°Ð¶Ð°ÑÑ ÐºÐ½Ð¾Ð¿ÐºÑ, а пÑиложение Ð¼Ð¾Ð¶ÐµÑ ÐµÐ¼Ñ Ð¾ÑвеÑиÑÑ
- ÐÐ¾Ð»Ð½Ð°Ñ Ð·Ð°Ð³ÑÑзка - напÑимеÑ, когда вÑе полÑзоваÑелÑÑкие алÑÐ±Ð¾Ð¼Ñ Ð¿ÐµÑеÑиÑÐ»ÐµÐ½Ñ Ð² мÑзÑкалÑном плееÑе
СекÑÐµÑ Ð±ÑÑÑÑой загÑÑзки ÑÑебÑÐµÑ Ð´Ð²ÑÑ Ð²ÐµÑей: UPP (оÑÑÑÐ°ÐµÐ¼Ð°Ñ Ð¿Ð¾Ð»ÑзоваÑелем ÑкоÑоÑÑÑ) - ÑÑо единÑÑвенное, ÑÑо Ð¸Ð¼ÐµÐµÑ Ð·Ð½Ð°Ñение; ÑÑа ÑкоÑоÑÑÑ Ð·Ð°Ð²Ð¸ÑÐ¸Ñ Ð¾Ñ ÐºÑиÑиÑеÑкого пÑÑи ÑендеÑинга (Critical Rendering Path). ÐÑиÑиÑеÑкий пÑÑÑ - ÑÑо единÑÑвеннÑй и Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ñй код, коÑоÑÑй должен запÑÑкаÑÑ Ð¿ÐµÑеÑиÑленнÑе вÑÑе ÑобÑÑиÑ.
ÐапÑимеÑ, оÑÑиÑовка пеÑвого кадÑа, коÑоÑÑй ÑодеÑÐ¶Ð¸Ñ Ð² Ñебе Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ñй HTML и CSS вклÑÑаеÑ:
- ÐÑаÑÐ·ÐµÑ Ð´Ð¾Ð»Ð¶ÐµÐ½ ÑпаÑÑиÑÑ HTML
- DOM должен бÑÑÑ Ð¿Ð¾ÑÑÑоен Ð´Ð»Ñ ÑÑого HTML
- РеÑÑÑÑÑ (изобÑажениÑ, видео и дÑ.) Ð´Ð»Ñ ÑÑой модели DOM Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ Ð·Ð°Ð³ÑÑÐ¶ÐµÐ½Ñ Ð¸ декодиÑованÑ
- CSS ÑÑили Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ Ð¿ÑÐ¸Ð¼ÐµÐ½ÐµÐ½Ñ Ðº DOM и должен бÑÑÑ ÑÑоÑмиÑован CSSOM
- СÑилизованнÑй ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ Ð´Ð¾Ð»Ð¶ÐµÐ½ бÑÑÑ Ð¿Ð¾Ð´Ð³Ð¾Ñовлен к ÑендеÑÑ
Ð ÑÑом ÑпиÑке Ð²Ñ Ð½Ðµ ÑвидиÑе "загÑÑзиÑÑ JS Ñайл, коÑоÑÑй нÑжен Ð´Ð»Ñ Ð²ÑоÑоÑÑепенного менÑ", "забÑаÑÑ Ð¸ декодиÑоваÑÑ Ð¸Ð·Ð¾Ð±ÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð´Ð»Ñ ÑпиÑка доÑÑижений" и Ñ.п. ÐÑа ÑабоÑа не должна вÑполнÑÑÑÑÑ Ð¿Ñи запÑÑке пÑиложениÑ.
ÐвÑÑÐ¸Ñ Ð¾Ñевидно, но Ð´Ð»Ñ Ð´Ð¾ÑÑÐ¸Ð¶ÐµÐ½Ð¸Ñ Ð»ÑÑÑей воÑпÑинимаемой ÑкоÑоÑÑи загÑÑзки нÑжно запÑÑкаÑÑ ÑолÑко ÑÐ¾Ñ ÐºÐ¾Ð´, коÑоÑÑй Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼ и кÑиÑиÑен Ð´Ð»Ñ Ð·Ð°Ð¿ÑÑка пÑиложениÑ. ÐоÑоÑкий пÑÑÑ ÑвелиÑÐ¸Ð²Ð°ÐµÑ ÑкоÑоÑÑÑ.
Web-плаÑÑоÑма оÑÐµÐ½Ñ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñна. JavaScript - ÑÑо динамиÑеÑки ÑипизиÑованнÑй ÑзÑк, а Web ÑазÑеÑÐ°ÐµÑ Ð·Ð°Ð³ÑÑжаÑÑ ÐºÐ¾Ð´, HTML, CSS, изобÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð¸ дÑÑгие ÑеÑÑÑÑÑ Ð´Ð¸Ð½Ð°Ð¼Ð¸ÑеÑки. ÐÑи ÑÑнкÑии могÑÑ Ð±ÑÑÑ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ñ Ð´Ð»Ñ Ñого, ÑÑÐ¾Ð±Ñ Ð¾ÑложиÑÑ Ð·Ð°Ð³ÑÑÐ·ÐºÑ ÑеÑÑÑÑов; ÑÑÐ¾Ð±Ñ ÑокÑаÑиÑÑ ÐºÑиÑиÑеÑкий пÑÑÑ, подвинÑв загÑÑÐ·ÐºÑ Ð»Ð¸Ñнего конÑенÑа на неÑколÑко моменÑов позже. Такой Ð¿Ð¾Ð´Ñ Ð¾Ð´ назÑваеÑÑÑ "ленивой загÑÑзкой".
ÐÑÑÐ³Ð°Ñ Ð¿Ñоблема, коÑоÑÐ°Ñ Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑивеÑÑи к ненÑÐ¶Ð½Ð¾Ð¼Ñ Ð¿ÑоÑÑÐ¾Ñ - ÑÑо ожидание оÑвеÑа на запÑоÑÑ (напÑимеÑ, запÑÐ¾Ñ Ðº базе даннÑÑ ). ЧÑÐ¾Ð±Ñ Ð¸Ð·Ð±ÐµÐ³Ð°ÑÑ ÑÑой пÑоблемÑ, пÑиложение должно запÑаÑиваÑÑ Ð´Ð°Ð½Ð½Ñе как можно ÑанÑÑе, еÑÑ Ð²Ð¾ вÑÐµÐ¼Ñ Ð·Ð°Ð¿ÑÑка пÑогÑаммÑ. Тогда к моменÑÑ, когда даннÑе понадобÑÑÑÑ - они Ñже бÑдÑÑ Ð² ÑиÑÑеме и пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð½Ðµ пÑидÑÑÑÑ Ð¶Ð´Ð°ÑÑ.
ÐÑимеÑание: ÐÐ»Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑной инÑоÑмаÑии об ÑÑкоÑении запÑÑка ознакомÑÑеÑÑ Ñ ÐпÑимизаÑией пÑоизводиÑелÑноÑÑи запÑÑка.
СледÑÐµÑ Ñакже оÑмеÑиÑÑ, ÑÑо ÑеÑÑÑÑÑ, закеÑиÑованнÑе локалÑно, могÑÑ Ð±ÑÑÑ Ð·Ð°Ð³ÑÑÐ¶ÐµÐ½Ñ Ð³Ð¾Ñаздо бÑÑÑÑее, Ñем динамиÑеÑкие даннÑе, загÑÑженнÑе ÑеÑез мобилÑнÑÑ ÑеÑÑ Ñ ÐµÑ Ð·Ð°Ð´ÐµÑжками или Ñзким каналом. ÐокалÑное кеÑиÑование и ÑабоÑа в оÑлайне могÑÑ Ð±ÑÑÑ Ð´Ð¾ÑÑигнÑÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Service Workers. См. Making PWAs work offline with Service workers Ð´Ð»Ñ Ð¿Ð¾Ð´ÑобноÑÑей.
ЧаÑÑоÑа кадÑов
ÐеÑÐ²Ð°Ñ Ð²Ð°Ð¶Ð½Ð°Ñ Ð²ÐµÑÑ Ð´Ð»Ñ Ð²ÑÑокой ÑаÑÑоÑÑ ÐºÐ°Ð´Ñов - ÑÑо вÑÐ±Ð¾Ñ Ð¿ÑавилÑного инÑÑÑÑменÑа. ÐÑполÑзÑйÑе HTML и CSS Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ ÐºÐ¾Ð½ÑенÑа, коÑоÑÑй бÑÐ´ÐµÑ Ð² оÑновном ÑÑаÑиÑеÑким, пÑокÑÑÑиваемÑм и Ñедко анимиÑÑемÑм. ÐÑполÑзÑйÑе Canvas Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð²ÑÑокодинамиÑного конÑенÑа, напÑимеÑ, игÑ, коÑоÑÑе ÑÑебÑÑÑ ÑеÑÑÑзного конÑÑÐ¾Ð»Ñ ÑендеÑинга и не нÑждаÑÑÑÑ Ð² ÑÐµÐ¼Ð°Ñ .
ÐÑи оÑÑиÑовÑвании конÑенÑа в Canvas, ÑазÑабоÑÑик должен Ñам позабоÑиÑÑÑÑ Ð¾ доÑÑижении Ñелей по ÑаÑÑоÑе кадÑов, Ð²ÐµÐ´Ñ Ð¾Ð½ полÑÑÐ°ÐµÑ Ð¿Ð¾Ð»Ð½Ñй конÑÑÐ¾Ð»Ñ Ð½Ð°Ð´ вÑем, ÑÑо оÑÑиÑовÑваеÑÑÑ.
ÐÑи иÑполÑзовании HTML и CSS ÑазÑабоÑÑÐ¸ÐºÑ Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ иÑполÑзоваÑÑ Ð¿ÑавилÑнÑе пÑимиÑивÑ. Firefox оÑÐµÐ½Ñ Ñ Ð¾ÑоÑо опÑимизиÑован Ð´Ð»Ñ ÑкÑолла лÑбого конÑенÑа. ÐбÑÑно ÑÑо не ÑвлÑеÑÑÑ Ð¿Ñоблемой. Ðо оÑÐµÐ½Ñ ÑаÑÑо, ÑÐ°Ð·Ð¼ÐµÐ½Ð¸Ð²Ð°Ñ ÐºÐ°ÑеÑÑво и ÑÑабилÑноÑÑÑ Ð½Ð° ÑкоÑоÑÑÑ, Ð¼Ñ Ð¸Ð´Ñм на ÑÑ Ð¸ÑÑениÑ, коÑоÑÑе могÑÑ "пеÑеопÑимизиÑоваÑÑ" ÑÑÑаниÑÑ Ñак, ÑÑо ÑаÑÑоÑа кадÑов бÑÐ´ÐµÑ Ð²ÑÑе нÑжной нам. Так как глаз вÑÑ Ñавно Ñлабо ÑазлиÑÐ°ÐµÑ FPS болÑÑе 60, Ð½ÐµÑ Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ÑÑи в ÑÐ°ÐºÐ¸Ñ Ð¾Ð¿ÑимизаÑиÑÑ . Ðдна из ÑÐ°ÐºÐ¸Ñ Ð¾Ð¿ÑимизаÑий - иÑполÑзование ÑÑаÑиÑеÑкого ÑендеÑа вмеÑÑо CSS-гÑадиенÑа. РнекоÑоÑÑÑ ÑлÑÑаÑÑ ÑÑо излиÑне. ЧÑÐ¾Ð±Ñ Ð½Ðµ пÑименÑÑÑ Ð¾Ð¿ÑимизаÑиÑ, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе воÑполÑзоваÑÑÑÑ Ð¼ÐµÐ´Ð¸Ð°Ð²ÑÑажениÑми, коÑоÑÑе позволÑÑ Ð¸ÑполÑзоваÑÑ Ð¿Ð¾Ð´Ð¾Ð±Ð½Ñе ÑеÑÐµÐ½Ð¸Ñ ÑолÑко Ð´Ð»Ñ ÐºÐ¾Ð½ÐºÑеÑнÑÑ ÑÑÑÑойÑÑв.
ÐножеÑÑво пÑиложений иÑполÑзÑÑÑ Transitions и Animations Ð´Ð»Ñ Ð¿ÐµÑÐµÑ Ð¾Ð´Ð° Ð¼ÐµÐ¶Ð´Ñ ÑÑÑаниÑами или панелÑми. ÐапÑимеÑ, когда полÑзоваÑÐµÐ»Ñ Ð½Ð°Ð¶Ð¸Ð¼Ð°ÐµÑ ÐºÐ½Ð¾Ð¿ÐºÑ "ÐаÑÑÑойки", ÑÑÐ¾Ð±Ñ Ð¿ÐµÑейÑи на дÑÑгой ÑкÑан; или Ð´Ð»Ñ Ð²Ñзова поп-апа. Firefox опÑимизиÑован Ð´Ð»Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¿ÐµÑÐµÑ Ð¾Ð´Ð¾Ð² и анимаÑий Ð´Ð»Ñ ÑÑен, коÑоÑÑе:
- ÐÑполÑзÑÑÑ ÑÑÑаниÑÑ/панели ÑавнÑе по ÑазмеÑÑ Ð´Ð¸ÑÐ¿Ð»ÐµÑ Ð¸Ð»Ð¸ менÑÑе
- ÐÑполÑзÑÑÑ Ð´Ð»Ñ Ð¿ÐµÑеÑ
одов/анимаÑий ÑвойÑÑва
TransformиOpacity
ÐеÑÐµÑ Ð¾Ð´Ñ Ð¸ анимаÑии, коÑоÑÑе пÑидеÑживаÑÑÑÑ ÑÑÐ¸Ñ Ð¿Ñавил, бÑдÑÑ Ð²ÑгÑÑÐ¶ÐµÐ½Ñ Ð² ÑиÑÑемнÑй компоновÑик и вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ñ Ð¼Ð°ÐºÑималÑно ÑÑÑекÑивно.
ÐÑполÑзование памÑÑи и ÑнеÑгии
ÐÑоблема ÑлÑÑÑÐµÐ½Ð¸Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð°Ð¼ÑÑи и ÑнеÑгии Ñак же важна Ð´Ð»Ñ ÑÑкоÑÐµÐ½Ð¸Ñ Ð·Ð°Ð¿ÑÑка: не делайÑе ненÑжнÑÑ ÑабоÑÑ Ð¸ не загÑÑжайÑе ненÑжнÑе ÑеÑÑÑÑÑ. ÐÑполÑзÑйÑе ÑÑÑекÑивнÑе ÑÑÑÑкÑÑÑÑ Ð´Ð°Ð½Ð½ÑÑ Ð¸ ÑделÑйÑе внимание опÑимизаÑии ÑеÑÑÑÑов.
СовÑеменнÑе ЦÐУ могÑÑ ÑабоÑаÑÑ Ð² Ñежиме ÑнеÑгоÑбеÑежениÑ, когда они не задейÑÑвованÑ. ÐÑиложениÑ, коÑоÑÑе поÑÑоÑнно запÑÑкаÑÑ ÑаймеÑÑ Ð¸Ð»Ð¸ пÑодолжаÑÑ Ð½ÐµÐ½ÑжнÑе анимаÑии, меÑаÑÑ Ð¿ÑоÑеÑÑоÑÑ Ð¿ÐµÑейÑи в Ñежим ÑнеÑгоÑбеÑежениÑ. ÐÑÑекÑивнÑе пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð½Ðµ Ð´Ð¾Ð»Ð¶Ð½Ñ Ñак делаÑÑ.
СовеÑÑ Ðº пÑÐ¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð² коде
СледÑÑÑие ÑовеÑÑ Ð¿Ð¾Ð¼Ð¾Ð³ÑÑ Ð²Ð°Ð¼ ÑлÑÑÑиÑÑ Ð¾Ð´Ð¸Ð½ или неÑколÑко ÑакÑоÑов пÑоизводиÑелÑноÑÑи, коÑоÑÑе Ð¼Ñ Ð¾Ð±ÑÑждали Ñанее.
ÐÑполÑзÑйÑе CSS animation и transition
ÐмеÑÑо иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÑÑнкÑии animate() какой-нибÑÐ´Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñеки, коÑоÑаÑ, веÑоÑÑно, иÑполÑзÑÐµÑ Ð¼Ð½Ð¾Ð³Ð¾ плоÑ
иÑ
ÑеÑений (напÑÐ¸Ð¼ÐµÑ (window.setTimeout() или анимиÑование top / left), иÑполÑзÑйÑе CSS-анимаÑии. Ðо многиÑ
ÑлÑÑаÑÑ
, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ CSS Transitions. ÐÑполÑзование ÑÑиÑ
ÑвойÑÑв поможеÑ, Ñак как бÑаÑÐ·ÐµÑ ÑпÑоекÑиÑован Ñак, ÑÑÐ¾Ð±Ñ Ð¾Ð¿ÑимизиÑоваÑÑ ÑÑи ÑÑÑекÑÑ Ð¸ пеÑеноÑиÑÑ ÑаÑÑÑ Ð²ÑÑиÑлений на GPU, ÑÑÐ¾Ð±Ñ Ð¾Ð½Ð¸ ÑабоÑали плавно и Ñ Ð¼Ð¸Ð½Ð¸Ð¼Ð°Ð»ÑнÑм влиÑнием на пÑоÑеÑÑоÑ. ÐÑÑгое пÑеимÑÑеÑÑво - Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе опÑеделиÑÑ ÑÑи анимаÑии в CSS деклаÑаÑивнÑм обÑазом, а не в бизнеÑ-логике пÑиложениÑ.
CSS-анимаÑии даÑÑ Ð²Ð°Ð¼ оÑÐµÐ½Ñ ÑоÑнÑй конÑÑÐ¾Ð»Ñ ÑÑÑекÑов, еÑли Ð²Ñ Ð¸ÑполÑзÑеÑе keyframes. Ðолее Ñого, Ð²Ñ ÑможеÑе оÑÑлеживаÑÑ ÑобÑÑиÑ, коÑоÑÑе пÑоиÑÑ
одÑÑ Ð²Ð¾ вÑÐµÐ¼Ñ Ð°Ð½Ð¸Ð¼Ð°Ñии, Ñак как оÑновной поÑок обÑабоÑки не блокиÑÑеÑÑÑ. ÐÑ Ð¼Ð¾Ð¶ÐµÑе Ñ Ð»ÑгкоÑÑÑÑ Ð·Ð°Ð¿ÑÑкаÑÑ Ð°Ð½Ð¸Ð¼Ð°Ñии Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ :hover, :focus или :target. Ðли динамиÑеÑки добавлÑÑ Ð¸Ð»Ð¸ ÑдалÑÑ ÐºÐ»Ð°ÑÑÑ ÑлеменÑа.
ÐÑли Ð²Ñ Ñ Ð¾ÑиÑе ÑоздаваÑÑ Ð°Ð½Ð¸Ð¼Ð°Ñии "на леÑÑ" или изменÑÑÑ Ð¸Ñ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ JavaScript, ÐÐ¶ÐµÐ¹Ð¼Ñ Ðонг напиÑал пÑоÑÑÑÑ Ð±Ð¸Ð±Ð»Ð¸Ð¾ÑÐµÐºÑ Ð´Ð»Ñ ÑÑого - CSS-animations.js.
ÐÑполÑзÑйÑе CSS ÑÑанÑÑоÑмаÑиÑ
ÐмеÑÑо Ñого, ÑÑÐ¾Ð±Ñ Ð¸Ð·Ð¼ÐµÐ½ÑÑÑ Ð°Ð±ÑолÑÑное позиÑиониÑование и возиÑÑÑÑ Ñ ÑÑой маÑемаÑикой вÑÑÑнÑÑ, иÑполÑзÑйÑе ÑвойÑÑво transform, ÑÑÐ¾Ð±Ñ Ð¸Ð·Ð¼ÐµÐ½Ð¸ÑÑ Ð¿Ð¾Ð·Ð¸ÑиÑ, маÑÑÑаб и некоÑоÑÑе дÑÑгие аÑпекÑÑ Ð²Ð°Ñего конÑенÑа. Ðменно Ñак Ð²Ñ Ð¸ÑполÑзÑеÑе аппаÑаÑное ÑÑкоÑение. ÐÑаÑÐ·ÐµÑ ÑÐ¼ÐµÐµÑ Ð¿ÐµÑедаваÑÑ Ñакие задаÑи гÑаÑиÑеÑÐºÐ¾Ð¼Ñ Ð¿ÑоÑеÑÑоÑÑ, Ð´Ð°Ð²Ð°Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ Ð¦ÐУ занÑÑÑÑÑ Ð´ÑÑгими важнÑми веÑами.
Ð ÑÐ¾Ð¼Ñ Ð¶Ðµ, ÑÑанÑÑоÑмаÑÐ¸Ñ Ð´Ð°ÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑи, коÑоÑÑÑ
в ином ÑлÑÑае Ñ Ð²Ð°Ñ Ð½Ðµ бÑло бÑ. ÐÑ Ð½Ðµ ÑолÑко можеÑе манипÑлиÑоваÑÑ ÑлеменÑом в двÑмеÑном пÑоÑÑÑанÑÑве, но можеÑе ÑÑанÑÑоÑмиÑоваÑÑ ÐµÐ³Ð¾ в 3D, изменÑÑÑ ÐµÐ³Ð¾ наклон (ÑкаÑиваÑÑ, skew), повоÑаÑиваÑÑ Ð¸ дÑ. Ðол ÐйÑÐ¸Ñ Ð¾Ð¿Ñбликовал ÑÑаÑÑÑ in-depth analysis of the benefits of translate(), в коÑоÑой пÑоанализиÑовал ÑабоÑÑ translate Ñ ÑоÑки зÑÐµÐ½Ð¸Ñ Ð¿ÑоизводиÑелÑноÑÑи. ÐÑполÑзÑÑ translate/transform Ð²Ñ Ð¸ÑполÑзÑеÑе пÑавилÑнÑй деклаÑаÑивнÑй инÑÑÑÑÐ¼ÐµÐ½Ñ Ð¸ возлагаеÑе оÑвеÑÑÑвенноÑÑÑ Ð·Ð° его опÑимизаÑÐ¸Ñ Ð½Ð° бÑаÑзеÑ. ÐÑ Ñак же полÑÑаеÑе возможноÑÑÑ Ñ Ð»ÑгкоÑÑÑÑ Ð¿Ð¾Ð·Ð¸ÑиониÑоваÑÑ ÑлеменÑÑ. ÐÑли Ð²Ñ Ð±ÑдеÑе иÑполÑзоваÑÑ ÑолÑко top и left, вам пÑидÑÑÑÑ Ð½Ð°Ð¿Ð¸ÑаÑÑ Ð½ÐµÐºÐ¾ÑоÑÑй дополниÑелÑнÑй код, ÑÑÐ¾Ð±Ñ Ð¿ÑедÑÑмоÑÑеÑÑ Ð½ÐµÐºÐ¾ÑоÑÑе оÑобенноÑÑи Ñакого позиÑиониÑованиÑ. РпоÑледний бонÑÑ - Ñ Transform / Translate Ð²Ñ Ð±ÑдеÑе ÑабоÑаÑÑ Ð¿ÑимеÑно Ñак же, как ÑабоÑали Ð±Ñ Ñ ÑлеменÑом canvas.
ÐÑимеÑание:
РнекоÑоÑÑÑ
ÑлÑÑаÑÑ
(в завиÑимоÑÑи Ð¾Ñ Ð¿Ð»Ð°ÑÑоÑмÑ) вам Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾Ð½Ð°Ð´Ð¾Ð±Ð¸ÑÑÑÑ Ð´Ð¾Ð±Ð°Ð²Ð¸ÑÑ ÑвойÑÑво translateZ(0.1), еÑли Ð²Ñ Ñ
оÑиÑе заÑÑавиÑÑ ÐºÐ»Ð¸ÐµÐ½Ñа пеÑенеÑÑи вÑÑиÑление анимаÑий на гÑаÑиÑеÑкий адапÑеÑ. Ðак бÑло ÑпомÑнÑÑо вÑÑе, ÑÑо Ð¼Ð¾Ð¶ÐµÑ ÑлÑÑÑиÑÑ Ð¿ÑоизводиÑелÑноÑÑÑ, но ÑвелиÑÐ¸Ñ Ð¿Ð¾ÑÑебление памÑÑи. Ðакое из зол - менÑÑее - ÑеÑаÑÑ Ð²Ð°Ð¼. ÐÑоÑеÑÑиÑÑйÑе оба ваÑианÑа и вÑÑÑниÑе, ÑÑо лÑÑÑе подÑ
Ð¾Ð´Ð¸Ñ Ð´Ð»Ñ Ð²Ð°Ñего пÑиложениÑ.
ÐÑполÑзÑйÑе requestAnimationFrame() вмеÑÑо setInterval()
ÐÑÐ·Ð¾Ð²Ñ window.setInterval() запÑÑкаÑÑ ÐºÐ¾Ð´ Ñ ÑÑÑÑом пÑедполагаемой ÑаÑÑоÑÑ ÐºÐ°Ð´Ñов. Ðднако, ÑÑа Ð¾Ð¶Ð¸Ð´Ð°ÐµÐ¼Ð°Ñ ÑаÑÑоÑа и ÑакÑиÑеÑÐºÐ°Ñ Ð½Ðµ вÑегда ÑовпадаÑÑ. SetInternal говоÑÐ¸Ñ Ð±ÑаÑзеÑÑ "наÑиÑÑй ÑезÑлÑÑаÑÑ", даже еÑли бÑаÑÐ·ÐµÑ Ð½Ðµ занимаеÑÑÑ ÑейÑÐ°Ñ Ð¾ÑÑиÑовкой - Ñакое ÑлÑÑаеÑÑÑ, когда гÑаÑиÑеÑкий адапÑÐµÑ ÐµÑÑ Ð½Ðµ доÑÑл до ÑледÑÑÑего Ñикла Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ ÑкÑана. Такое неÑовпадение Ñаймингов - ÑÑезмеÑÐ½Ð°Ñ ÑаÑÑÑаÑа пÑоÑеÑÑоÑного вÑемени и даже Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑиводиÑÑ Ðº ÑÐ½Ð¸Ð¶ÐµÐ½Ð¸Ñ ÑÑока ÑлÑÐ¶Ð±Ñ Ð°ÐºÐºÑмÑлÑÑоÑов полÑзоваÑелÑÑкого ÑÑÑÑойÑÑв.
ÐмеÑÑо ÑÑого, вам необÑ
одимо иÑполÑзоваÑÑ window.requestAnimationFrame(). ÐÑа ÑÑнкÑÐ¸Ñ Ð¶Ð´ÑÑ, пока ÐºÐ»Ð¸ÐµÐ½Ñ Ð½Ðµ бÑÐ´ÐµÑ Ð³Ð¾Ñов к ÑоÑмиÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÑледÑÑÑего кадÑа анимаÑии и не бÑÐ´ÐµÑ Ð´Ð¾ÑаждаÑÑ Ñвоими запÑоÑами аппаÑаÑнÑÑ ÑаÑÑÑ ÑÑÑÑойÑÑва, еÑли ÑÑÑÑойÑÑво не занимаеÑÑÑ Ð² даннÑй Ð¼Ð¾Ð¼ÐµÐ½Ñ ÑендеÑингом. ÐÑÑгое пÑеимÑÑеÑÑво ÑÑого API в Ñом, ÑÑо Ñакие анимаÑии не бÑдÑÑ Ð·Ð°Ð¿ÑÑкаÑÑÑÑ, пока ваÑе пÑиложение не видно на ÑкÑане (напÑимеÑ, еÑли оно вÑполнÑеÑÑÑ Ð² Ñоне или занимаеÑÑÑ Ð´ÑÑгими опеÑаÑиÑми). ÐÑо ÑоÑ
ÑÐ°Ð½Ð¸Ñ Ð±Ð°ÑаÑÐµÑ Ð¸ заÑиÑÐ¸Ñ Ð²Ð°Ñ Ð¾Ñ Ð¿ÑоклÑÑий, коÑоÑÑе полÑзоваÑели бÑдÑÑ Ð²ÑкÑикиваÑÑ Ð² небо.
ÐелайÑе ÑобÑÑÐ¸Ñ Ð¼Ð³Ð½Ð¾Ð²ÐµÐ½Ð½Ñми
Ðак ÑÑаÑомоднÑе, забоÑÑÑиеÑÑ Ð¾ доÑÑÑпноÑÑи веб-ÑазÑабоÑÑики, Ð¼Ñ Ð»Ñбим ÑобÑÑие нажаÑиÑ, Ñак как оно Ñакже ÑÑабаÑÑÐ²Ð°ÐµÑ Ð¸ Ð´Ð»Ñ Ð²Ð²Ð¾Ð´Ð° Ñ ÐºÐ»Ð°Ð²Ð¸Ð°ÑÑÑÑ. Ðа мобилÑнÑÑ
ÑÑÑÑойÑÑваÑ
ÑÑо ÑабоÑÐ°ÐµÑ Ð¸Ð½Ð°Ñе. ÐÑ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¸ÑполÑзоваÑÑ touchstart и touchend, а не click. ÐÑиÑина ÑÑÐ¾Ð¼Ñ - в мобилÑнÑÑ
ÑÑÑÑойÑÑваÑ
ÑÑабаÑÑÐ²Ð°ÐµÑ Ð·Ð°Ð´ÐµÑжка в неÑколÑко ÑоÑен миллиÑекÑнд Ð¼ÐµÐ¶Ð´Ñ ÐºÐ°Ñанием ÑкÑана и запÑÑком обÑабоÑÑика click. Ðз-за ÑÑого пÑиложение Ð¼Ð¾Ð¶ÐµÑ Ð¾ÑÑÑаÑÑÑÑ Ð¼ÐµÐ´Ð»ÐµÐ½Ð½Ñм. ÐÑли Ð²Ñ Ð±ÑдеÑе ÑеÑÑиÑоваÑÑ Ð²Ð°Ñе пÑиложение на пÑÐµÐ´Ð¼ÐµÑ ÑабоÑÑ Ñ ÐºÐ°ÑаниÑми, Ð²Ñ Ð½Ðµ пожеÑÑвÑеÑе доÑÑÑпноÑÑÑÑ. ÐÑоме Ñого, ÑÑÑеÑÑвÑÑÑ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñеки, коÑоÑÑе ÑÑкоÑÑÑ ÑазÑабоÑкÑ. ÐапÑимеÑ, Financial Times иÑполÑзÑÐµÑ Ð±Ð¸Ð±Ð»Ð¸Ð¾ÑÐµÐºÑ fastclick Ð´Ð»Ñ Ð¾Ð±ÑабоÑки.
ÐеÑжиÑе инÑеÑÑÐµÐ¹Ñ Ð¿ÑоÑÑÑм
Ðдна из ÑамÑÑ Ð±Ð¾Ð»ÑÑÐ¸Ñ Ð¿Ñоблем, коÑоÑÑÑ Ð¼Ñ Ð½Ð°Ñли в HTML5 пÑиложениÑÑ , заклÑÑаеÑÑÑ Ð² Ñом, ÑÑо пеÑÐµÐ½Ð¾Ñ Ð±Ð¾Ð»ÑÑого колиÑеÑÑва DOM ÑлеменÑов Ð´ÐµÐ»Ð°ÐµÑ Ð¿Ñиложение медленнÑм - оÑобенно, еÑли в ÑÑÐ¸Ñ ÑлеменÑÐ°Ñ Ð¼Ð½Ð¾Ð³Ð¾ гÑадиенÑов и Ñеней. УпÑоÑайÑе Ñо, как вÑглÑÐ´Ð¸Ñ Ð²Ð°Ñе пÑиложение и пеÑедвигайÑе пÑокÑиÑÑÑÑий ÑлеменÑ, когда вÑполнÑеÑе Drag And Drop - ÑÑо ÑилÑно ÑÑкоÑÐ¸Ñ ÑабоÑÑ.
Ðогда, напÑимеÑ, Ñ Ð²Ð°Ñ ÐµÑÑÑ Ð±Ð¾Ð»ÑÑой ÑпиÑок ÑлеменÑов (Ñкажем, ÑвиÑов), не пеÑемеÑайÑе Ð¸Ñ Ð²Ñе. ÐмеÑÑо ÑÑого, деÑжиÑе в ваÑем DOM-деÑеве ÑолÑко Ñе ÑлеменÑÑ, коÑоÑÑе Ð²Ð¸Ð´Ð¸Ð¼Ñ Ð¸ неÑколÑко за облаÑÑÑÑ Ð²Ð¸Ð´Ð¸Ð¼Ð¾ÑÑи, ÑÑÐ¾Ð±Ñ Ð¿Ñи ÑкÑолле не бÑло замеÑно моÑгание. ÐÑÑалÑнÑе - пÑÑÑÑÑе. Ð¡Ð¾Ñ ÑанÑйÑе даннÑе в JavaScript обÑекÑÐ°Ñ , вмеÑÑо Ñ ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ Ð¸ доÑÑÑпа к ним в DOM. ÐÑмайÑе об ÑкÑане, как об ÑÑÑÑойÑÑве пÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼ÑÑ Ð´Ð°Ð½Ð½ÑÑ , а не вÑÐµÑ . ÐÑо не ознаÑаеÑ, ÑÑо Ð²Ñ Ð½Ðµ можеÑе иÑполÑзоваÑÑ HTML, как иÑÑоÑник даннÑÑ ; пÑоÑÑо ÑиÑайÑе его один Ñаз, а заÑем пÑодвигайÑеÑÑ Ð½Ð° 10 ÑлеменÑов, изменÑÑ ÑодеÑжимое пеÑвого и поÑледнего ÑлеменÑа, ÑоглаÑно Ð¸Ñ Ð¿Ð¾Ð·Ð¸ÑиÑм в ÑпиÑке, вмеÑÑо Ñого, ÑÑÐ¾Ð±Ñ Ð´Ð²Ð¸Ð³Ð°ÑÑ 100 ÑлеменÑов, коÑоÑÑе Ñже невидимÑ. ÐодобнÑй ÑÑÑк ÑÑабоÑÐ°ÐµÑ Ð¸ в игÑÐ°Ñ Ñо ÑпÑайÑами: еÑли они не Ð²Ð¸Ð´Ð½Ñ Ð½Ð° ÑкÑане, Ð½ÐµÑ Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ÑÑи запÑаÑиваÑÑ Ð¸Ñ . ÐмеÑÑо ÑÑого пеÑеиÑполÑзÑйÑе ÑлеменÑÑ, коÑоÑÑе вÑÑ Ð¾Ð´ÑÑ Ð·Ð° пÑÐµÐ´ÐµÐ»Ñ ÑкÑана, в Ñо вÑÐµÐ¼Ñ ÐºÐ°Ðº новÑе Ð²Ñ Ð¾Ð´ÑÑ.
ÐбÑий анализ пÑоизводиÑелÑноÑÑи
Firefox, Chrome и дÑÑгие бÑаÑзеÑÑ Ð¿ÑедоÑÑавлÑÑÑ Ð²ÑÑÑоеннÑе инÑÑÑÑменÑÑ, коÑоÑÑе могÑÑ Ð¿Ð¾Ð¼Ð¾ÑÑ Ð²Ð°Ð¼ диагноÑÑиÑоваÑÑ Ð¼ÐµÐ´Ð»ÐµÐ½Ð½Ñй ÑендеÑинг. Ð ÑаÑÑноÑÑи, Firefox's Network Monitor Ð¿Ð¾ÐºÐ°Ð¶ÐµÑ ÑоÑное вÑемÑ, когда пÑоизоÑÑл каждÑй ÑеÑевой запÑоÑ, наÑколÑко болÑÑим он бÑл и как долго обÑабаÑÑвалÑÑ.

ÐÑли на ваÑей ÑÑÑаниÑе еÑÑÑ JavaScript, коÑоÑÑй вÑполнÑеÑÑÑ Ð¾ÑÐµÐ½Ñ Ð´Ð¾Ð»Ð³Ð¾, JavaScript profiler ÑÐºÐ°Ð¶ÐµÑ Ð½Ð° наиболее медленнÑе ÑÑÑоки кода.

ÐÑÑÑоеннÑй Gecko Profiler - оÑÐµÐ½Ñ Ð¿Ð¾Ð»ÐµÐ·Ð½Ñй инÑÑÑÑменÑ, коÑоÑÑй позволÑÐµÑ Ð²Ð°Ð¼ полÑÑиÑÑ ÐµÑÑ Ð±Ð¾Ð»ÐµÐµ подÑобнÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ Ñом, какие ÑаÑÑи кода ÑабоÑаÑÑ Ð¼ÐµÐ´Ð»ÐµÐ½Ð½Ð¾. ÐÑо доволÑно ÑложнÑй инÑÑÑÑменÑ, но он пÑедоÑÑавлÑÐµÑ Ð¼Ð½Ð¾Ð¶ÐµÑÑво деÑалей.

ÐÑимеÑание: Ðожно иÑполÑзоваÑÑ ÑÑи инÑÑÑÑменÑÑ Ð¸ в Android бÑаÑзеÑе, запÑÑÑив Firefox и вклÑÑив remote debugging.
ÐапÑимеÑ, множеÑÑвеннÑе ÑеÑевÑе запÑоÑÑ Ð² мобилÑной ÑеÑи занимаÑÑ Ð±Ð¾Ð»ÑÑе вÑемени. РендеÑинг болÑÑÐ¸Ñ Ð¸Ð·Ð¾Ð±Ñажений и CSS гÑадиенÑов Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑоиÑÑ Ð¾Ð´Ð¸ÑÑ Ð´Ð¾Ð»ÑÑе. ÐÑоÑÑое ÑкаÑивание болÑÑÐ¸Ñ Ð¸Ð·Ð¾Ð±Ñажений Ð¼Ð¾Ð¶ÐµÑ Ð·Ð°Ð½ÑÑÑ Ð±Ð¾Ð»ÑÑее вÑемÑ, даже ÑеÑез бÑÑÑÑÑÑ ÑеÑÑ, Ñак как аппаÑаÑÐ½Ð°Ñ ÑаÑÑÑ Ð¼Ð¾Ð±Ð¸Ð»ÑнÑÑ ÑÑÑÑойÑÑв заÑаÑÑÑÑ ÑлиÑком медленна, ÑÑÐ¾Ð±Ñ Ð¸ÑполÑзоваÑÑ Ð²Ñе возможноÑÑи бÑÑÑÑÑÑ ÐºÐ°Ð½Ð°Ð»Ð¾Ð² даннÑÑ . ÐÐ»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÐµÐ·Ð½ÑÑ Ð¿Ð¾Ð´Ñказок о пÑоизводиÑелÑноÑÑи на мобилÑнÑÑ ÑÑÑÑойÑÑÐ²Ð°Ñ , ознакомÑÑеÑÑ Ñ Ð´Ð¾ÐºÐ»Ð°Ð´Ð¾Ð¼ ÐакÑимилиано ФÑÑÑмана Mobile Web High Performance.
ТеÑÑовÑе кейÑÑ Ð¸ ÑообÑÐµÐ½Ð¸Ñ Ð¾Ð± оÑибкаÑ
ÐÑли инÑÑÑÑменÑÑ ÑазÑабоÑÑика в Firefox или Chrome не помогаÑÑ Ð²Ð°Ð¼ вÑÑÑниÑÑ Ð¿ÑÐ¾Ð±Ð»ÐµÐ¼Ñ Ð¸Ð»Ð¸ вÑглÑÐ´Ð¸Ñ Ñак, ÑÑо бÑаÑзеÑÑ Ñами по Ñебе ÑоздаÑÑ Ð¿ÑоблемÑ, попÑобÑйÑе ÑÑоÑмиÑоваÑÑ ÑеÑÑовое окÑÑжение, коÑоÑое макÑималÑно изолиÑÑÐµÑ Ð¿ÑоблемÑ. ÐÑо оÑÐµÐ½Ñ ÑаÑÑо помогаÑÑ Ð´Ð¸Ð°Ð³Ð½Ð¾ÑÑиÑоваÑÑ Ð¿ÑоблемÑ.
УбедиÑеÑÑ, ÑÑо Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе воÑпÑоизвеÑÑи пÑоблемÑ, пÑоÑÑо ÑÐ¾Ñ ÑанÑÑ Ð¸ загÑÑÐ¶Ð°Ñ ÑÑаÑиÑеÑкÑÑ ÐºÐ¾Ð¿Ð¸Ñ HTML-ÑÑÑаниÑÑ (вклÑÑÐ°Ñ Ð¸Ð·Ð¾Ð±ÑажениÑ/ÑÑили/ÑкÑипÑÑ). ÐÑли Ñак - ÑдалиÑе из HTML Ñайла вÑÑ Ð»Ð¸ÑнÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¸ обÑаÑиÑеÑÑ Ðº за помоÑÑÑ (оÑпÑавÑÑе оÑÑÑÑ Ð² Bugzilla или, напÑимеÑ, ÑÐ¾Ñ ÑаниÑе Ñайл на ÑвоÑм ÑеÑвеÑе и поделиÑеÑÑ ÑÑÑлкой). Ðам Ñакже понадобиÑÑÑ Ð¿Ð¾Ð´ÐµÐ»Ð¸ÑÑÑÑ Ð¸Ð½ÑоÑмаÑией пÑоÑилиÑовÑика, коÑоÑÑÑ Ð²Ñ ÑобÑали Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¸Ð½ÑÑÑÑменÑов оÑладки.