ÐÑиÑиÑеÑкие ÑÑÐ°Ð¿Ñ ÑендеÑинга
ÐÑиÑиÑеÑкие ÑÑÐ°Ð¿Ñ ÑендеÑинга (Critical Rendering Path) - ÑÑо поÑледоваÑелÑноÑÑÑ Ñагов, коÑоÑÑе вÑполнÑÐµÑ Ð±ÑаÑзеÑ, когда пÑеобÑазÑеÑÑÑ HTML, CSS и JavaScript в пикÑели, коÑоÑÑе Ð²Ñ Ð²Ð¸Ð´Ð¸Ñе на ÑкÑане. ÐпÑимизаÑÐ¸Ñ ÑÑÐ¸Ñ Ñагов ÑлÑÑÑÐ°ÐµÑ Ð¿ÑоизводиÑелÑноÑÑÑ ÑендеÑа. ÐÑи ÑÑÐ°Ð¿Ñ Ð²ÐºÐ»ÑÑаÑÑ Ð² ÑÐµÐ±Ñ ÑабоÑÑ Ñ Document Object Model(DOM), CSS Object Model(CSSOM), деÑевом ÑендеÑа (render tree) и компоновкой обÑекÑов (layout)
ÐбÑекÑÐ½Ð°Ñ Ð¼Ð¾Ð´ÐµÐ»Ñ Ð´Ð¾ÐºÑменÑа DOM ÑоздаÑÑÑÑ Ð² ÑÐ¾Ñ Ð¼Ð¾Ð¼ÐµÐ½Ñ, когда бÑаÑÐ·ÐµÑ Ð¿Ð°ÑÑÐ¸Ñ HTML. ÐÑÐ¾Ñ HTML Ð¼Ð¾Ð¶ÐµÑ Ð·Ð°Ð¿ÑаÑиваÑÑ JavaScript, коÑоÑÑй Ð¼Ð¾Ð¶ÐµÑ Ð¼Ð¾Ð´Ð¸ÑиÑиÑоваÑÑ DOM. HTML Ð¼Ð¾Ð¶ÐµÑ Ð·Ð°Ð¿ÑоÑиÑÑ ÑÑили, коÑоÑÑе ÑÑаÑÑвÑÑÑ Ð² Ñоздании CSS Object Model. Ðвижок бÑаÑзеÑа комбиниÑÑÐµÑ ÑÑи две обÑекÑнÑе модели, ÑÑÐ¾Ð±Ñ ÑоздаÑÑ Ð´ÐµÑево ÑендеÑа (render tree). Ðомпоновка (layout) опÑеделÑÐµÑ ÑазмеÑÑ Ð¸ позиÑÐ¸Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ ÑлеменÑа на ÑÑÑаниÑе. Ðак ÑолÑко компоновка опÑеделена - пикÑели оÑÑиÑовÑваÑÑÑÑ Ð½Ð° ÑкÑане.
ÐпÑимизаÑÐ¸Ñ ÐºÑиÑиÑеÑÐºÐ¸Ñ ÑÑапов ÑендеÑинга ÑлÑÑÑÐ°ÐµÑ Ð²ÑÐµÐ¼Ñ Ð´Ð¾ пеÑвого ÑендеÑа. Ðонимание и опÑимизаÑÐ¸Ñ ÑÑÐ¸Ñ ÑÑапов ÑÑезвÑÑайно Ð²Ð°Ð¶Ð½Ñ Ð´Ð»Ñ Ñого, ÑÑÐ¾Ð±Ñ ÑендеÑиÑÑ Ð¿Ñиложение Ñ Ð½Ñжной ÑаÑÑоÑой кадÑов (60 кадÑов в ÑекÑндÑ, fps) и пÑедоÑÑавиÑÑ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ ÑдобнÑй, плавнÑй инÑеÑÑейÑ.
Ðонимание ÑÑапов (CRP)
ÐÑоизводиÑелÑноÑÑÑ Web-пÑиложений вклÑÑÐ°ÐµÑ Ð² ÑÐµÐ±Ñ Ð·Ð°Ð¿ÑоÑÑ Ðº ÑеÑвеÑÑ, полÑÑение оÑвеÑов, загÑÑзкÑ, паÑÑинг и вÑполнение ÑкÑипÑов, ÑендеÑинг, ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÑ Ð¸ оÑÑиÑÐ¾Ð²ÐºÑ Ð¿Ð¸ÐºÑелей.
ÐагÑÑзка веб-ÑÑÑаниÑÑ Ð¸Ð»Ð¸ пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð½Ð°ÑинаеÑÑÑ Ñ Ð·Ð°Ð¿ÑоÑа HTML. СеÑÐ²ÐµÑ Ð²Ð¾Ð·Ð²ÑаÑÐ°ÐµÑ HTTP-оÑвеÑ, ÑоÑÑоÑÑий из заголовков (headers) и Ñела запÑоÑа. Ðменно в Ñеле запÑоÑа ÑодеÑжиÑÑÑ HTML-докÑменÑ. ÐÑаÑÐ·ÐµÑ Ð½Ð°ÑÐ¸Ð½Ð°ÐµÑ Ð¿Ð°ÑÑиÑÑ Ð·Ð°Ð³ÑÑжаемÑй HTML, пÑеобÑазÑÑ Ð¿Ð¾Ð»ÑÑеннÑе байÑÑ Ð´Ð¾ÐºÑменÑа в DOM-деÑево. ÐÑаÑÐ·ÐµÑ ÑоздаÑÑ Ð½Ð¾Ð²Ñй запÑÐ¾Ñ ÐºÐ°Ð¶Ð´Ñй Ñаз, когда он Ð½Ð°Ñ Ð¾Ð´Ð¸Ñ ÑÑÑлки на внеÑние ÑеÑÑÑÑÑ, бÑÐ´Ñ Ñо ÑÐ°Ð¹Ð»Ñ ÑÑилей, ÑкÑипÑов или ÑÑÑлки на изобÑажениÑ. ÐекоÑоÑÑе запÑоÑÑ ÑвлÑÑÑÑÑ Ð±Ð»Ð¾ÐºÐ¸ÑÑÑÑими. ÐÑо ознаÑаеÑ, ÑÑо пока Ñакие запÑоÑÑ Ð²ÑполнÑÑÑÑÑ - дÑÑгие запÑоÑÑ Ð¿ÑиоÑÑанавливаÑÑÑÑ. ÐÑаÑÐ·ÐµÑ Ð¿ÑÐ¾Ð´Ð¾Ð»Ð¶Ð°ÐµÑ Ð¿Ð°ÑÑиÑÑ HTML и ÑоздаваÑÑ DOM до ÑÐµÑ Ð¿Ð¾Ñ, пока запÑÐ¾Ñ Ð½Ð° полÑÑение HTML не Ð¿Ð¾Ð´Ñ Ð¾Ð´Ð¸Ñ Ðº конÑÑ. ÐоÑле завеÑÑÐµÐ½Ð¸Ñ Ð¿Ð°ÑÑинга DOM, бÑаÑÐ·ÐµÑ ÐºÐ¾Ð½ÑÑÑÑиÑÑÐµÑ CSS моделÑ. Ðак ÑолÑко ÑÑи модели ÑÑоÑмиÑованÑ, бÑаÑÐ·ÐµÑ ÑÑÑÐ¾Ð¸Ñ Ð´ÐµÑево ÑендеÑа (render tree), в коÑоÑом вÑÑиÑлÑÐµÑ ÑÑили Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ видимого ÑлеменÑа ÑÑÑаниÑÑ. ÐоÑле ÑоÑмиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð´ÐµÑева пÑоиÑÑ Ð¾Ð´Ð¸Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ° (layout), коÑоÑÐ°Ñ Ð¾Ð¿ÑеделÑÐµÑ Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ðµ и ÑазмеÑÑ ÑлеменÑов ÑÑого деÑева. Ðак ÑолÑко ÑÑап завеÑÑÑн - ÑÑÑаниÑа ÑендеÑиÑÑÑ. Ðли "оÑÑиÑовÑваеÑÑÑ" (paint) на ÑкÑане.
Document Object Model
ÐоÑÑÑоение DOM инкÑеменÑалÑно. ÐÑÐ²ÐµÑ Ð² виде HTML пÑевÑаÑаеÑÑÑ Ð² ÑокенÑ, коÑоÑÑе пÑевÑаÑаÑÑÑÑ Ð² ÑÐ·Ð»Ñ (nodes), коÑоÑÑе ÑоÑмиÑÑÑÑ DOM деÑево. ÐÑоÑÑейÑий Ñзел наÑинаеÑÑÑ Ñ startTag-Ñокена и заканÑиваеÑÑÑ Ñокеном endTag. Ð£Ð·Ð»Ñ ÑодеÑÐ¶Ð°Ñ Ð²ÑÑ Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼ÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾Ð± HTML-ÑлеменÑе, ÑооÑвеÑÑÑвÑÑÑем ÑÑÐ¾Ð¼Ñ ÑзлÑ. Ð£Ð·Ð»Ñ (nodes) ÑвÑÐ·Ð°Ð½Ñ Ñ Render Tree Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¸ÐµÑаÑÑ Ð¸Ð¸ Ñокенов: еÑли какой-Ñо Ð½Ð°Ð±Ð¾Ñ startTag и endTag-Ñокенов поÑвлÑеÑÑÑ Ð¼ÐµÐ¶Ð´Ñ Ñже ÑÑÑеÑÑвÑÑÑим набоÑом Ñокенов, Ð¼Ñ Ð¿Ð¾Ð»ÑÑаем Ñзел (node) внÑÑÑи Ñзла (node), Ñо еÑÑÑ Ð¿Ð¾Ð»ÑÑаем иеÑаÑÑ Ð¸Ñ Ð´ÐµÑева DOM.
Чем болÑÑе колиÑеÑÑво Ñзлов (node) Ð¸Ð¼ÐµÐµÑ Ð¿Ñиложение, Ñем долÑÑе пÑоиÑÑ Ð¾Ð´Ð¸Ñ ÑоÑмиÑование DOM tree, а знаÑÐ¸Ñ Ð´Ð¾Ð»ÑÑе пÑоиÑÑ Ð¾Ð´Ð¸Ñ Ð¾Ð±ÑабоÑка кÑиÑиÑеÑÐºÐ¸Ñ ÑÑапов ÑендеÑинга. ÐзмеÑÑйÑе! ÐеÑколÑко лиÑÐ½Ð¸Ñ Ñзлов (node) не ÑделаÑÑ Ð¿Ð¾Ð³Ð¾Ð´Ñ, но divitis обÑзаÑелÑно пÑиведÑÑ Ðº подвиÑаниÑм.
CSS Object Model
DOM неÑÑÑ Ð² Ñебе вÑÑ ÑодеÑжимое ÑÑÑаниÑÑ. CSSOM ÑодеÑÐ¶Ð¸Ñ Ð²Ñе ÑÑили ÑÑÑаниÑÑ, Ñо еÑÑÑ Ð´Ð°Ð½Ð½Ñе о Ñом, как ÑÑилизоваÑÑ DOM. CSSOM Ð¿Ð¾Ñ Ð¾Ð¶ на DOM, но вÑÑ Ð¶Ðµ оÑлиÑаеÑÑÑ. ÐÑли ÑоÑмиÑование DOM инкÑеменÑалÑно, CSSOM - неÑ. CSS блокиÑÑÐµÑ ÑендеÑ: бÑаÑÐ·ÐµÑ Ð±Ð»Ð¾ÐºÐ¸ÑÑÐµÑ ÑендеÑинг ÑÑÑаниÑÑ Ð´Ð¾ ÑÐµÑ Ð¿Ð¾Ñ, пока не полÑÑÐ¸Ñ Ð¸ не обÑабоÑÐ°ÐµÑ Ð²Ñе CSS-пÑавила. CSS блокиÑÑÐµÑ ÑендеÑинг, поÑÐ¾Ð¼Ñ ÑÑо пÑавила могÑÑ Ð±ÑÑÑ Ð¿ÐµÑезапиÑанÑ, а знаÑиÑ, Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ дождаÑÑÑÑ Ð¿Ð¾ÑÑÑÐ¾ÐµÐ½Ð¸Ñ CSSOM, ÑÑÐ¾Ð±Ñ ÑбедиÑÑÑÑ Ð² оÑÑÑÑÑÑвии дополниÑелÑнÑÑ Ð¿ÐµÑеопÑеделений.
У CSS имеÑÑÑÑ Ñвои пÑавила валидаÑии Ñокенов. ÐомниÑе, ÑÑо C в CSS ознаÑÐ°ÐµÑ "Cascade". CSS-пÑавила ниÑпадаÑÑ ÐºÐ°Ñкадом. ÐнÑми Ñловами, когда паÑÑÐµÑ Ð¿ÑеобÑазÑÐµÑ ÑÐ¾ÐºÐµÐ½Ñ Ð² ÑÐ·Ð»Ñ (nodes), вложеннÑе ÑÐ·Ð»Ñ Ð½Ð°ÑледÑÑÑ ÑÑили Ð¾Ñ ÑодиÑелÑÑÐºÐ¸Ñ . ÐнкÑеменÑалÑÐ½Ð°Ñ Ð¾Ð±ÑабоÑка недоÑÑÑпна Ð´Ð»Ñ CSS, поÑÐ¾Ð¼Ñ ÑÑо Ð½Ð°Ð±Ð¾Ñ ÑледÑÑÑÐ¸Ñ Ð¿Ñавил Ð¼Ð¾Ð¶ÐµÑ Ð¿ÐµÑезапиÑаÑÑ Ð¿ÑедÑдÑÑие. ÐбÑекÑÐ½Ð°Ñ Ð¼Ð¾Ð´ÐµÐ»Ñ CSS (CSSOM) ÑÑÑоиÑÑÑ Ð¿Ð¾ меÑе паÑÑинга CSS, но она не Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¸ÑполÑзована Ð´Ð»Ñ Ð¿Ð¾ÑÑÑÐ¾ÐµÐ½Ð¸Ñ Ð´ÐµÑева ÑендеÑа (render tree), поÑÐ¾Ð¼Ñ ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð¾ÐºÐ°Ð·Ð°ÑÑÑÑ Ñак, ÑÑо ÑледÑÑÑий Ð½Ð°Ð±Ð¾Ñ Ð¿Ñавил Ð¼Ð¾Ð¶ÐµÑ ÑделаÑÑ ÐºÐ°ÐºÐ¾Ð¹-либо из Ñзлов деÑева невидимÑм на ÑкÑане. ÐÑо Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑивеÑÑи к лиÑÐ½ÐµÐ¼Ñ Ð²ÑÐ·Ð¾Ð²Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ¸ и пеÑеÑаÑÑÑÑа ÑÑилей.
ÐовоÑÑ Ð¾ пÑоизводиÑелÑноÑÑи ÑелекÑоÑов (selector), наименее ÑпеÑиÑиÑнÑе ÑелекÑоÑÑ ÑÑабаÑÑваÑÑ Ð±ÑÑÑÑее. ÐапÑимеÑ, .foo {} ÑÑабоÑÐ°ÐµÑ Ð±ÑÑÑÑее .bar .foo {}. РпеÑвом ÑлÑÑае, ÑÑловно, понадобиÑÑÑ Ð¾Ð´Ð½Ð° опеÑаÑиÑ, ÑÑÐ¾Ð±Ñ Ð½Ð°Ð¹Ñи ÑÐ»ÐµÐ¼ÐµÐ½Ñ .foo, во вÑоÑом ÑлÑÑае, ÑнаÑала бÑдÑÑ Ð½Ð°Ð¹Ð´ÐµÐ½Ñ Ð²Ñе .foo, а поÑом бÑаÑÐ·ÐµÑ Ð¿ÑойдÑÑ Ð²Ð²ÐµÑÑ
по деÑÐµÐ²Ñ Ð² поиÑкаÑ
ÑодиÑелÑÑкого ÑлеменÑа .bar. Ðолее ÑпеÑиÑиÑнÑе ÑелекÑоÑÑ ÑÑебÑÑÑ Ð¾Ñ Ð±ÑаÑзеÑа болÑÑего колиÑеÑÑва ÑабоÑÑ, но ÑÑи пÑоблемÑ, веÑоÑÑно, не ÑÑоÑÑ Ð¸Ñ
опÑимизаÑии.
ÐÑли Ð²Ñ Ð¸Ð·Ð¼ÐµÑиÑе вÑемÑ, ÑÑебÑемое на паÑÑинг CSS, Ð²Ñ Ð±ÑдеÑе ÑÐ´Ð¸Ð²Ð»ÐµÐ½Ñ Ñем, как бÑÑÑÑо ÑабоÑаÑÑ Ð±ÑаÑзеÑÑ. Ðолее ÑпеÑиÑиÑнÑе пÑавила более заÑÑаÑнÑ, поÑÐ¾Ð¼Ñ ÑÑо ÑÑебÑÑÑ Ð¾Ð±Ñ Ð¾Ð´Ð° болÑÑего ÑиÑла Ñзлов в DOM деÑеве, но ÑÑа доÑоговизна Ð¾Ð±Ñ Ð¾Ð´Ð¸ÑÑÑ Ð´Ð¾Ð²Ð¾Ð»Ñно дÑÑево, оÑобенно в ÑÑавнении Ñ Ð´ÑÑгими Ñзкими меÑÑами пÑоизводиÑелÑноÑÑи. СнаÑала измеÑÑйÑе. ÐоÑом опÑимизиÑÑйÑе, еÑли ÑÑо дейÑÑвиÑелÑно Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾. ÐеÑоÑÑно, ÑпеÑиÑиÑноÑÑÑ ÑелекÑоÑов не Ñо, ÑÑо дейÑÑвиÑелÑно заÑоÑÐ¼Ð°Ð¶Ð¸Ð²Ð°ÐµÑ Ð²Ð°Ñе пÑиложение. Ðогда дело Ð´Ð¾Ñ Ð¾Ð´Ð¸Ñ Ð´Ð¾ опÑимизаÑии CSS, ÑлÑÑÑение пÑоизводиÑелÑноÑÑÑ ÑелекÑоÑов ÑÑкоÑÑÐµÑ ÑендеÑинг лиÑÑ Ð½Ð° микÑоÑекÑндÑ. СÑÑеÑÑвÑÑÑ Ð´ÑÑгие пÑÑи опÑимизаÑии CSS, Ñакие как ÑниÑикаÑиÑ, Ñазделение CSS-Ñайлов на ÑазнÑе ÑÐ°Ð¹Ð»Ñ Ð½Ð° оÑнове медиавÑÑажений.
ÐеÑево ÑендеÑа (Render Tree)
ÐеÑево ÑендеÑа Ð¾Ñ Ð²Ð°ÑÑÐ²Ð°ÐµÑ ÑÑÐ°Ð·Ñ Ð¸ ÑодеÑжимое ÑÑÑаниÑÑ, и ÑÑили: ÑÑо меÑÑо, где DOM и CSSOM деÑевÑÑ ÐºÐ¾Ð¼Ð±Ð¸Ð½Ð¸ÑÑÑÑÑÑ Ð² одно деÑево. ÐÐ»Ñ Ð¿Ð¾ÑÑÑÐ¾ÐµÐ½Ð¸Ñ Ð´ÐµÑева ÑендеÑа бÑаÑÐ·ÐµÑ Ð¿ÑовеÑÑÐµÑ ÐºÐ°Ð¶Ð´Ñй Ñзел (node) DOM, наÑÐ¸Ð½Ð°Ñ Ð¾Ñ ÐºÐ¾Ñневого (root) и опÑеделÑеÑ, какие CSS-пÑавила нÑжно пÑиÑоединиÑÑ Ðº ÑÑÐ¾Ð¼Ñ ÑзлÑ.
ÐеÑево ÑендеÑа оÑ
ваÑÑÐ²Ð°ÐµÑ ÑолÑко видимое ÑодеÑжимое. ÐапÑимеÑ, ÑекÑÐ¸Ñ head (в оÑновном) не ÑодеÑÐ¶Ð¸Ñ Ð½Ð¸ÐºÐ°ÐºÐ¾Ð¹ видимой инÑоÑмаÑии, а поÑÐ¾Ð¼Ñ Ð¼Ð¾Ð¶ÐµÑ Ð½Ðµ вклÑÑаÑÑÑÑ Ð² деÑево. ÐÑоме Ñого, еÑли Ñ ÐºÐ°ÐºÐ¾Ð³Ð¾-Ñо Ñзла ÑÑÐ¾Ð¸Ñ ÑвойÑÑво display: none, оно Ñак же не вклÑÑаеÑÑÑ Ð² деÑево (как и поÑомки ÑÑого Ñзла).
Ðомпоновка (Layout)
Ð ÑÐ¾Ñ Ð¼Ð¾Ð¼ÐµÐ½Ñ, когда деÑево ÑендеÑа (render tree) поÑÑÑоено, ÑÑановиÑÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ñм ÑÑап компоновки (layout). Ðомпоновка завиÑÐ¸Ñ Ð¾Ñ ÑазмеÑов ÑкÑана. ÐÑÐ¾Ñ ÑÑап опÑеделÑеÑ, где и как на ÑÑÑаниÑе бÑдÑÑ ÑпозиÑиониÑÐ¾Ð²Ð°Ð½Ñ ÑлеменÑÑ Ð¸ ÐºÐ°ÐºÐ¾Ð²Ñ ÑвÑзи Ð¼ÐµÐ¶Ð´Ñ ÑлеменÑами.
ЧÑо наÑÑÑÑ ÑиÑÐ¸Ð½Ñ ÑлеменÑа? ÐлоÑнÑе ÑлеменÑÑ Ð¿Ð¾ опÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¸Ð¼ÐµÑÑ ÑиÑÐ¸Ð½Ñ Ð² 100% Ð¾Ñ ÑиÑÐ¸Ð½Ñ Ð¸Ñ ÑодиÑелÑ. ÐÐ»ÐµÐ¼ÐµÐ½Ñ Ñ ÑиÑиной в 50% бÑÐ´ÐµÑ Ð¸Ð¼ÐµÑÑ ÑиÑÐ¸Ð½Ñ Ð² два Ñаза менÑÑе ÑодиÑелÑÑкой. ÐÑли не Ñказано иного, ÑÐ»ÐµÐ¼ÐµÐ½Ñ body Ð¸Ð¼ÐµÐµÑ ÑиÑÐ¸Ð½Ñ 100%, Ñо еÑÑÑ 100% ÑиÑÐ¸Ð½Ñ ÑодиÑÐµÐ»Ñ - видимой облаÑÑи viewport (окна докÑменÑа).
ÐеÑа ÑÑг viewport, коÑоÑÑй Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑказаÑÑ Ð² Head ÑÑÑаниÑÑ, опÑеделÑÐµÑ ÑиÑÐ¸Ð½Ñ Ð²Ð¸Ð´Ð¸Ð¼Ð¾Ð¹ облаÑÑи и влиÑÐµÑ Ð½Ð° компоновкÑ. Ðез ÑÑого ÑÑга бÑаÑзеÑÑ Ð¸ÑполÑзÑÑÑ ÑиÑÐ¸Ð½Ñ "по ÑмолÑаниÑ", коÑоÑÐ°Ñ Ð¾Ð±ÑÑно ÑоÑÑавлÑÐµÑ 960px. РбÑаÑзеÑаÑ
, оÑкÑÑваÑÑиÑ
ÑÑ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ Ð² полноÑкÑанном Ñежиме, напÑимеÑ, в бÑаÑзеÑе ÑелеÑона, ÑÑÑановка Ñега <meta name="viewport" content="width=device-width"> ÑÑÑÐ°Ð½Ð¾Ð²Ð¸Ñ ÑиÑÐ¸Ð½Ñ Ð²Ð¸Ð´Ð¸Ð¼Ð¾Ð¹ облаÑÑи в 100% Ð¾Ñ ÑиÑÐ¸Ð½Ñ ÑкÑана ÑÑÑÑойÑÑва, вмеÑÑо Ñого, ÑÑÐ¾Ð±Ñ Ð¸ÑполÑзоваÑÑ ÑиÑÐ¸Ð½Ñ Ð¿Ð¾ ÑмолÑаниÑ. ÐÑа ÑиÑина (device-width) изменÑеÑÑÑ ÐºÐ°Ð¶Ð´Ñй Ñаз, когда полÑзоваÑÐµÐ»Ñ Ð¿Ð¾Ð²Ð¾ÑаÑÐ¸Ð²Ð°ÐµÑ ÑелеÑон. ÐÑо пÑÐ¸Ð²Ð¾Ð´Ð¸Ñ Ðº запÑÑÐºÑ ÑÑапа компоновки. Равно как и пÑи изменении ÑазмеÑов окна в обÑÑном бÑаÑзеÑе.
Ðа пÑоизводиÑелÑноÑÑÑ ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ¸ (layout) непоÑÑедÑÑвенно влиÑÐµÑ DOM - Ñем болÑÑе Ñзлов (nodes) в ваÑем докÑменÑе, Ñем болÑÑе вÑемени понадобиÑÑÑ Ð½Ð° пеÑеÑаÑÑÑÑ Ð¿Ð¾Ð·Ð¸Ñий и ÑазмеÑов вÑÐµÑ ÑлеменÑов. Ðомпоновка Ð¼Ð¾Ð¶ÐµÑ ÑÑаÑÑ Ñзким меÑÑом, ведÑÑим к завиÑаниÑм, оÑобенно еÑли вÑполнÑеÑÑÑ Ð¾Ð´Ð½Ð¾Ð²Ñеменно Ñо ÑкÑоллом или дÑÑгой анимаÑией. Ð Ñ Ð¾ÑÑ Ð·Ð°Ð´ÐµÑжка 20Ð¼Ñ Ð¿Ñи загÑÑзке или пеÑеоÑиенÑаÑии ÑкÑана Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ñиемлемой, ÑÑо вÑÑ Ñавно Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑивеÑÑи к подвиÑаниÑм пÑи анимаÑии и ÑкÑолле. ÐаждÑй Ñаз, когда деÑево ÑендеÑа (render tree) модиÑиÑиÑÑеÑÑÑ, напÑимеÑ, из-за Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ñзла (node), его модиÑикаÑии или пÑи изменении ÑÑилей box-модели, запÑÑкаеÑÑÑ ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ°.
ÐÐ»Ñ ÑменÑÑÐµÐ½Ð¸Ñ ÑаÑÑоÑÑ Ð¸ пÑодолжиÑелÑноÑÑи ÑÑого ÑÑапа, гÑÑппиÑÑйÑе Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ ÑкÑана и избегайÑе анимаÑии ÑвойÑÑв, ÑвÑзаннÑÑ Ñ box-моделÑÑ ÑлеменÑов.
ÐÑÑиÑовка (Paint)
ÐоÑледний ÑÑап в наÑем ÑпиÑке - оÑÑиÑовка (paint) пикÑелей на ÑкÑане. Ðогда деÑево ÑендеÑа (render tree) Ñоздано, компоновка (layout) пÑоизоÑла, пикÑели могÑÑ Ð±ÑÑÑ Ð¾ÑÑиÑованÑ. ÐÑи пеÑвиÑной загÑÑзке докÑменÑа (onload) веÑÑ ÑкÑан бÑÐ´ÐµÑ Ð¾ÑÑиÑован. ÐоÑле ÑÑого бÑдÑÑ Ð¿ÐµÑеÑиÑовÑваÑÑÑÑ ÑолÑко Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ñе к Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ ÑаÑÑи ÑкÑана, Ñак как бÑаÑÐ·ÐµÑ ÑÑаÑаеÑÑÑ Ð¾Ð¿ÑимизиÑоваÑÑ Ð¿ÑоÑеÑÑ Ð¾ÑÑиÑовки, Ð¸Ð·Ð±ÐµÐ³Ð°Ñ Ð½ÐµÐ½Ñжной ÑабоÑÑ. Так, еÑли Ñ Ð²Ð°Ñ Ð² докÑменÑе еÑÑÑ Ð´Ð²Ð° ÑлеменÑа, пеÑеÑиÑовÑваÑÑÑÑ Ð±ÑÐ´ÐµÑ ÑолÑко ÑоÑ, коÑоÑÑй Ð²Ñ Ð¸Ð·Ð¼ÐµÐ½Ð¸Ð»Ð¸. ÐÑÐµÐ¼Ñ Ð¾ÑÑиÑовки завиÑÐ¸Ñ Ð¾Ñ Ñого, какой Ñип Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿ÑименилÑÑ Ðº деÑÐµÐ²Ñ ÑендеÑа (render tree). Ð Ñ Ð¾ÑÑ Ð¾ÑÑиÑовка - ÑÑо оÑÐµÐ½Ñ Ð±ÑÑÑÑÑй пÑоÑеÑÑ, и он, веÑоÑÑно, Ñлабо влиÑÐµÑ Ð½Ð° пÑоизводиÑелÑноÑÑÑ, оÑÐµÐ½Ñ Ð²Ð°Ð¶Ð½Ð¾ помниÑÑ, ÑÑо оба ÑÑапа - компоновка (layout) и оÑÑиÑовка (paint) Ð´Ð¾Ð»Ð¶Ð½Ñ ÑабоÑаÑÑ ÑообÑа и ÑкладÑваÑÑÑÑ Ð² ÑаÑÑоÑÑ Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ ÐºÐ°Ð´Ñов. Ðаждое CSS-ÑвойÑÑво, пÑименÑемое к лÑÐ±Ð¾Ð¼Ñ ÑÐ·Ð»Ñ (node) ÑвелиÑÐ¸Ð²Ð°ÐµÑ Ð²ÑÐµÐ¼Ñ Ð¾ÑÑиÑовки, но полное Ñдаление ÑÑилÑ, ÑпоÑобное ÑÑкономиÑÑ Ð²Ð°Ð¼ 0.001мÑ, вÑÑд ли даÑÑ Ð²Ð°Ð¼ желаемÑй ÑезÑлÑÑаÑ, но заÑо Ñ Ð»ÑгкоÑÑÑÑ ÑÑ ÑдÑÐ¸Ñ Ð¿Ð¾Ð»ÑзоваÑелÑÑкий опÑÑ. ÐомниÑе - ÑнаÑала нÑжно измеÑÑÑÑ, а поÑом опÑимизиÑоваÑÑ ÑолÑко Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾Ðµ!
ÐпÑимизаÑÐ¸Ñ CRP
УлÑÑÑайÑе загÑÑÐ·ÐºÑ ÑÑÑаниÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¿ÑиоÑиÑизаÑии ÑеÑÑÑÑов, Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÐºÐ¾Ð½ÑÑолиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¾ÑÑдка, в коÑоÑом они гÑÑзÑÑÑÑ Ð¸ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÑменÑÑÐµÐ½Ð¸Ñ ÑазмеÑов Ñайлов. ÐлавнÑе подÑказки здеÑÑ:
- УменÑÑайÑе колиÑеÑÑво кÑиÑиÑеÑÐºÐ¸Ñ ÑеÑÑÑÑов, оÑкладÑÐ²Ð°Ñ Ð¸Ñ Ð·Ð°Ð³ÑÑзкÑ, помеÑÐ°Ñ Ð¸Ñ ÐºÐ°Ðº async и/или гÑÑппиÑÑÑ Ð¸Ñ ;
- ÐпÑимизиÑÑйÑе колиÑеÑÑво Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼ÑÑ Ð·Ð°Ð¿ÑоÑов, а Ñак же ÑазмеÑÑ Ñайлов;
- ÐпÑимизиÑÑйÑе поÑÑдок Ñак, ÑÑÐ¾Ð±Ñ ÐºÑиÑиÑеÑкие ÑеÑÑÑÑÑ Ð·Ð°Ð³ÑÑжалиÑÑ Ð² пеÑвÑÑ Ð¾ÑеÑедÑ, ÑокÑаÑÐ°Ñ Ñаким обÑазом Ð´Ð»Ð¸Ð½Ñ ÐºÑиÑиÑеÑÐºÐ¸Ñ ÑÑапов ÑендеÑинга.