СегоднÑ, в пеÑеводе одиннадÑаÑой ÑаÑÑи ÑеÑии маÑеÑиалов, поÑвÑÑÑннÑÑ
JavaScript, Ð¼Ñ Ð¿Ð¾Ð³Ð¾Ð²Ð¾Ñим о подÑиÑÑемаÑ
бÑаÑзеÑа, оÑвеÑÑÑвеннÑÑ
за ÑендеÑинг веб-ÑÑÑаниÑ. Ðни игÑаÑÑ ÐºÐ»ÑÑевÑÑ ÑÐ¾Ð»Ñ Ð² деле пÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¾Ð¿Ð¸Ñаний докÑменÑов, вÑполненнÑÑ
Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ HTML и CSS, в Ñо, ÑÑо Ð¼Ñ Ð²Ð¸Ð´Ð¸Ð¼ на ÑкÑане.
ÐвÑÐ¾Ñ Ð¼Ð°ÑеÑиала говоÑиÑ, ÑÑо в компании SessionStack пÑÐ¸Ñ Ð¾Ð´Ð¸ÑÑÑ ÑделÑÑÑ ÑендеÑÐ¸Ð½Ð³Ñ Ð¾Ð³Ñомное внимание. Ð ÑÑой ÑÑаÑÑе он поделиÑÑÑ ÑовеÑами, каÑаÑÑимиÑÑ Ð¾Ð¿ÑимизаÑии веб-ÑÑÑÐ°Ð½Ð¸Ñ Ñ ÑÑÑÑом оÑобенноÑÑей Ð¸Ñ Ð²Ð¸Ð·ÑализаÑии.
Ð¡Ð¾Ð·Ð´Ð°Ð²Ð°Ñ Ð²ÐµÐ±-пÑиложениÑ, Ð¼Ñ Ð½Ðµ пиÑем изолиÑованнÑй JS-код, коÑоÑÑй занимаеÑÑÑ Ð¸ÑклÑÑиÑелÑно какими-Ñо ÑобÑÑвеннÑми «внÑÑÑенними» делами. ÐÑÐ¾Ñ ÐºÐ¾Ð´ вÑполнÑеÑÑÑ Ð² окÑÑжении, пÑедоÑÑавлÑемом ÐµÐ¼Ñ Ð±ÑаÑзеÑом, взаимодейÑÑвÑÐµÑ Ñ Ð½Ð¸Ð¼. Ðонимание ÑÑÑÑойÑÑва ÑÑого окÑÑжениÑ, Ñого, как оно ÑабоÑаеÑ, из ÐºÐ°ÐºÐ¸Ñ ÑаÑÑей ÑоÑÑоиÑ, позволÑÐµÑ ÑазÑабоÑÑÐ¸ÐºÑ ÑоздаваÑÑ Ð±Ð¾Ð»ÐµÐµ каÑеÑÑвеннÑе пÑогÑаммÑ, даÑÑ ÐµÐ¼Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ Ð¿ÑедÑÑмоÑÑеÑÑ Ð²Ð¾Ð·Ð½Ð¸ÐºÐ½Ð¾Ð²ÐµÐ½Ð¸Ðµ возможнÑÑ Ð¿Ñоблем Ñ Ð¿Ñиложением, коÑоÑое вÑÑло в ÑвеÑ.
Ðа ÑиÑÑнке ниже Ð¿Ð¾ÐºÐ°Ð·Ð°Ð½Ñ Ð¾ÑновнÑе компоненÑÑ Ð±ÑаÑзеÑа. ÐавайÑе поговоÑим о Ñом, какÑÑ ÑÐ¾Ð»Ñ Ð¾Ð½Ð¸ игÑаÑÑ Ð² пÑоÑеÑÑе обÑабоÑки веб-ÑÑÑаниÑ.
ÐÑновнÑе компоненÑÑ Ð±ÑаÑзеÑа
Ð ÑÑом маÑеÑиале Ð¼Ñ ÑоÑÑедоÑоÑимÑÑ Ð½Ð° движке ÑендеÑинга. Ðменно ÑÑа подÑиÑÑема бÑаÑзеÑа занимаеÑÑÑ ÑазбоÑом и визÑализаÑией HTML и CSS. Ð ÑÑо â именно Ñе ÑÐµÑ Ð½Ð¾Ð»Ð¾Ð³Ð¸Ð¸, Ñ ÐºÐ¾ÑоÑÑми поÑÑоÑнно взаимодейÑÑвÑÐµÑ ÐºÐ¾Ð´ веб-пÑиложений, напиÑаннÑй на JavaScript.
ÐÐ»Ð°Ð²Ð½Ð°Ñ Ð·Ð°Ð´Ð°Ñа движка ÑендеÑинга заклÑÑаеÑÑÑ Ð² Ñом, ÑÑÐ¾Ð±Ñ Ð²ÑвеÑÑи запÑоÑеннÑÑ ÑÑÑаниÑÑ Ð² окне бÑаÑзеÑа. Ðвижок Ð¼Ð¾Ð¶ÐµÑ Ð²ÑводиÑÑ HTML-докÑменÑÑ, XML-докÑменÑÑ, изобÑажениÑ. ÐÑи иÑполÑзовании дополниÑелÑнÑÑ Ð¿Ð»Ð°Ð³Ð¸Ð½Ð¾Ð² движок Ð¼Ð¾Ð¶ÐµÑ Ð²Ð¸Ð·ÑализиÑоваÑÑ Ð¸ маÑеÑÐ¸Ð°Ð»Ñ Ð´ÑÑÐ³Ð¸Ñ Ñипов, напÑÐ¸Ð¼ÐµÑ â PDF-докÑменÑÑ.
ÐÑ Ð·Ð½Ð°ÐµÐ¼, ÑÑо ÑÑÑеÑÑвÑÑÑ ÑазлиÑнÑе JS-движки, коÑоÑÑе иÑполÑзÑÑÑ ÑазлиÑнÑе бÑаÑзеÑÑ. То же Ñамое ÑпÑаведливо и Ð´Ð»Ñ Ð´Ð²Ð¸Ð¶ÐºÐ¾Ð² ÑендеÑинга. ÐÐ¾Ñ Ð½ÐµÑколÑко попÑлÑÑнÑÑ Ð´Ð²Ð¸Ð¶ÐºÐ¾Ð²:
Ðвижок ÑендеÑинга полÑÑÐ°ÐµÑ ÑодеÑжимое запÑоÑенного докÑменÑа Ð¾Ñ ÑеÑевого ÑÑÐ¾Ð²Ð½Ñ Ð±ÑаÑзеÑа. ÐÑоÑеÑÑ ÑендеÑинга вÑглÑÐ´Ð¸Ñ Ñак, как показано на ÑиÑÑнке ниже.
ÐÑоÑеÑÑ ÑендеÑинга веб-ÑÑÑаниÑÑ
ÐÐ¾Ñ Ð¾ÑновнÑе ÑÑÐ°Ð¿Ñ ÑÑого пÑоÑеÑÑа:
РаÑÑмоÑÑим ÑÑи и дÑÑгие Ñаги, вÑполнÑемÑе пÑи визÑализаÑии веб-ÑÑÑаниÑ, подÑобнее.
ÐеÑвÑй ÑÑап ÑабоÑÑ Ð´Ð²Ð¸Ð¶ÐºÐ° ÑендеÑинга заклÑÑаеÑÑÑ Ð² ÑазбоÑе HTML-докÑменÑа и пÑеобÑазовании Ñого, ÑÑо Ñ Ð½ÐµÐ³Ð¾ полÑÑилоÑÑ, в ÑÐ·Ð»Ñ DOM, ÑазмеÑÑннÑе в деÑеве DOM. ÐÑи ÑÑом веб-ÑÑÑаниÑа, коÑоÑÐ°Ñ Ð¿ÑедÑÑавлена в виде HTML-кода, пÑеобÑазÑеÑÑÑ Ð² ÑÑÑÑкÑÑÑÑ, подобнÑÑ Ñой, коÑоÑÐ°Ñ Ð¿Ð¾ÐºÐ°Ð·Ð°Ð½Ð° на ÑиÑÑнке ниже.
ÐеÑево DOM
ÐаждÑй ÑÐ»ÐµÐ¼ÐµÐ½Ñ ÑÑого деÑева, ÑодеÑжаÑий вложеннÑе ÑлеменÑÑ, ÑвлÑеÑÑÑ Ð´Ð»Ñ Ð½Ð¸Ñ ÑодиÑелÑÑким. ÐÑо ÑпÑаведливо Ð´Ð»Ñ Ð²ÑÐµÑ ÑÑовней вложенноÑÑи.
CSSOM (CSS Object Model) â ÑÑо обÑекÑÐ½Ð°Ñ Ð¼Ð¾Ð´ÐµÐ»Ñ CSS. Ðогда бÑаÑÐ·ÐµÑ Ð·Ð°Ð½Ð¸Ð¼Ð°ÐµÑÑÑ Ñозданием деÑева DOM ÑÑÑаниÑÑ, он Ð½Ð°Ñ Ð¾Ð´Ð¸Ñ Ð² Ñазделе
Ðак и в ÑлÑÑае Ñ HTML, Ð´Ð²Ð¸Ð¶ÐºÑ Ð½Ñжно конвеÑÑиÑоваÑÑ CSS в неÑÑо, Ñ Ñем Ð¼Ð¾Ð¶ÐµÑ ÑабоÑаÑÑ Ð±ÑаÑÐ·ÐµÑ â в CSSOM. Ð ÑезÑлÑÑаÑе полÑÑаеÑÑÑ Ð´ÐµÑево CSSOM, пÑедÑÑавленное на ÑледÑÑÑем ÑиÑÑнке.
ÐеÑево CSSOM
ÐнаеÑе, поÑÐµÐ¼Ñ CSSOM Ð¸Ð¼ÐµÐµÑ Ð´ÑевовиднÑÑ ÑÑÑÑкÑÑÑÑ? Ðогда вÑполнÑеÑÑÑ ÑоÑмиÑование иÑогового набоÑа ÑÑилей Ð´Ð»Ñ ÑлеменÑа ÑÑÑаниÑÑ, бÑаÑÐ·ÐµÑ Ð½Ð°ÑÐ¸Ð½Ð°ÐµÑ Ñ Ð½Ð°Ð¸Ð±Ð¾Ð»ÐµÐµ обÑÐ¸Ñ Ð¿Ñавил, пÑименимÑÑ Ðº ÑÑÐ¾Ð¼Ñ ÑлеменÑÑ, пÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð½Ð¾Ð¼Ñ Ñзлом DOM (напÑимеÑ, еÑли Ñзел ÑвлÑеÑÑÑ Ð¿Ð¾Ñомком ÑлеменÑа
РазбеÑÑм пÑимеÑ, коÑоÑÑй пÑедÑÑавлен на пÑедÑдÑÑем ÑиÑÑнке. ÐÑбой ÑекÑÑ, ÑодеÑжаÑийÑÑ Ð²Ð½ÑÑÑи Ñега
ÐÑоме Ñого, обÑаÑиÑе внимание на Ñо, ÑÑо вÑÑепÑиведÑнное деÑево не ÑвлÑеÑÑÑ Ð¿Ð¾Ð»Ð½Ñм CSSOM-деÑевом. ТÑÑ Ð¿Ð¾ÐºÐ°Ð·Ð°Ð½Ñ Ð»Ð¸ÑÑ ÑÑили, коÑоÑÑе мÑ, в наÑем CSS-Ñайле, ÑеÑили пеÑеопÑеделиÑÑ. У каждого бÑаÑзеÑа имееÑÑÑ ÑÑандаÑÑнÑй Ð½Ð°Ð±Ð¾Ñ ÑÑилей, пÑименÑемÑй по ÑмолÑаниÑ, извеÑÑнÑй еÑÑ ÐºÐ°Ðº «ÑÑили полÑзоваÑелÑÑкого агенÑа» (user agent styles). Ðменно ÑезÑлÑÑаÑÑ Ð¿ÑÐ¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÑÑÐ¸Ñ ÑÑилей можно видеÑÑ Ð½Ð° ÑÑÑаниÑе, не имеÑÑей ÑвÑзаннÑÑ Ñ Ð½ÐµÐ¹ CSS-пÑавил. ÐаÑи же ÑÑили пÑоÑÑо пеÑеопÑеделÑÑÑ Ð½ÐµÐºÐ¾ÑоÑÑе из ÑÑандаÑÑнÑÑ ÑÑилей бÑаÑзеÑа.
ÐнÑÑÑÑкÑии о внеÑнем виде ÑлеменÑов, пÑедÑÑавленнÑе в HTML, ÑкомбиниÑованнÑе Ñ Ð¸Ð½ÑоÑмаÑией об Ð¸Ñ ÑÑилизаÑии из деÑева CSSOM, иÑполÑзÑÑÑÑÑ Ð´Ð»Ñ ÑоÑмиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð´ÐµÑева ÑендеÑинга.
ЧÑо ÑÑо Ñакое? ÐÑо â деÑево визÑалÑнÑÑ ÑлеменÑов, ÑозданнÑÑ Ð² Ñом поÑÑдке, в коÑоÑом они бÑдÑÑ Ð²ÑводиÑÑÑÑ Ð½Ð° ÑкÑан. ÐÑо â визÑалÑное пÑедÑÑавление HTML-кода ÑÑÑаниÑÑ, оÑÑажаÑÑее влиÑние ÑооÑвеÑÑÑвÑÑÑÐ¸Ñ ÑÑой ÑÑÑаниÑе CSS-пÑавил. Ð¦ÐµÐ»Ñ ÑÑого деÑева заклÑÑаеÑÑÑ Ð² Ñом, ÑÑÐ¾Ð±Ñ Ð¾Ð±ÐµÑпеÑиÑÑ Ð²Ñвод ÑлеменÑов пÑавилÑном поÑÑдке.
Узел деÑева ÑендеÑинга извеÑÑен в движке WebKit как «renderer» или «render object» (Ð¼Ñ Ð±Ñдем назÑваÑÑ Ð¸Ñ Â«Ð¾Ð±ÑекÑами ÑендеÑинга»).
ÐÐ¾Ñ ÐºÐ°Ðº бÑÐ´ÐµÑ Ð²ÑглÑдеÑÑ Ð´ÐµÑево ÑендеÑинга Ð´Ð»Ñ Ð´ÐµÑевÑев DOM и CSSOM, показаннÑÑ Ð²ÑÑе.
ÐеÑево ÑендеÑинга
ÐÐ¾Ñ Ð¾Ð±Ñее опиÑание дейÑÑвий бÑаÑзеÑа, вÑполнÑемÑÑ Ð¸Ð¼ пÑи Ñоздании деÑева ÑендеÑинга.
ÐÐ»Ñ Ñого, ÑÑÐ¾Ð±Ñ Ð»ÑÑÑе понÑÑÑ Ñо, о ÑÑм ÑÑÑ Ð¸Ð´ÑÑ ÑеÑÑ, можеÑе взглÑнÑÑÑ Ð½Ð° иÑÑ Ð¾Ð´Ð½Ñй код клаÑÑа RenderObject из WebKit. ÐаждÑй обÑÐµÐºÑ ÑендеÑинга пÑедÑÑавлÑÐµÑ Ñобой пÑÑмоÑголÑнÑÑ Ð¾Ð±Ð»Ð°ÑÑÑ, обÑÑно ÑооÑвеÑÑÑвÑÑÑÑÑ CSS-Ð±Ð»Ð¾ÐºÑ Ñзла. Ð¡Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾Ð± ÑÑом блоке вклÑÑаÑÑ ÐµÐ³Ð¾ геомеÑÑиÑеÑкие Ñ Ð°ÑакÑеÑиÑÑики, Ñакие, как ÑиÑина, вÑÑоÑа и позиÑиÑ.
ÐоÑле Ñого, как обÑÐµÐºÑ ÑендеÑинга Ñоздан и добавлен в деÑево, ÐµÐ¼Ñ Ð¿Ð¾ÐºÐ° еÑÑ Ð½Ðµ назнаÑÐµÐ½Ñ Ð¿Ð¾Ð·Ð¸ÑÐ¸Ñ Ð¸ ÑазмеÑ. ÐÑÑиÑление ÑÑÐ¸Ñ Ð·Ð½Ð°Ñений и назÑваеÑÑÑ ÑоÑмиÑованием макеÑа ÑÑÑаниÑÑ.
HTML иÑполÑзÑÐµÑ Ð¿Ð¾ÑоковÑÑ Ð¼Ð¾Ð´ÐµÐ»Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ¸. ÐÑо ознаÑаеÑ, ÑÑо ÑаÑе вÑего ÑиÑÑема Ð¼Ð¾Ð¶ÐµÑ Ð²ÑÑиÑлиÑÑ Ð³ÐµÐ¾Ð¼ÐµÑÑиÑеÑкие паÑамеÑÑÑ ÑлеменÑов за один пÑÐ¾Ñ Ð¾Ð´. ТÑÑ Ð¸ÑполÑзÑеÑÑÑ ÐºÐ¾Ð¾ÑдинаÑÐ½Ð°Ñ ÑиÑÑема, оÑÐ½Ð¾Ð²Ð°Ð½Ð½Ð°Ñ Ð½Ð° коÑневом обÑекÑе ÑендеÑинга, в ней пÑименÑÑÑÑÑ ÐºÐ¾Ð¾ÑдинаÑÑ
ФоÑмиÑование макеÑа â ÑÑо ÑекÑÑÑивнÑй пÑоÑеÑÑ. Ðн наÑинаеÑÑÑ Ð² коÑневом обÑекÑе, коÑоÑÑй ÑооÑвеÑÑÑвÑÐµÑ ÑлеменÑÑ Ð´Ð¾ÐºÑменÑа
ÐозиÑÐ¸Ñ ÐºÐ¾Ñневого обÑекÑа ÑендеÑинга â
ÐÑоÑеÑÑ ÑоÑмиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¼Ð°ÐºÐµÑа ознаÑÐ°ÐµÑ Ð·Ð°Ð´Ð°Ð½Ð¸Ðµ ÐºÐ°Ð¶Ð´Ð¾Ð¼Ñ ÑÐ·Ð»Ñ ÑоÑной позиÑии, в коÑоÑой он должен поÑвиÑÑÑÑ Ð½Ð° ÑÑÑаниÑе.
Ðа данном ÑÑапе оÑÑÑеÑÑвлÑеÑÑÑ Ð¾Ð±Ñ Ð¾Ð´ деÑева ÑендеÑинга и вÑзов меÑодов
ÐизÑализаÑиÑ, или оÑÑиÑовка, Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð³Ð»Ð¾Ð±Ð°Ð»Ñной или инкÑеменÑной (Ñак же вÑполнÑеÑÑÑ Ð¸ ÑоÑмиÑование макеÑа ÑÑÑаниÑÑ).
Ð Ñелом, важно понимаÑÑ, ÑÑо визÑализаÑÐ¸Ñ â ÑÑо поÑÑапнÑй пÑоÑеÑÑ. ÐÐ»Ñ ÑлÑÑÑÐµÐ½Ð¸Ñ Ð²Ð¾ÑпÑиÑÑÐ¸Ñ ÑÑÑаниÑÑ Ð¿Ð¾Ð»ÑзоваÑелÑми движок ÑендеÑинга ÑÑÑемиÑÑÑ Ðº ÑомÑ, ÑÑÐ¾Ð±Ñ Ð²ÑвеÑÑи ÑÑÑаниÑÑ Ð½Ð° ÑкÑан как можно ÑкоÑее. Ðн не бÑÐ´ÐµÑ Ð¶Ð´Ð°ÑÑ Ð´Ð¾ ÑÐµÑ Ð¿Ð¾Ñ, пока бÑÐ´ÐµÑ ÑазобÑан веÑÑ HTML, Ð´Ð»Ñ Ñого, ÑÑÐ¾Ð±Ñ Ð¿ÑиÑÑÑпиÑÑ Ðº ÑоÑмиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð´ÐµÑева ÑендеÑинга и к ÑаÑÑÑÑÑ Ð¿Ð°ÑамеÑÑов макеÑа ÑÑÑаниÑÑ. Ð ÑезÑлÑÑаÑе некоÑоÑÑе ÑаÑÑи ÑÑÑаниÑÑ Ð¾ÐºÐ°Ð¶ÑÑÑÑ Ð¾Ð±ÑабоÑаннÑми и вÑведеннÑми на ÑкÑан, в Ñо вÑÐµÐ¼Ñ ÐºÐ°Ðº движок ÑендеÑинга пÑÐ¾Ð´Ð¾Ð»Ð¶Ð¸Ñ ÑабоÑÑ Ñ Ð¾ÑÑавÑимÑÑ ÑодеÑжимÑм ÑÑÑаниÑÑ, коÑоÑое поÑÑÑÐ¿Ð°ÐµÑ Ð¸Ð· ÑеÑи.
Ð Ð°Ð·Ð±Ð¾Ñ Ð¸ вÑполнение ÑкÑипÑа оÑÑÑеÑÑвлÑеÑÑÑ ÑÑÐ°Ð·Ñ Ð¶Ðµ поÑле Ñого, как ÑиÑÑема обÑабоÑки кода ÑÑÑаниÑÑ Ð´Ð¾ÑÑÐ¸Ð³Ð½ÐµÑ Ñега
ÐÑли ÑкÑÐ¸Ð¿Ñ Ð¿Ð¾Ð»ÑÑаÑÑ Ð¸Ð· внеÑнего иÑÑоÑника, Ñо ÑнаÑала он должен бÑÑÑ Ð·Ð°Ð³ÑÑжен ÑеÑез ÑеÑÑ (Ñоже ÑÐ¸Ð½Ñ Ñонно). ÐбÑабоÑка ÑÑÑаниÑÑ Ð¿ÑиоÑÑанавливаеÑÑÑ Ð´Ð¾ ÑÐµÑ Ð¿Ð¾Ñ, пока загÑÑзка ÑкÑипÑа не бÑÐ´ÐµÑ Ð·Ð°Ð²ÐµÑÑена.
HTML5 позволÑÐµÑ ÑказÑваÑÑ Ð½Ð° возможноÑÑÑ Ð°ÑÐ¸Ð½Ñ Ñонной загÑÑзки и обÑабоÑки ÑкÑипÑа Ñ Ð¸ÑполÑзованием оÑделÑного поÑока.
ÐÑли Ð²Ñ Ñ Ð¾ÑиÑе опÑимизиÑоваÑÑ ÑÐ²Ð¾Ñ Ð¿Ñиложение Ñ ÑÑÑÑом оÑобенноÑÑей ÑендеÑинга ÑÑÑаниÑ, ÑÑÑеÑÑвÑÐµÑ Ð¿ÑÑÑ Ð¾ÑновнÑÑ Ð¾Ð±Ð»Ð°ÑÑей, коÑоÑÑе Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе конÑÑолиÑоваÑÑ, и на коÑоÑÑе нÑжно обÑаÑиÑÑ Ð²Ð½Ð¸Ð¼Ð°Ð½Ð¸Ðµ.
JavaScript-код ÑаÑÑо пÑÐ¸Ð²Ð¾Ð´Ð¸Ñ Ðº Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñого, ÑÑо можно наблÑдаÑÑ Ð² бÑаÑзеÑе. ÐÑобенно ÑÑо акÑÑалÑно Ð´Ð»Ñ Ð¾Ð´Ð½Ð¾ÑÑÑаниÑнÑÑ Ð¿Ñиложений. ÐÐ¾Ñ Ð½ÐµÑколÑко ÑовеÑов, каÑаÑÑÐ¸Ñ ÑÑ Ð¾Ð¿ÑимизаÑии JS Ð´Ð»Ñ ÑлÑÑÑÐµÐ½Ð¸Ñ Ð¿ÑоÑеÑÑа ÑендеÑинга ÑÑÑаниÑ.
ÐодиÑикаÑÐ¸Ñ DOM пÑÑÑм Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¸ ÑÐ´Ð°Ð»ÐµÐ½Ð¸Ñ ÑлеменÑов, Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð°ÑÑибÑÑов и дÑÑÐ³Ð¸Ñ Ð¿Ð¾Ð´Ð¾Ð±Ð½ÑÑ Ð´ÐµÐ¹ÑÑвий пÑиведÑÑ Ðº ÑомÑ, ÑÑо бÑаÑзеÑÑ Ð¿ÑидÑÑÑÑ Ð¿ÐµÑеÑÑиÑаÑÑ ÑÑили ÑлеменÑов, и, во Ð¼Ð½Ð¾Ð³Ð¸Ñ ÑлÑÑаÑÑ , Ð¼Ð°ÐºÐµÑ Ð²Ñей ÑÑÑаниÑÑ, или, по кÑайней меÑе, некоÑоÑой ÐµÑ ÑаÑÑи. ÐÐ»Ñ Ð¾Ð¿ÑимизаÑии пÑоÑеÑÑа ÑендеÑинга ÑÑÑаниÑÑ ÑÑиÑÑвайÑе ÑледÑÑÑее.
ÐеÑеÑÑÑÑ Ð¼Ð°ÐºÐµÑа ÑÑÑаниÑÑ Ð¼Ð¾Ð¶ÐµÑ ÑÑебоваÑÑ ÑеÑÑÑзнÑÑ ÑиÑÑемнÑÑ ÑеÑÑÑÑов. ÐÐ»Ñ Ð¾Ð¿ÑимизаÑии ÑÑого пÑоÑеÑÑа пÑимиÑе во внимание ÑледÑÑÑее.
ЧаÑÑо ÑÑа задаÑа оÑÐ½Ð¸Ð¼Ð°ÐµÑ Ð±Ð¾Ð»ÑÑе вÑего вÑемени, поÑÑÐ¾Ð¼Ñ Ð²Ð°Ð¶Ð½Ð¾ избегаÑÑ ÑиÑÑаÑий, пÑиводÑÑÐ¸Ñ Ðº пеÑеÑиÑовке ÑÑÑаниÑÑ. ÐÐ¾Ñ ÑÑо здеÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ ÑделаÑÑ.
Ð ÑÑом маÑеÑиале Ð¼Ñ Ð¿Ð¾Ð³Ð¾Ð²Ð¾Ñили о подÑиÑÑÐµÐ¼Ð°Ñ ÑендеÑинга ÑовÑеменнÑÑ Ð±ÑаÑзеÑов. ÐÑавилÑнÑй Ð¿Ð¾Ð´Ñ Ð¾Ð´ к визÑализаÑии ÑÑÑÐ°Ð½Ð¸Ñ Ð²ÐµÐ´ÑÑ Ðº повÑÑÐµÐ½Ð¸Ñ Ð¿ÑоизводиÑелÑноÑÑи веб-пÑиложений и к ÑлÑÑÑÐµÐ½Ð¸Ñ Ð²Ð¿ÐµÑаÑлений полÑзоваÑелей Ð¾Ñ ÑабоÑÑ Ñ Ð½Ð¸Ð¼Ð¸.
ÐÑедÑдÑÑие ÑаÑÑи Ñикла ÑÑаÑей:
ЧаÑÑÑ 1: Ðак ÑабоÑÐ°ÐµÑ JS: Ð¾Ð±Ð·Ð¾Ñ Ð´Ð²Ð¸Ð¶ÐºÐ°, Ð¼ÐµÑ Ð°Ð½Ð¸Ð·Ð¼Ð¾Ð² вÑемени вÑполнениÑ, ÑÑека вÑзовов
ЧаÑÑÑ 2: Ðак ÑабоÑÐ°ÐµÑ JS: о внÑÑÑеннем ÑÑÑÑойÑÑве V8 и опÑимизаÑии кода
ЧаÑÑÑ 3: Ðак ÑабоÑÐ°ÐµÑ JS: ÑпÑавление памÑÑÑÑ, ÑеÑÑÑе вида ÑÑеÑек памÑÑи и боÑÑба Ñ Ð½Ð¸Ð¼Ð¸
ЧаÑÑÑ 4: Ðак ÑабоÑÐ°ÐµÑ JS: Ñикл ÑобÑÑий, аÑÐ¸Ð½Ñ ÑонноÑÑÑ Ð¸ пÑÑÑ ÑпоÑобов ÑлÑÑÑÐµÐ½Ð¸Ñ ÐºÐ¾Ð´Ð° Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ async / await
ЧаÑÑÑ 5: Ðак ÑабоÑÐ°ÐµÑ JS: WebSocket и HTTP/2+SSE. ЧÑо вÑбÑаÑÑ?
ЧаÑÑÑ 6: Ðак ÑабоÑÐ°ÐµÑ JS: оÑобенноÑÑи и ÑÑеÑа пÑÐ¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ WebAssembly
ЧаÑÑÑ 7: Ðак ÑабоÑÐ°ÐµÑ JS: веб-воÑкеÑÑ Ð¸ пÑÑÑ ÑÑенаÑиев Ð¸Ñ Ð¸ÑполÑзованиÑ
ЧаÑÑÑ 8: Ðак ÑабоÑÐ°ÐµÑ JS: ÑеÑвиÑ-воÑкеÑÑ
ЧаÑÑÑ 9: Ðак ÑабоÑÐ°ÐµÑ JS: веб push-ÑведомлениÑ
ЧаÑÑÑ 10: Ðак ÑабоÑÐ°ÐµÑ JS: оÑÑлеживание изменений в DOM Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ MutationObserver
УважаемÑе ÑиÑаÑели! Ðакие пÑиÑÐ¼Ñ Ð²Ñ Ð¿ÑименÑеÑе Ð´Ð»Ñ Ð¾Ð¿ÑимизаÑии ÑендеÑинга ÑÑÑÐ°Ð½Ð¸Ñ Ð²Ð°ÑÐ¸Ñ Ð²ÐµÐ±-пÑоекÑов?
ÐвÑÐ¾Ñ Ð¼Ð°ÑеÑиала говоÑиÑ, ÑÑо в компании SessionStack пÑÐ¸Ñ Ð¾Ð´Ð¸ÑÑÑ ÑделÑÑÑ ÑендеÑÐ¸Ð½Ð³Ñ Ð¾Ð³Ñомное внимание. Ð ÑÑой ÑÑаÑÑе он поделиÑÑÑ ÑовеÑами, каÑаÑÑимиÑÑ Ð¾Ð¿ÑимизаÑии веб-ÑÑÑÐ°Ð½Ð¸Ñ Ñ ÑÑÑÑом оÑобенноÑÑей Ð¸Ñ Ð²Ð¸Ð·ÑализаÑии.
[СовеÑÑем поÑиÑаÑÑ] ÐÑÑгие 19 ÑаÑÑей Ñикла
ЧаÑÑÑ 1: ÐÐ±Ð·Ð¾Ñ Ð´Ð²Ð¸Ð¶ÐºÐ°, меÑ
анизмов вÑемени вÑполнениÑ, ÑÑека вÑзовов
ЧаÑÑÑ 2: РвнÑÑÑеннем ÑÑÑÑойÑÑве V8 и опÑимизаÑии кода
ЧаÑÑÑ 3: УпÑавление памÑÑÑÑ, ÑеÑÑÑе вида ÑÑеÑек памÑÑи и боÑÑба Ñ Ð½Ð¸Ð¼Ð¸
ЧаÑÑÑ 4: Цикл ÑобÑÑий, аÑÐ¸Ð½Ñ ÑонноÑÑÑ Ð¸ пÑÑÑ ÑпоÑобов ÑлÑÑÑÐµÐ½Ð¸Ñ ÐºÐ¾Ð´Ð° Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ async / await
ЧаÑÑÑ 5: WebSocket и HTTP/2+SSE. ЧÑо вÑбÑаÑÑ?
ЧаÑÑÑ 6: ÐÑобенноÑÑи и ÑÑеÑа пÑÐ¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ WebAssembly
ЧаÑÑÑ 7: Ðеб-воÑкеÑÑ Ð¸ пÑÑÑ ÑÑенаÑиев Ð¸Ñ Ð¸ÑполÑзованиÑ
ЧаÑÑÑ 8: СеÑвиÑ-воÑкеÑÑ
ЧаÑÑÑ 9: Ðеб push-ÑведомлениÑ
ЧаÑÑÑ 10: ÐÑÑлеживание изменений в DOM Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ MutationObserver
ЧаÑÑÑ 11: Ðвижки ÑендеÑинга веб-ÑÑÑÐ°Ð½Ð¸Ñ Ð¸ ÑовеÑÑ Ð¿Ð¾ опÑимизаÑии Ð¸Ñ Ð¿ÑоизводиÑелÑноÑÑи
ЧаÑÑÑ 12: СеÑÐµÐ²Ð°Ñ Ð¿Ð¾Ð´ÑиÑÑема бÑаÑзеÑов, опÑимизаÑÐ¸Ñ ÐµÑ Ð¿ÑоизводиÑелÑноÑÑи и безопаÑноÑÑи
ЧаÑÑÑ 12: СеÑÐµÐ²Ð°Ñ Ð¿Ð¾Ð´ÑиÑÑема бÑаÑзеÑов, опÑимизаÑÐ¸Ñ ÐµÑ Ð¿ÑоизводиÑелÑноÑÑи и безопаÑноÑÑи
ЧаÑÑÑ 13: ÐнимаÑÐ¸Ñ ÑÑедÑÑвами CSS и JavaScript
ЧаÑÑÑ 14: Ðак ÑабоÑÐ°ÐµÑ JS: абÑÑÑакÑнÑе ÑинÑакÑиÑеÑкие деÑевÑÑ, паÑÑинг и его опÑимизаÑиÑ
ЧаÑÑÑ 15: Ðак ÑабоÑÐ°ÐµÑ JS: клаÑÑÑ Ð¸ наÑледование, ÑÑанÑпилÑÑÐ¸Ñ Ð² Babel и TypeScript
ЧаÑÑÑ 16: Ðак ÑабоÑÐ°ÐµÑ JS: ÑиÑÑÐµÐ¼Ñ Ñ ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ
ЧаÑÑÑ 17: Ðак ÑабоÑÐ°ÐµÑ JS: ÑÐµÑ Ð½Ð¾Ð»Ð¾Ð³Ð¸Ñ Shadow DOM и веб-компоненÑÑ
ЧаÑÑÑ 18: Ðак ÑабоÑÐ°ÐµÑ JS: WebRTC и Ð¼ÐµÑ Ð°Ð½Ð¸Ð·Ð¼Ñ P2P-коммÑникаÑий
ЧаÑÑÑ 19: Ðак ÑабоÑÐ°ÐµÑ JS: полÑзоваÑелÑÑкие ÑлеменÑÑ
ЧаÑÑÑ 2: РвнÑÑÑеннем ÑÑÑÑойÑÑве V8 и опÑимизаÑии кода
ЧаÑÑÑ 3: УпÑавление памÑÑÑÑ, ÑеÑÑÑе вида ÑÑеÑек памÑÑи и боÑÑба Ñ Ð½Ð¸Ð¼Ð¸
ЧаÑÑÑ 4: Цикл ÑобÑÑий, аÑÐ¸Ð½Ñ ÑонноÑÑÑ Ð¸ пÑÑÑ ÑпоÑобов ÑлÑÑÑÐµÐ½Ð¸Ñ ÐºÐ¾Ð´Ð° Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ async / await
ЧаÑÑÑ 5: WebSocket и HTTP/2+SSE. ЧÑо вÑбÑаÑÑ?
ЧаÑÑÑ 6: ÐÑобенноÑÑи и ÑÑеÑа пÑÐ¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ WebAssembly
ЧаÑÑÑ 7: Ðеб-воÑкеÑÑ Ð¸ пÑÑÑ ÑÑенаÑиев Ð¸Ñ Ð¸ÑполÑзованиÑ
ЧаÑÑÑ 8: СеÑвиÑ-воÑкеÑÑ
ЧаÑÑÑ 9: Ðеб push-ÑведомлениÑ
ЧаÑÑÑ 10: ÐÑÑлеживание изменений в DOM Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ MutationObserver
ЧаÑÑÑ 11: Ðвижки ÑендеÑинга веб-ÑÑÑÐ°Ð½Ð¸Ñ Ð¸ ÑовеÑÑ Ð¿Ð¾ опÑимизаÑии Ð¸Ñ Ð¿ÑоизводиÑелÑноÑÑи
ЧаÑÑÑ 12: СеÑÐµÐ²Ð°Ñ Ð¿Ð¾Ð´ÑиÑÑема бÑаÑзеÑов, опÑимизаÑÐ¸Ñ ÐµÑ Ð¿ÑоизводиÑелÑноÑÑи и безопаÑноÑÑи
ЧаÑÑÑ 12: СеÑÐµÐ²Ð°Ñ Ð¿Ð¾Ð´ÑиÑÑема бÑаÑзеÑов, опÑимизаÑÐ¸Ñ ÐµÑ Ð¿ÑоизводиÑелÑноÑÑи и безопаÑноÑÑи
ЧаÑÑÑ 13: ÐнимаÑÐ¸Ñ ÑÑедÑÑвами CSS и JavaScript
ЧаÑÑÑ 14: Ðак ÑабоÑÐ°ÐµÑ JS: абÑÑÑакÑнÑе ÑинÑакÑиÑеÑкие деÑевÑÑ, паÑÑинг и его опÑимизаÑиÑ
ЧаÑÑÑ 15: Ðак ÑабоÑÐ°ÐµÑ JS: клаÑÑÑ Ð¸ наÑледование, ÑÑанÑпилÑÑÐ¸Ñ Ð² Babel и TypeScript
ЧаÑÑÑ 16: Ðак ÑабоÑÐ°ÐµÑ JS: ÑиÑÑÐµÐ¼Ñ Ñ ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ
ЧаÑÑÑ 17: Ðак ÑабоÑÐ°ÐµÑ JS: ÑÐµÑ Ð½Ð¾Ð»Ð¾Ð³Ð¸Ñ Shadow DOM и веб-компоненÑÑ
ЧаÑÑÑ 18: Ðак ÑабоÑÐ°ÐµÑ JS: WebRTC и Ð¼ÐµÑ Ð°Ð½Ð¸Ð·Ð¼Ñ P2P-коммÑникаÑий
ЧаÑÑÑ 19: Ðак ÑабоÑÐ°ÐµÑ JS: полÑзоваÑелÑÑкие ÑлеменÑÑ
ÐбзоÑ
Ð¡Ð¾Ð·Ð´Ð°Ð²Ð°Ñ Ð²ÐµÐ±-пÑиложениÑ, Ð¼Ñ Ð½Ðµ пиÑем изолиÑованнÑй JS-код, коÑоÑÑй занимаеÑÑÑ Ð¸ÑклÑÑиÑелÑно какими-Ñо ÑобÑÑвеннÑми «внÑÑÑенними» делами. ÐÑÐ¾Ñ ÐºÐ¾Ð´ вÑполнÑеÑÑÑ Ð² окÑÑжении, пÑедоÑÑавлÑемом ÐµÐ¼Ñ Ð±ÑаÑзеÑом, взаимодейÑÑвÑÐµÑ Ñ Ð½Ð¸Ð¼. Ðонимание ÑÑÑÑойÑÑва ÑÑого окÑÑжениÑ, Ñого, как оно ÑабоÑаеÑ, из ÐºÐ°ÐºÐ¸Ñ ÑаÑÑей ÑоÑÑоиÑ, позволÑÐµÑ ÑазÑабоÑÑÐ¸ÐºÑ ÑоздаваÑÑ Ð±Ð¾Ð»ÐµÐµ каÑеÑÑвеннÑе пÑогÑаммÑ, даÑÑ ÐµÐ¼Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ Ð¿ÑедÑÑмоÑÑеÑÑ Ð²Ð¾Ð·Ð½Ð¸ÐºÐ½Ð¾Ð²ÐµÐ½Ð¸Ðµ возможнÑÑ Ð¿Ñоблем Ñ Ð¿Ñиложением, коÑоÑое вÑÑло в ÑвеÑ.
Ðа ÑиÑÑнке ниже Ð¿Ð¾ÐºÐ°Ð·Ð°Ð½Ñ Ð¾ÑновнÑе компоненÑÑ Ð±ÑаÑзеÑа. ÐавайÑе поговоÑим о Ñом, какÑÑ ÑÐ¾Ð»Ñ Ð¾Ð½Ð¸ игÑаÑÑ Ð² пÑоÑеÑÑе обÑабоÑки веб-ÑÑÑаниÑ.
ÐÑновнÑе компоненÑÑ Ð±ÑаÑзеÑа
- ÐолÑзоваÑелÑÑкий инÑеÑÑÐµÐ¹Ñ (User Interface). ÐÑÐ¾Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ Ð±ÑаÑзеÑа вклÑÑÐ°ÐµÑ Ð² ÑÐµÐ±Ñ Ð°Ð´ÑеÑнÑÑ ÑÑÑокÑ, кнопки «ÐпеÑÑд» и «Ðазад», ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð´Ð»Ñ ÑабоÑÑ Ñ Ð·Ð°ÐºÐ»Ð°Ð´ÐºÐ°Ð¼Ð¸, и Ñак далее. Ð Ñелом, ÑÑо вÑÑ Ñо, ÑÑо вÑÐ²Ð¾Ð´Ð¸Ñ Ð½Ð° ÑкÑан бÑаÑÐ·ÐµÑ â за иÑклÑÑением Ñой облаÑÑи его окна, где наÑ
одиÑÑÑ Ð¾ÑобÑÐ°Ð¶Ð°ÐµÐ¼Ð°Ñ Ð¸Ð¼ веб-ÑÑÑаниÑа.
- Ðвижок бÑаÑзеÑа (Browser Engine). Ðн занимаеÑÑÑ Ð¿Ð¾Ð´Ð´ÐµÑжкой взаимодейÑÑÐ²Ð¸Ñ Ð¼ÐµÐ¶Ð´Ñ Ð¿Ð¾Ð»ÑзоваÑелÑÑким инÑеÑÑейÑом и движком ÑендеÑинга.
- Ðвижок ÑендеÑинга (Rendering Engine). ÐÑа подÑиÑÑема оÑвеÑÐ°ÐµÑ Ð·Ð° показ веб-ÑÑÑаниÑÑ. Ðвижок ÑендеÑинга обÑабаÑÑÐ²Ð°ÐµÑ HTML и CSS и вÑÐ²Ð¾Ð´Ð¸Ñ Ñо, ÑÑо Ñ Ð½ÐµÐ³Ð¾ полÑÑилоÑÑ, на ÑкÑан.
- СеÑÐµÐ²Ð°Ñ Ð¿Ð¾Ð´ÑиÑÑема (Networking). ÐÑа подÑиÑÑема оÑвеÑÑÑвенна за ÑеÑевое взаимодейÑÑвие бÑаÑзеÑа Ñ Ð²Ð½ÐµÑним миÑом, в ÑаÑÑноÑÑи, напÑимеÑ, ÐµÑ ÑÑедÑÑвами вÑполнÑÑÑÑÑ XHR-запÑоÑÑ. Ðна поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð¿Ð»Ð°ÑÑоÑменно-незавиÑимÑй инÑеÑÑейÑ, за коÑоÑÑм ÑкÑÑваÑÑÑÑ ÐºÐ¾Ð½ÐºÑеÑнÑе ÑеализаÑии ÑазлиÑнÑÑ
ÑеÑевÑÑ
меÑ
анизмов, ÑпеÑиÑиÑнÑе Ð´Ð»Ñ ÑазлиÑнÑÑ
плаÑÑоÑм. ÐдеÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ поÑиÑаÑÑ Ð¿Ð¾Ð´ÑобноÑÑи об ÑÑой подÑиÑÑеме.
- ÐодÑиÑÑема поддеÑжки полÑзоваÑелÑÑкого инÑеÑÑейÑа (UI Backend). ÐÑа подÑиÑÑема оÑвеÑÐ°ÐµÑ Ð·Ð° вÑвод базовÑÑ
компоненÑов инÑеÑÑейÑа, ÑакиÑ
, как окна и ÑлеменÑÑ ÑпÑавлениÑ, вÑоде ÑекбокÑов. ÐдеÑÑ Ð±ÑаÑзеÑÑ Ð¿ÑедоÑÑавлÑеÑÑÑ ÑнивеÑÑалÑнÑй инÑеÑÑейÑ, не завиÑÑÑий Ð¾Ñ Ð¿Ð»Ð°ÑÑоÑмÑ, на коÑоÑой он ÑабоÑаеÑ, а в оÑнове ÑÑой подÑиÑÑÐµÐ¼Ñ Ð»ÐµÐ¶Ð°Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑи ÑоÑмиÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÑлеменÑов полÑзоваÑелÑÑкого инÑеÑÑейÑа, пÑедоÑÑавлÑемÑе конкÑеÑной опеÑаÑионной ÑиÑÑемой.
- JavaScript-движок (JavaScript Engine). ÐÑ ÑазбиÑали JS-движок в одном из пÑедÑдÑÑиÑ
маÑеÑиалов ÑÑой ÑеÑии. Ðменно здеÑÑ Ð¾ÑÑÑеÑÑвлÑеÑÑÑ Ð²Ñполнение JS-кода.
- ÐодÑиÑÑема поÑÑоÑнного Ñ
ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ
(Data Persistence). ÐÑли пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð½ÑÐ¶Ð½Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑи локалÑного Ñ
ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ
, оно Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾Ð»ÑзоваÑÑÑÑ ÑазлиÑнÑми меÑ
анизмами, пÑедоÑÑавлÑемÑми ÑÑой подÑиÑÑемой. СÑеди ниÑ
, напÑимеÑ, Ñакие API, как localStorage, IndexedDB, WebSQL и FileSystem.
Ð ÑÑом маÑеÑиале Ð¼Ñ ÑоÑÑедоÑоÑимÑÑ Ð½Ð° движке ÑендеÑинга. Ðменно ÑÑа подÑиÑÑема бÑаÑзеÑа занимаеÑÑÑ ÑазбоÑом и визÑализаÑией HTML и CSS. Ð ÑÑо â именно Ñе ÑÐµÑ Ð½Ð¾Ð»Ð¾Ð³Ð¸Ð¸, Ñ ÐºÐ¾ÑоÑÑми поÑÑоÑнно взаимодейÑÑвÑÐµÑ ÐºÐ¾Ð´ веб-пÑиложений, напиÑаннÑй на JavaScript.
Ð ÑазлиÑнÑÑ Ð´Ð²Ð¸Ð¶ÐºÐ°Ñ ÑендеÑинга
ÐÐ»Ð°Ð²Ð½Ð°Ñ Ð·Ð°Ð´Ð°Ñа движка ÑендеÑинга заклÑÑаеÑÑÑ Ð² Ñом, ÑÑÐ¾Ð±Ñ Ð²ÑвеÑÑи запÑоÑеннÑÑ ÑÑÑаниÑÑ Ð² окне бÑаÑзеÑа. Ðвижок Ð¼Ð¾Ð¶ÐµÑ Ð²ÑводиÑÑ HTML-докÑменÑÑ, XML-докÑменÑÑ, изобÑажениÑ. ÐÑи иÑполÑзовании дополниÑелÑнÑÑ Ð¿Ð»Ð°Ð³Ð¸Ð½Ð¾Ð² движок Ð¼Ð¾Ð¶ÐµÑ Ð²Ð¸Ð·ÑализиÑоваÑÑ Ð¸ маÑеÑÐ¸Ð°Ð»Ñ Ð´ÑÑÐ³Ð¸Ñ Ñипов, напÑÐ¸Ð¼ÐµÑ â PDF-докÑменÑÑ.
ÐÑ Ð·Ð½Ð°ÐµÐ¼, ÑÑо ÑÑÑеÑÑвÑÑÑ ÑазлиÑнÑе JS-движки, коÑоÑÑе иÑполÑзÑÑÑ ÑазлиÑнÑе бÑаÑзеÑÑ. То же Ñамое ÑпÑаведливо и Ð´Ð»Ñ Ð´Ð²Ð¸Ð¶ÐºÐ¾Ð² ÑендеÑинга. ÐÐ¾Ñ Ð½ÐµÑколÑко попÑлÑÑнÑÑ Ð´Ð²Ð¸Ð¶ÐºÐ¾Ð²:
- Gecko â иÑполÑзÑеÑÑÑ Ð² бÑаÑзеÑе Firefox.
- WebKit â пÑименÑеÑÑÑ Ð² бÑаÑзеÑе Safari.
- Blink â инÑегÑиÑован в бÑаÑзеÑÑ Chrome и Opera (Ñ 15-й веÑÑии).
ÐÑоÑеÑÑ ÑендеÑинга веб-ÑÑÑаниÑÑ
Ðвижок ÑендеÑинга полÑÑÐ°ÐµÑ ÑодеÑжимое запÑоÑенного докÑменÑа Ð¾Ñ ÑеÑевого ÑÑÐ¾Ð²Ð½Ñ Ð±ÑаÑзеÑа. ÐÑоÑеÑÑ ÑендеÑинга вÑглÑÐ´Ð¸Ñ Ñак, как показано на ÑиÑÑнке ниже.
ÐÑоÑеÑÑ ÑендеÑинга веб-ÑÑÑаниÑÑ
ÐÐ¾Ñ Ð¾ÑновнÑе ÑÑÐ°Ð¿Ñ ÑÑого пÑоÑеÑÑа:
- ÐбÑабоÑка HTML Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð´ÐµÑева DOM.
- Создание деÑева ÑендеÑинга.
- РаÑÑÑÑ Ð¿Ð°ÑамеÑÑов ÑаÑÐ¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ ÑлеменÑов деÑева ÑендеÑинга на ÑкÑане, ÑоÑмиÑование макеÑа ÑÑÑаниÑÑ.
- ÐизÑализаÑÐ¸Ñ (оÑÑиÑовка) деÑева ÑендеÑинга.
РаÑÑмоÑÑим ÑÑи и дÑÑгие Ñаги, вÑполнÑемÑе пÑи визÑализаÑии веб-ÑÑÑаниÑ, подÑобнее.
Создание деÑева DOM
ÐеÑвÑй ÑÑап ÑабоÑÑ Ð´Ð²Ð¸Ð¶ÐºÐ° ÑендеÑинга заклÑÑаеÑÑÑ Ð² ÑазбоÑе HTML-докÑменÑа и пÑеобÑазовании Ñого, ÑÑо Ñ Ð½ÐµÐ³Ð¾ полÑÑилоÑÑ, в ÑÐ·Ð»Ñ DOM, ÑазмеÑÑннÑе в деÑеве DOM. ÐÑи ÑÑом веб-ÑÑÑаниÑа, коÑоÑÐ°Ñ Ð¿ÑедÑÑавлена в виде HTML-кода, пÑеобÑазÑеÑÑÑ Ð² ÑÑÑÑкÑÑÑÑ, подобнÑÑ Ñой, коÑоÑÐ°Ñ Ð¿Ð¾ÐºÐ°Ð·Ð°Ð½Ð° на ÑиÑÑнке ниже.
ÐеÑево DOM
ÐаждÑй ÑÐ»ÐµÐ¼ÐµÐ½Ñ ÑÑого деÑева, ÑодеÑжаÑий вложеннÑе ÑлеменÑÑ, ÑвлÑеÑÑÑ Ð´Ð»Ñ Ð½Ð¸Ñ ÑодиÑелÑÑким. ÐÑо ÑпÑаведливо Ð´Ð»Ñ Ð²ÑÐµÑ ÑÑовней вложенноÑÑи.
Создание деÑева CSSOM
CSSOM (CSS Object Model) â ÑÑо обÑекÑÐ½Ð°Ñ Ð¼Ð¾Ð´ÐµÐ»Ñ CSS. Ðогда бÑаÑÐ·ÐµÑ Ð·Ð°Ð½Ð¸Ð¼Ð°ÐµÑÑÑ Ñозданием деÑева DOM ÑÑÑаниÑÑ, он Ð½Ð°Ñ Ð¾Ð´Ð¸Ñ Ð² Ñазделе
head
Ñег link
, коÑоÑÑй ÑÑÑлаеÑÑÑ Ð½Ð° внеÑний CSS-Ñайл, Ñкажем, имеÑÑий Ð¸Ð¼Ñ theme.css
. ÐжидаÑ, ÑÑо ÑÑÐ¾Ñ ÑеÑÑÑÑ Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾Ð½Ð°Ð´Ð¾Ð±Ð¸ÑÑÑÑ ÐµÐ¼Ñ Ð´Ð»Ñ ÑендеÑинга ÑÑÑаниÑÑ, бÑаÑÐ·ÐµÑ Ð²ÑполнÑÐµÑ Ð·Ð°Ð¿ÑÐ¾Ñ Ð½Ð° загÑÑÐ·ÐºÑ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ Ñайла. ÐÑÐ¾Ñ Ñайл ÑодеÑÐ¶Ð¸Ñ Ð² Ñебе обÑÑнÑй ÑекÑÑ, пÑедÑÑавлÑÑÑий Ñобой опиÑание ÑÑилей, пÑименÑемÑÑ
к ÑлеменÑам ÑÑÑаниÑÑ.Ðак и в ÑлÑÑае Ñ HTML, Ð´Ð²Ð¸Ð¶ÐºÑ Ð½Ñжно конвеÑÑиÑоваÑÑ CSS в неÑÑо, Ñ Ñем Ð¼Ð¾Ð¶ÐµÑ ÑабоÑаÑÑ Ð±ÑаÑÐ·ÐµÑ â в CSSOM. Ð ÑезÑлÑÑаÑе полÑÑаеÑÑÑ Ð´ÐµÑево CSSOM, пÑедÑÑавленное на ÑледÑÑÑем ÑиÑÑнке.
ÐеÑево CSSOM
ÐнаеÑе, поÑÐµÐ¼Ñ CSSOM Ð¸Ð¼ÐµÐµÑ Ð´ÑевовиднÑÑ ÑÑÑÑкÑÑÑÑ? Ðогда вÑполнÑеÑÑÑ ÑоÑмиÑование иÑогового набоÑа ÑÑилей Ð´Ð»Ñ ÑлеменÑа ÑÑÑаниÑÑ, бÑаÑÐ·ÐµÑ Ð½Ð°ÑÐ¸Ð½Ð°ÐµÑ Ñ Ð½Ð°Ð¸Ð±Ð¾Ð»ÐµÐµ обÑÐ¸Ñ Ð¿Ñавил, пÑименимÑÑ Ðº ÑÑÐ¾Ð¼Ñ ÑлеменÑÑ, пÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð½Ð¾Ð¼Ñ Ñзлом DOM (напÑимеÑ, еÑли Ñзел ÑвлÑеÑÑÑ Ð¿Ð¾Ñомком ÑлеменÑа
body
, к Ð½ÐµÐ¼Ñ Ð¿ÑименÑÑÑÑÑ Ð²Ñе ÑÑили, заданнÑе Ð´Ð»Ñ body
), а заÑем ÑекÑÑÑивно ÑÑоÑнÑÐµÑ Ð²ÑÑиÑленнÑе ÑÑили, пÑименÑÑ Ð±Ð¾Ð»ÐµÐµ ÑпеÑиÑиÑеÑкие пÑавила.РазбеÑÑм пÑимеÑ, коÑоÑÑй пÑедÑÑавлен на пÑедÑдÑÑем ÑиÑÑнке. ÐÑбой ÑекÑÑ, ÑодеÑжаÑийÑÑ Ð²Ð½ÑÑÑи Ñега
span
, коÑоÑÑй помеÑÑн в ÑÐ»ÐµÐ¼ÐµÐ½Ñ body
, вÑводиÑÑÑ ÐºÑаÑнÑм ÑвеÑом и Ð¸Ð¼ÐµÐµÑ ÑÐ°Ð·Ð¼ÐµÑ ÑÑиÑÑа, ÑавнÑй 16px
. ÐÑи ÑÑили ÑнаÑÐ»ÐµÐ´Ð¾Ð²Ð°Ð½Ñ Ð¾Ñ ÑлеменÑа body
. ÐÑли ÑÐ»ÐµÐ¼ÐµÐ½Ñ span
ÑвлÑеÑÑÑ Ð¿Ð¾Ñомком ÑлеменÑа p
, знаÑÐ¸Ñ ÐµÐ³Ð¾ ÑодеÑжимое не вÑводиÑÑÑ Ð² ÑооÑвеÑÑÑвии Ñ Ð¿ÑименÑннÑм к Ð½ÐµÐ¼Ñ Ð±Ð¾Ð»ÐµÐµ ÑпеÑиÑиÑнÑм ÑÑилем.ÐÑоме Ñого, обÑаÑиÑе внимание на Ñо, ÑÑо вÑÑепÑиведÑнное деÑево не ÑвлÑеÑÑÑ Ð¿Ð¾Ð»Ð½Ñм CSSOM-деÑевом. ТÑÑ Ð¿Ð¾ÐºÐ°Ð·Ð°Ð½Ñ Ð»Ð¸ÑÑ ÑÑили, коÑоÑÑе мÑ, в наÑем CSS-Ñайле, ÑеÑили пеÑеопÑеделиÑÑ. У каждого бÑаÑзеÑа имееÑÑÑ ÑÑандаÑÑнÑй Ð½Ð°Ð±Ð¾Ñ ÑÑилей, пÑименÑемÑй по ÑмолÑаниÑ, извеÑÑнÑй еÑÑ ÐºÐ°Ðº «ÑÑили полÑзоваÑелÑÑкого агенÑа» (user agent styles). Ðменно ÑезÑлÑÑаÑÑ Ð¿ÑÐ¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÑÑÐ¸Ñ ÑÑилей можно видеÑÑ Ð½Ð° ÑÑÑаниÑе, не имеÑÑей ÑвÑзаннÑÑ Ñ Ð½ÐµÐ¹ CSS-пÑавил. ÐаÑи же ÑÑили пÑоÑÑо пеÑеопÑеделÑÑÑ Ð½ÐµÐºÐ¾ÑоÑÑе из ÑÑандаÑÑнÑÑ ÑÑилей бÑаÑзеÑа.
Создание деÑева ÑендеÑинга
ÐнÑÑÑÑкÑии о внеÑнем виде ÑлеменÑов, пÑедÑÑавленнÑе в HTML, ÑкомбиниÑованнÑе Ñ Ð¸Ð½ÑоÑмаÑией об Ð¸Ñ ÑÑилизаÑии из деÑева CSSOM, иÑполÑзÑÑÑÑÑ Ð´Ð»Ñ ÑоÑмиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð´ÐµÑева ÑендеÑинга.
ЧÑо ÑÑо Ñакое? ÐÑо â деÑево визÑалÑнÑÑ ÑлеменÑов, ÑозданнÑÑ Ð² Ñом поÑÑдке, в коÑоÑом они бÑдÑÑ Ð²ÑводиÑÑÑÑ Ð½Ð° ÑкÑан. ÐÑо â визÑалÑное пÑедÑÑавление HTML-кода ÑÑÑаниÑÑ, оÑÑажаÑÑее влиÑние ÑооÑвеÑÑÑвÑÑÑÐ¸Ñ ÑÑой ÑÑÑаниÑе CSS-пÑавил. Ð¦ÐµÐ»Ñ ÑÑого деÑева заклÑÑаеÑÑÑ Ð² Ñом, ÑÑÐ¾Ð±Ñ Ð¾Ð±ÐµÑпеÑиÑÑ Ð²Ñвод ÑлеменÑов пÑавилÑном поÑÑдке.
Узел деÑева ÑендеÑинга извеÑÑен в движке WebKit как «renderer» или «render object» (Ð¼Ñ Ð±Ñдем назÑваÑÑ Ð¸Ñ Â«Ð¾Ð±ÑекÑами ÑендеÑинга»).
ÐÐ¾Ñ ÐºÐ°Ðº бÑÐ´ÐµÑ Ð²ÑглÑдеÑÑ Ð´ÐµÑево ÑендеÑинга Ð´Ð»Ñ Ð´ÐµÑевÑев DOM и CSSOM, показаннÑÑ Ð²ÑÑе.
ÐеÑево ÑендеÑинга
ÐÐ¾Ñ Ð¾Ð±Ñее опиÑание дейÑÑвий бÑаÑзеÑа, вÑполнÑемÑÑ Ð¸Ð¼ пÑи Ñоздании деÑева ÑендеÑинга.
- ÐаÑÐ¸Ð½Ð°Ñ Ñ ÐºÐ¾ÑÐ½Ñ Ð´ÐµÑева DOM, бÑаÑÐ·ÐµÑ Ð¾Ð±Ñ
Ð¾Ð´Ð¸Ñ ÐºÐ°Ð¶Ð´Ñй видимÑй Ñзел. ÐекоÑоÑÑе ÑÐ·Ð»Ñ Ð½ÐµÐ²Ð¸Ð´Ð¸Ð¼Ñ (напÑÐ¸Ð¼ÐµÑ â Ñеги, ÑодеÑжаÑие ÑÑÑлки на ÑкÑипÑÑ, меÑа-Ñеги, и Ñак далее), иÑ
бÑаÑÐ·ÐµÑ Ð¿ÑопÑÑкаеÑ, Ñак как они не влиÑÑÑ Ð½Ð° внеÑний вид ÑÑÑаниÑÑ. ÐекоÑоÑÑе ÑÐ·Ð»Ñ ÑкÑÑÑÑ ÑÑедÑÑвами CSS, бÑаÑÐ·ÐµÑ Ñак же не вклÑÑÐ°ÐµÑ Ð¸Ñ
в деÑево ÑендеÑинга. ÐапÑимеÑ, Ñзел
span
из наÑего пÑимеÑа не вÑводиÑÑÑ Ð² деÑеве ÑендеÑинга, Ñак как Ñ Ð½Ð°Ñ Ð¸Ð¼ÐµÐµÑÑÑ ÑвнÑм обÑазом заданное пÑавило, ÑÑÑанавливаÑÑего Ð´Ð»Ñ Ð½ÐµÐ³Ð¾ ÑвойÑÑвоdisplay: none
.
- ÐÐ»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ видимого Ñзла бÑаÑÐ·ÐµÑ Ð½Ð°Ñ
Ð¾Ð´Ð¸Ñ Ð¿Ð¾Ð´Ñ
одÑÑие CSSOM-пÑавила и пÑименÑÐµÑ Ð¸Ñ
.
- Ð ÑезÑлÑÑаÑе ÑоÑмиÑÑеÑÑÑ ÑÑÑÑкÑÑÑа, ÑодеÑжаÑÐ°Ñ Ð²Ð¸Ð´Ð¸Ð¼Ñе ÑÐ·Ð»Ñ Ð¸ вÑÑиÑленнÑе Ð´Ð»Ñ Ð½Ð¸Ñ
ÑÑили.
ÐÐ»Ñ Ñого, ÑÑÐ¾Ð±Ñ Ð»ÑÑÑе понÑÑÑ Ñо, о ÑÑм ÑÑÑ Ð¸Ð´ÑÑ ÑеÑÑ, можеÑе взглÑнÑÑÑ Ð½Ð° иÑÑ Ð¾Ð´Ð½Ñй код клаÑÑа RenderObject из WebKit. ÐаждÑй обÑÐµÐºÑ ÑендеÑинга пÑедÑÑавлÑÐµÑ Ñобой пÑÑмоÑголÑнÑÑ Ð¾Ð±Ð»Ð°ÑÑÑ, обÑÑно ÑооÑвеÑÑÑвÑÑÑÑÑ CSS-Ð±Ð»Ð¾ÐºÑ Ñзла. Ð¡Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾Ð± ÑÑом блоке вклÑÑаÑÑ ÐµÐ³Ð¾ геомеÑÑиÑеÑкие Ñ Ð°ÑакÑеÑиÑÑики, Ñакие, как ÑиÑина, вÑÑоÑа и позиÑиÑ.
ФоÑмиÑование макеÑа ÑÑÑаниÑÑ
ÐоÑле Ñого, как обÑÐµÐºÑ ÑендеÑинга Ñоздан и добавлен в деÑево, ÐµÐ¼Ñ Ð¿Ð¾ÐºÐ° еÑÑ Ð½Ðµ назнаÑÐµÐ½Ñ Ð¿Ð¾Ð·Ð¸ÑÐ¸Ñ Ð¸ ÑазмеÑ. ÐÑÑиÑление ÑÑÐ¸Ñ Ð·Ð½Ð°Ñений и назÑваеÑÑÑ ÑоÑмиÑованием макеÑа ÑÑÑаниÑÑ.
HTML иÑполÑзÑÐµÑ Ð¿Ð¾ÑоковÑÑ Ð¼Ð¾Ð´ÐµÐ»Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½Ð¾Ð²ÐºÐ¸. ÐÑо ознаÑаеÑ, ÑÑо ÑаÑе вÑего ÑиÑÑема Ð¼Ð¾Ð¶ÐµÑ Ð²ÑÑиÑлиÑÑ Ð³ÐµÐ¾Ð¼ÐµÑÑиÑеÑкие паÑамеÑÑÑ ÑлеменÑов за один пÑÐ¾Ñ Ð¾Ð´. ТÑÑ Ð¸ÑполÑзÑеÑÑÑ ÐºÐ¾Ð¾ÑдинаÑÐ½Ð°Ñ ÑиÑÑема, оÑÐ½Ð¾Ð²Ð°Ð½Ð½Ð°Ñ Ð½Ð° коÑневом обÑекÑе ÑендеÑинга, в ней пÑименÑÑÑÑÑ ÐºÐ¾Ð¾ÑдинаÑÑ
left
и top
.ФоÑмиÑование макеÑа â ÑÑо ÑекÑÑÑивнÑй пÑоÑеÑÑ. Ðн наÑинаеÑÑÑ Ð² коÑневом обÑекÑе, коÑоÑÑй ÑооÑвеÑÑÑвÑÐµÑ ÑлеменÑÑ Ð´Ð¾ÐºÑменÑа
<html>
. ÐÑоÑеÑÑ Ð²ÑполнÑеÑÑÑ ÑекÑÑÑивно по вÑей иеÑаÑÑ
иÑеÑкой ÑÑÑÑкÑÑÑе обÑекÑа ÑендеÑинга, пÑоизводиÑÑÑ Ð²ÑÑиÑление ÑазмеÑов и Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ ÑлеменÑа, коÑоÑÑй в ÑÑом нÑждаеÑÑÑ.ÐозиÑÐ¸Ñ ÐºÐ¾Ñневого обÑекÑа ÑендеÑинга â
0,0
. Ðго ÑазмеÑÑ ÑооÑвеÑÑÑвÑÑÑ ÑазмеÑам видимой ÑаÑÑи окна бÑаÑзеÑа (ÑÑо назÑваÑÑ Â«Ð¾Ð±Ð»Ð°ÑÑÑÑ Ð¿ÑоÑмоÑÑа», viewport).ÐÑоÑеÑÑ ÑоÑмиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¼Ð°ÐºÐµÑа ознаÑÐ°ÐµÑ Ð·Ð°Ð´Ð°Ð½Ð¸Ðµ ÐºÐ°Ð¶Ð´Ð¾Ð¼Ñ ÑÐ·Ð»Ñ ÑоÑной позиÑии, в коÑоÑой он должен поÑвиÑÑÑÑ Ð½Ð° ÑÑÑаниÑе.
ÐизÑализаÑÐ¸Ñ Ð´ÐµÑева ÑендеÑинга
Ðа данном ÑÑапе оÑÑÑеÑÑвлÑеÑÑÑ Ð¾Ð±Ñ Ð¾Ð´ деÑева ÑендеÑинга и вÑзов меÑодов
paint()
обÑекÑов ÑендеÑинга, коÑоÑÑе и вÑполнÑÑÑ Ð²Ñвод гÑаÑиÑеÑкого пÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¾Ð±ÑекÑов на ÑкÑан.ÐизÑализаÑиÑ, или оÑÑиÑовка, Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð³Ð»Ð¾Ð±Ð°Ð»Ñной или инкÑеменÑной (Ñак же вÑполнÑеÑÑÑ Ð¸ ÑоÑмиÑование макеÑа ÑÑÑаниÑÑ).
- ÐлобалÑÐ½Ð°Ñ Ð¾ÑÑиÑовка ознаÑÐ°ÐµÑ Ð¿Ð¾Ð²ÑоÑнÑй вÑвод вÑего деÑева ÑендеÑинга.
- ÐнкÑеменÑÐ½Ð°Ñ Ð¾ÑÑиÑовка вÑполнÑеÑÑÑ Ð² ÑиÑÑаÑии, когда менÑÑÑÑÑ Ð»Ð¸ÑÑ Ð½ÐµÐºÐ¾ÑоÑÑе из обÑекÑов ÑендеÑинга, пÑиÑÑм Ñак, ÑÑо ÑÑо не влиÑÐµÑ Ð½Ð° вÑÑ Ð´ÐµÑево. ÐодÑиÑÑема ÑендеÑинга Ð´ÐµÐ»Ð°ÐµÑ Ð½ÐµÐ´ÐµÐ¹ÑÑвиÑелÑнÑми пÑÑмоÑголÑнÑе облаÑÑи на ÑкÑане. ÐÑо пÑÐ¸Ð²Ð¾Ð´Ð¸Ñ Ðº ÑомÑ, ÑÑо опеÑаÑÐ¸Ð¾Ð½Ð½Ð°Ñ ÑиÑÑема воÑпÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð¸Ñ
как ÑÑаÑÑки, ÑодеÑжимое коÑоÑÑÑ
нÑжно обновиÑÑ Ð¸ ÑгенеÑиÑоваÑÑ Ð´Ð»Ñ Ð½Ð¸Ñ
ÑобÑÑие
paint
. ÐпеÑаÑÐ¸Ð¾Ð½Ð½Ð°Ñ ÑиÑÑема вÑполнÑÐµÑ Ð¿ÐµÑеÑиÑÐ¾Ð²ÐºÑ Ð¾Ð±Ð»Ð°ÑÑей инÑеллекÑÑалÑно, обÑединÑÑ Ð½ÐµÑколÑко облаÑÑей в однÑ.
Ð Ñелом, важно понимаÑÑ, ÑÑо визÑализаÑÐ¸Ñ â ÑÑо поÑÑапнÑй пÑоÑеÑÑ. ÐÐ»Ñ ÑлÑÑÑÐµÐ½Ð¸Ñ Ð²Ð¾ÑпÑиÑÑÐ¸Ñ ÑÑÑаниÑÑ Ð¿Ð¾Ð»ÑзоваÑелÑми движок ÑендеÑинга ÑÑÑемиÑÑÑ Ðº ÑомÑ, ÑÑÐ¾Ð±Ñ Ð²ÑвеÑÑи ÑÑÑаниÑÑ Ð½Ð° ÑкÑан как можно ÑкоÑее. Ðн не бÑÐ´ÐµÑ Ð¶Ð´Ð°ÑÑ Ð´Ð¾ ÑÐµÑ Ð¿Ð¾Ñ, пока бÑÐ´ÐµÑ ÑазобÑан веÑÑ HTML, Ð´Ð»Ñ Ñого, ÑÑÐ¾Ð±Ñ Ð¿ÑиÑÑÑпиÑÑ Ðº ÑоÑмиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð´ÐµÑева ÑендеÑинга и к ÑаÑÑÑÑÑ Ð¿Ð°ÑамеÑÑов макеÑа ÑÑÑаниÑÑ. Ð ÑезÑлÑÑаÑе некоÑоÑÑе ÑаÑÑи ÑÑÑаниÑÑ Ð¾ÐºÐ°Ð¶ÑÑÑÑ Ð¾Ð±ÑабоÑаннÑми и вÑведеннÑми на ÑкÑан, в Ñо вÑÐµÐ¼Ñ ÐºÐ°Ðº движок ÑендеÑинга пÑÐ¾Ð´Ð¾Ð»Ð¶Ð¸Ñ ÑабоÑÑ Ñ Ð¾ÑÑавÑимÑÑ ÑодеÑжимÑм ÑÑÑаниÑÑ, коÑоÑое поÑÑÑÐ¿Ð°ÐµÑ Ð¸Ð· ÑеÑи.
ÐоÑÑдок обÑабоÑки JS-ÑкÑипÑов и CSS-Ñайлов
Ð Ð°Ð·Ð±Ð¾Ñ Ð¸ вÑполнение ÑкÑипÑа оÑÑÑеÑÑвлÑеÑÑÑ ÑÑÐ°Ð·Ñ Ð¶Ðµ поÑле Ñого, как ÑиÑÑема обÑабоÑки кода ÑÑÑаниÑÑ Ð´Ð¾ÑÑÐ¸Ð³Ð½ÐµÑ Ñега
<script>
. ÐбÑабоÑка докÑменÑа пÑиоÑÑанавливаеÑÑÑ Ð´Ð¾ ÑеÑ
поÑ, пока ÑкÑÐ¸Ð¿Ñ Ð½Ðµ бÑÐ´ÐµÑ Ð²Ñполнен. ÐÑо ознаÑаеÑ, ÑÑо даннÑй пÑоÑеÑÑ Ð²ÑполнÑеÑÑÑ ÑинÑ
Ñонно.ÐÑли ÑкÑÐ¸Ð¿Ñ Ð¿Ð¾Ð»ÑÑаÑÑ Ð¸Ð· внеÑнего иÑÑоÑника, Ñо ÑнаÑала он должен бÑÑÑ Ð·Ð°Ð³ÑÑжен ÑеÑез ÑеÑÑ (Ñоже ÑÐ¸Ð½Ñ Ñонно). ÐбÑабоÑка ÑÑÑаниÑÑ Ð¿ÑиоÑÑанавливаеÑÑÑ Ð´Ð¾ ÑÐµÑ Ð¿Ð¾Ñ, пока загÑÑзка ÑкÑипÑа не бÑÐ´ÐµÑ Ð·Ð°Ð²ÐµÑÑена.
HTML5 позволÑÐµÑ ÑказÑваÑÑ Ð½Ð° возможноÑÑÑ Ð°ÑÐ¸Ð½Ñ Ñонной загÑÑзки и обÑабоÑки ÑкÑипÑа Ñ Ð¸ÑполÑзованием оÑделÑного поÑока.
ÐпÑимизаÑÐ¸Ñ Ð¿ÑоизводиÑелÑноÑÑи ÑендеÑинга
ÐÑли Ð²Ñ Ñ Ð¾ÑиÑе опÑимизиÑоваÑÑ ÑÐ²Ð¾Ñ Ð¿Ñиложение Ñ ÑÑÑÑом оÑобенноÑÑей ÑендеÑинга ÑÑÑаниÑ, ÑÑÑеÑÑвÑÐµÑ Ð¿ÑÑÑ Ð¾ÑновнÑÑ Ð¾Ð±Ð»Ð°ÑÑей, коÑоÑÑе Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе конÑÑолиÑоваÑÑ, и на коÑоÑÑе нÑжно обÑаÑиÑÑ Ð²Ð½Ð¸Ð¼Ð°Ð½Ð¸Ðµ.
- JavaScript. РпÑедÑдÑÑиÑ
маÑеÑиалаÑ
ÑÑой ÑеÑии Ð¼Ñ ÑаÑÑказÑвали о Ñом, как пиÑаÑÑ Ð¾Ð¿ÑимизиÑованнÑй JS-код, не блокиÑÑÑÑий полÑзоваÑелÑÑкий инÑеÑÑейÑ, ÑÑÑекÑивно иÑполÑзÑÑÑий памÑÑÑ Ð¸ ÑеализÑÑÑий дÑÑгие полезнÑе ÑеÑ
ники. Ðогда ÑеÑÑ Ð¸Ð´ÑÑ Ð¾ ÑендеÑинге, нам нÑжно ÑÑиÑÑваÑÑ Ñо, как JS-код бÑÐ´ÐµÑ Ð²Ð·Ð°Ð¸Ð¼Ð¾Ð´ÐµÐ¹ÑÑвоваÑÑ Ñ ÑлеменÑами DOM на ÑÑÑаниÑе. JavaScript Ð¼Ð¾Ð¶ÐµÑ Ð²Ð½Ð¾ÑиÑÑ Ð¼Ð½Ð¾Ð¶ÐµÑÑво изменений в полÑзоваÑелÑÑкий инÑеÑÑейÑ, оÑобенно еÑли ÑеÑÑ Ð¸Ð´ÑÑ Ð¾Ð± одноÑÑÑаниÑнÑÑ
пÑиложениÑÑ
.
- ÐÑÑиÑление ÑÑилей. ÐÑо â пÑоÑеÑÑ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ñого, какое CSS-пÑавило пÑименÑеÑÑÑ Ðº конкÑеÑÐ½Ð¾Ð¼Ñ ÑлеменÑÑ Ñ ÑÑÑÑом ÑооÑвеÑÑÑвÑÑÑиÑ
ÑÑÐ¾Ð¼Ñ ÑлеменÑÑ ÑелекÑоÑов. ÐоÑле опÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¿Ñавил оÑÑÑеÑÑвлÑеÑÑÑ Ð¸Ñ
пÑименение и вÑÑиÑление иÑогового ÑÑÐ¸Ð»Ñ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ ÑлеменÑа.
- ФоÑмиÑование макеÑа ÑÑÑаниÑÑ. ÐоÑле Ñого, как бÑаÑÐ·ÐµÑ ÑÐ·Ð½Ð°ÐµÑ Ð¾ Ñом, какие ÑÑили пÑименÑÑÑÑÑ Ðº ÑлеменÑÑ, он Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑиÑÑÑпиÑÑ Ðº вÑÑиÑÐ»ÐµÐ½Ð¸Ñ Ñого, как много меÑÑа на ÑкÑане займÑÑ ÑÑÐ¾Ñ ÑлеменÑ, и к наÑ
Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ ÐµÐ³Ð¾ позиÑии. ÐÐ¾Ð´ÐµÐ»Ñ Ð¼Ð°ÐºÐµÑа веб-ÑÑÑаниÑÑ ÑказÑÐ²Ð°ÐµÑ Ð½Ð° Ñо, ÑÑо одни ÑлеменÑÑ Ð¼Ð¾Ð³ÑÑ Ð²Ð»Ð¸ÑÑÑ Ð½Ð° дÑÑгие ÑлеменÑÑ. ÐапÑимеÑ, ÑиÑина ÑлеменÑа
<body>
Ð¼Ð¾Ð¶ÐµÑ Ð²Ð»Ð¸ÑÑÑ Ð½Ð° ÑиÑÐ¸Ð½Ñ Ð´Ð¾ÑеÑÐ½Ð¸Ñ ÑлеменÑов, и Ñак далее. ÐÑÑ ÑÑо ознаÑаеÑ, ÑÑо пÑоÑеÑÑ ÑоÑмиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¼Ð°ÐºÐµÑа â ÑÑо задаÑа, ÑÑебÑÑÑÐ°Ñ Ð¸Ð½ÑенÑивнÑÑ Ð²ÑÑиÑлений. ÐÑоме Ñого, вÑвод ÑлеменÑов вÑполнÑеÑÑÑ Ð½Ð° множеÑÑво ÑлоÑв.
- ÐÑÑиÑовка. Ðменно здеÑÑ Ð²ÑполнÑеÑÑÑ Ð¿ÑеобÑазование вÑего, ÑÑо бÑло вÑÑиÑлено Ñанее, в пикÑели, вÑводимÑе на ÑкÑан. ÐÑÐ¾Ñ Ð¿ÑоÑеÑÑ Ð²ÐºÐ»ÑÑÐ°ÐµÑ Ð² ÑÐµÐ±Ñ Ð²Ñвод ÑекÑÑа, ÑвеÑов, изобÑажений, гÑаниÑ, Ñеней, и Ñак далее. РеÑÑ Ð¸Ð´ÑÑ Ð¾ каждой видимой ÑаÑÑи каждого ÑлеменÑа.
- Ðомпоновка. Так как ÑаÑÑи ÑÑÑаниÑÑ Ð²Ð¿Ð¾Ð»Ð½Ðµ могÑÑ Ð±ÑÑÑ Ð²ÑÐ²ÐµÐ´ÐµÐ½Ñ Ð½Ð° ÑазлиÑнÑÑ
ÑлоÑÑ
, иÑ
ÑÑебÑеÑÑÑ ÑовмеÑÑиÑÑ Ð² едином окне в нÑжном поÑÑдке, ÑÑо пÑиведÑÑ Ðº пÑавилÑÐ½Ð¾Ð¼Ñ Ð²ÑÐ²Ð¾Ð´Ñ ÑÑÑаниÑÑ. ÐÑо оÑÐµÐ½Ñ Ð²Ð°Ð¶Ð½Ð¾, оÑобенно â Ð´Ð»Ñ Ð¿ÐµÑекÑÑваÑÑиÑ
ÑÑ ÑлеменÑов.
ÐпÑимизаÑÐ¸Ñ JS-кода
JavaScript-код ÑаÑÑо пÑÐ¸Ð²Ð¾Ð´Ð¸Ñ Ðº Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñого, ÑÑо можно наблÑдаÑÑ Ð² бÑаÑзеÑе. ÐÑобенно ÑÑо акÑÑалÑно Ð´Ð»Ñ Ð¾Ð´Ð½Ð¾ÑÑÑаниÑнÑÑ Ð¿Ñиложений. ÐÐ¾Ñ Ð½ÐµÑколÑко ÑовеÑов, каÑаÑÑÐ¸Ñ ÑÑ Ð¾Ð¿ÑимизаÑии JS Ð´Ð»Ñ ÑлÑÑÑÐµÐ½Ð¸Ñ Ð¿ÑоÑеÑÑа ÑендеÑинга ÑÑÑаниÑ.
- ÐзбегайÑе иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÑÑнкÑий
setTimeout()
иsetInterval()
Ð´Ð»Ñ Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð²Ð½ÐµÑнего вида ÑлеменÑов ÑÑÑаниÑ. ÐÑи ÑÑнкÑии вÑзÑваÑÑ ÐºÐ¾Ð»Ð»Ð±Ñк в некоÑоÑÑй Ð¼Ð¾Ð¼ÐµÐ½Ñ ÑоÑмиÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÐºÐ°Ð´Ñа, возможно, в Ñамом конÑе. Ðам же нÑжно вÑзваÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ, пÑиводÑÑÑÑ Ðº визÑалÑнÑм изменениÑм, в наÑале кадÑа, и не пÑопÑÑÑиÑÑ ÐµÐ³Ð¾.
- ÐеÑеноÑиÑе длиÑелÑнÑе вÑÑиÑÐ»ÐµÐ½Ð¸Ñ Ð² веб-воÑкеÑÑ.
- ÐÑполÑзÑйÑе Ð´Ð»Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹ в DOM микÑо-задаÑи, ÑазбиÑÑе на неÑколÑко кадÑов. ÐÑим ÑледÑÐµÑ Ð¿Ð¾Ð»ÑзоваÑÑÑÑ Ñогда, когда задаÑа нÑждаеÑÑÑ Ð² доÑÑÑпе к DOM, а доÑÑÑп к DOM, из веб-воÑкеÑа, напÑимеÑ, полÑÑиÑÑ Ð½ÐµÐ»ÑзÑ. ÐÑо ознаÑаеÑ, ÑÑо болÑÑÑÑ Ð·Ð°Ð´Ð°ÑÑ Ð½Ñжно ÑазбиÑÑ Ð½Ð° более мелкие и вÑполнÑÑÑ Ð¸Ñ
внÑÑÑи
requestAnimationFrame
,setTimeout
, илиsetInterval
, в завиÑимоÑÑи Ð¾Ñ Ð¾ÑобенноÑÑей задаÑи.
ÐпÑимизаÑÐ¸Ñ CSS
ÐодиÑикаÑÐ¸Ñ DOM пÑÑÑм Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¸ ÑÐ´Ð°Ð»ÐµÐ½Ð¸Ñ ÑлеменÑов, Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð°ÑÑибÑÑов и дÑÑÐ³Ð¸Ñ Ð¿Ð¾Ð´Ð¾Ð±Ð½ÑÑ Ð´ÐµÐ¹ÑÑвий пÑиведÑÑ Ðº ÑомÑ, ÑÑо бÑаÑзеÑÑ Ð¿ÑидÑÑÑÑ Ð¿ÐµÑеÑÑиÑаÑÑ ÑÑили ÑлеменÑов, и, во Ð¼Ð½Ð¾Ð³Ð¸Ñ ÑлÑÑаÑÑ , Ð¼Ð°ÐºÐµÑ Ð²Ñей ÑÑÑаниÑÑ, или, по кÑайней меÑе, некоÑоÑой ÐµÑ ÑаÑÑи. ÐÐ»Ñ Ð¾Ð¿ÑимизаÑии пÑоÑеÑÑа ÑендеÑинга ÑÑÑаниÑÑ ÑÑиÑÑвайÑе ÑледÑÑÑее.
- УменÑÑиÑе ÑложноÑÑÑ ÑелекÑоÑов. ÐÑполÑзование ÑложнÑÑ
ÑелекÑоÑов Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑивеÑÑи к ÑомÑ, ÑÑо ÑабоÑа Ñ Ð½Ð¸Ð¼Ð¸ займÑÑ Ð±Ð¾Ð»ÐµÐµ 50% вÑемени, необÑ
одимого Ð´Ð»Ñ Ð²ÑÑиÑÐ»ÐµÐ½Ð¸Ñ ÑÑилей ÑлеменÑа, оÑÑалÑное вÑÐµÐ¼Ñ ÑйдÑÑ Ð½Ð° конÑÑÑÑиÑование Ñамого ÑÑилÑ.
- УменÑÑиÑе ÑиÑло ÑлеменÑов, Ð´Ð»Ñ ÐºÐ¾ÑоÑÑÑ
нÑжно вÑполнÑÑÑ Ð²ÑÑиÑление ÑÑилей. То еÑÑÑ, лÑÑÑе, еÑли изменение ÑÑÐ¸Ð»Ñ Ð±ÑÐ´ÐµÑ Ð½Ð°Ð¿Ñавлено на неÑколÑко ÑлеменÑов, а не на вÑÑ ÑÑÑаниÑÑ.
ÐпÑимизаÑÐ¸Ñ Ð¼Ð°ÐºÐµÑа
ÐеÑеÑÑÑÑ Ð¼Ð°ÐºÐµÑа ÑÑÑаниÑÑ Ð¼Ð¾Ð¶ÐµÑ ÑÑебоваÑÑ ÑеÑÑÑзнÑÑ ÑиÑÑемнÑÑ ÑеÑÑÑÑов. ÐÐ»Ñ Ð¾Ð¿ÑимизаÑии ÑÑого пÑоÑеÑÑа пÑимиÑе во внимание ÑледÑÑÑее.
- УменÑÑиÑе ÑиÑло ÑиÑÑаÑий, пÑиводÑÑиÑ
к пеÑеÑÑÑÑÑ Ð¼Ð°ÐºÐµÑа. Ðогда Ð²Ñ Ð¼ÐµÐ½ÑеÑе ÑÑили, бÑаÑÐ·ÐµÑ Ð²ÑÑÑнÑеÑ, ÑÑебÑеÑÑÑ Ð»Ð¸ пеÑеÑÑÑÑ Ð¼Ð°ÐºÐµÑа Ð´Ð»Ñ Ð¾ÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ ÑÑиÑ
изменений. ÐÐ·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÑвойÑÑв, ÑакиÑ
, как ÑиÑина, вÑÑоÑа, или позиÑÐ¸Ñ ÑлеменÑа (в Ñелом, ÑеÑÑ Ð¸Ð´ÑÑ Ð¾ геомеÑÑиÑеÑкиÑ
Ñ
аÑакÑеÑиÑÑикаÑ
ÑлеменÑов), ÑÑебÑÑÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¼Ð°ÐºÐµÑа. ÐоÑÑомÑ, без кÑайней необÑ
одимоÑÑи, не менÑйÑе подобнÑе ÑвойÑÑва.
- ÐÑегда, когда ÑÑо возможно, иÑполÑзÑйÑе Ð¼Ð¾Ð´ÐµÐ»Ñ flexbox вмеÑÑо более ÑÑаÑÑÑ
моделей ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¼Ð°ÐºÐµÑов. ÐÑа Ð¼Ð¾Ð´ÐµÐ»Ñ ÑабоÑÐ°ÐµÑ Ð±ÑÑÑÑее, Ñем дÑÑгие, ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð´Ð°ÑÑ Ð·Ð½Ð°ÑиÑелÑнÑй пÑиÑоÑÑ Ð¿ÑоизводиÑелÑноÑÑи.
- ÐзбегайÑе модели ÑабоÑÑ Ñ Ð´Ð¾ÐºÑменÑом, пÑедÑÑмаÑÑиваÑÑей пеÑиодиÑеÑкое изменение паÑамеÑÑов ÑлеменÑов и иÑ
поÑледÑÑÑее ÑÑиÑÑвание. Ð JavaScript доÑÑÑÐ¿Ð½Ñ Ð¿Ð°ÑамеÑÑÑ ÑлеменÑов DOM (вÑоде
offsetHeight
илиoffsetWidth
) из пÑедÑдÑÑего кадÑа. СÑиÑÑвание ÑÑÐ¸Ñ Ð¿Ð°ÑамеÑÑов пÑоблем не вÑзÑваеÑ. Ðднако, еÑли вÑ, до ÑÑÐµÐ½Ð¸Ñ Ð¿Ð¾Ð´Ð¾Ð±Ð½ÑÑ Ð¿Ð°ÑамеÑÑов, менÑеÑе ÑÑÐ¸Ð»Ñ ÑлеменÑа (напÑимеÑ, динамиÑеÑки добавлÑÑ Ðº Ð½ÐµÐ¼Ñ ÐºÐ°ÐºÐ¾Ð¹-Ñо CSS-клаÑÑ), бÑаÑзеÑÑ Ð¿Ð¾ÑÑебÑеÑÑÑ Ð¿Ð¾ÑÑаÑиÑÑ Ð½ÐµÐ¼Ð°Ð»Ð¾ ÑеÑÑÑÑов Ð´Ð»Ñ Ñого, ÑÑÐ¾Ð±Ñ Ð¿ÑимениÑÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÑÑилÑ, ÑоздаÑÑ Ð¼Ð°ÐºÐµÑ Ð¸ возвÑаÑиÑÑ Ð² пÑогÑÐ°Ð¼Ð¼Ñ Ð½ÑжнÑе даннÑе. ÐÑо Ð¼Ð¾Ð¶ÐµÑ Ð·Ð°Ð¼ÐµÐ´Ð»Ð¸ÑÑ Ð¿ÑогÑаммÑ, подобного ÑÑÐ¾Ð¸Ñ Ð¸Ð·Ð±ÐµÐ³Ð°ÑÑ Ð²Ñегда, когда ÑÑо возможно.
ÐпÑимизаÑÐ¸Ñ Ð¾ÑÑиÑовки
ЧаÑÑо ÑÑа задаÑа оÑÐ½Ð¸Ð¼Ð°ÐµÑ Ð±Ð¾Ð»ÑÑе вÑего вÑемени, поÑÑÐ¾Ð¼Ñ Ð²Ð°Ð¶Ð½Ð¾ избегаÑÑ ÑиÑÑаÑий, пÑиводÑÑÐ¸Ñ Ðº пеÑеÑиÑовке ÑÑÑаниÑÑ. ÐÐ¾Ñ ÑÑо здеÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ ÑделаÑÑ.
- Ðзменение лÑбого ÑвойÑÑва, за иÑклÑÑений ÑÑанÑÑоÑмаÑий и изменений пÑозÑаÑноÑÑи, пÑÐ¸Ð²Ð¾Ð´Ð¸Ñ Ðº пеÑеÑиÑовке. ÐÑполÑзÑйÑе ÑÑи возможноÑÑи ÑмеÑенно.
- ÐÑли ваÑи дейÑÑÐ²Ð¸Ñ Ð²Ñзвали пеÑеÑÑÑÑ Ð¼Ð°ÐºÐµÑа, ÑÑо пÑÐ¸Ð²Ð¾Ð´Ð¸Ñ Ð¸ к вÑÐ·Ð¾Ð²Ñ Ð¿ÐµÑеÑиÑовки ÑÑÑаниÑÑ, Ñак как Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð³ÐµÐ¾Ð¼ÐµÑÑиÑеÑкиÑ
паÑамеÑÑов ÑлеменÑа ведÑÑ Ð¸ к его визÑалÑнÑм изменениÑм.
- УменÑÑайÑе облаÑÑи ÑÑÑаниÑ, коÑоÑÑе необÑ
одимо пеÑеÑиÑовÑваÑÑ, гÑамоÑно ÑпÑавлÑÑ ÑаÑположением ÑлоÑв и анимаÑией.
ÐÑоги
Ð ÑÑом маÑеÑиале Ð¼Ñ Ð¿Ð¾Ð³Ð¾Ð²Ð¾Ñили о подÑиÑÑÐµÐ¼Ð°Ñ ÑендеÑинга ÑовÑеменнÑÑ Ð±ÑаÑзеÑов. ÐÑавилÑнÑй Ð¿Ð¾Ð´Ñ Ð¾Ð´ к визÑализаÑии ÑÑÑÐ°Ð½Ð¸Ñ Ð²ÐµÐ´ÑÑ Ðº повÑÑÐµÐ½Ð¸Ñ Ð¿ÑоизводиÑелÑноÑÑи веб-пÑиложений и к ÑлÑÑÑÐµÐ½Ð¸Ñ Ð²Ð¿ÐµÑаÑлений полÑзоваÑелей Ð¾Ñ ÑабоÑÑ Ñ Ð½Ð¸Ð¼Ð¸.
ÐÑедÑдÑÑие ÑаÑÑи Ñикла ÑÑаÑей:
ЧаÑÑÑ 1: Ðак ÑабоÑÐ°ÐµÑ JS: Ð¾Ð±Ð·Ð¾Ñ Ð´Ð²Ð¸Ð¶ÐºÐ°, Ð¼ÐµÑ Ð°Ð½Ð¸Ð·Ð¼Ð¾Ð² вÑемени вÑполнениÑ, ÑÑека вÑзовов
ЧаÑÑÑ 2: Ðак ÑабоÑÐ°ÐµÑ JS: о внÑÑÑеннем ÑÑÑÑойÑÑве V8 и опÑимизаÑии кода
ЧаÑÑÑ 3: Ðак ÑабоÑÐ°ÐµÑ JS: ÑпÑавление памÑÑÑÑ, ÑеÑÑÑе вида ÑÑеÑек памÑÑи и боÑÑба Ñ Ð½Ð¸Ð¼Ð¸
ЧаÑÑÑ 4: Ðак ÑабоÑÐ°ÐµÑ JS: Ñикл ÑобÑÑий, аÑÐ¸Ð½Ñ ÑонноÑÑÑ Ð¸ пÑÑÑ ÑпоÑобов ÑлÑÑÑÐµÐ½Ð¸Ñ ÐºÐ¾Ð´Ð° Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ async / await
ЧаÑÑÑ 5: Ðак ÑабоÑÐ°ÐµÑ JS: WebSocket и HTTP/2+SSE. ЧÑо вÑбÑаÑÑ?
ЧаÑÑÑ 6: Ðак ÑабоÑÐ°ÐµÑ JS: оÑобенноÑÑи и ÑÑеÑа пÑÐ¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ WebAssembly
ЧаÑÑÑ 7: Ðак ÑабоÑÐ°ÐµÑ JS: веб-воÑкеÑÑ Ð¸ пÑÑÑ ÑÑенаÑиев Ð¸Ñ Ð¸ÑполÑзованиÑ
ЧаÑÑÑ 8: Ðак ÑабоÑÐ°ÐµÑ JS: ÑеÑвиÑ-воÑкеÑÑ
ЧаÑÑÑ 9: Ðак ÑабоÑÐ°ÐµÑ JS: веб push-ÑведомлениÑ
ЧаÑÑÑ 10: Ðак ÑабоÑÐ°ÐµÑ JS: оÑÑлеживание изменений в DOM Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ MutationObserver
УважаемÑе ÑиÑаÑели! Ðакие пÑиÑÐ¼Ñ Ð²Ñ Ð¿ÑименÑеÑе Ð´Ð»Ñ Ð¾Ð¿ÑимизаÑии ÑендеÑинга ÑÑÑÐ°Ð½Ð¸Ñ Ð²Ð°ÑÐ¸Ñ Ð²ÐµÐ±-пÑоекÑов?