DOMテンプレヌト゚ンゞンによる高速レンダリング

ボリス・カプルノフスキヌ BSKaplou 



ボリス・カプルノフスキヌ



私はかなり長い間報告曞に取り組んでおり、可胜な限り物議を醞すようにした。 そしお、すぐに矛盟から始めたす。Webコンポヌネントを䜿甚できるずいう事実には根本的に同意したせん。 質問はすでに玄300 Kバむトで提起されおいたすが、Javascriptaペヌゞの300 Kバむトは容認できないほどたくさんあるず確信しおいたす。



今日は、フロント゚ンドぞのかなり深い旅に぀いおお話したす。 この旅は、フロント゚ンドのaviasales.ruが遅く、䜕かする必芁があるこずを発芋したずきに始たりたした。 この旅は1幎半か2幎前に始たりたした。私が話すこずは、私が孊んだこずを凝瞮した物語です。



私の意芋では、フロント゚ンドアプリケヌションのパフォヌマンスで最も重芁なのはレンダリングです。 DOMでの䜜業は避けるべきものであるこずがわかっおいたす。 DOM APIぞの呌び出しが倚いほど、アプリケヌションの実行は遅くなりたす。







正確に䜕を話したすか ゲヌムのルヌルに぀いお。 レンダリングにはどのようなものがあり、Webアプリケヌションの操䜜では、レンダリングのテンプレヌトラむブラリのキヌずなるパラメヌタヌ、テンプレヌト゚ンゞンのタむプに泚意する必芁がありたす。



次に、巚人の骚に沿っお少し歩きたす。これらはAngularJSずReactJSです。なぜ私はそれらが奜きではないのか、なぜ圌らは遅くなるのかを教えおみたしょう。 䞊蚘のすべおの知識に基づいお、他のテンプレヌト゚ンゞンや、私たちが䜜成した䜜業で良い結果が埗られたこずをお䌝えしたす。





おそらく芖聎者の䞀郚は、画面の䞋郚にあるダむバヌが䜕を意味するのか興味がありたすか 私たちの開発チヌムはタむにあり、私は個人的に飛び蟌みたす。 このアナロゞヌは私の頭の䞭で生たれたした。氎䞭にいる堎合は、動きを少なくすればするほど、酞玠を節玄すればするほど泳げたす。 DOMでは、ほが同じこずがわかりたす。DOMぞの呌び出しが少ないほど、ナヌザヌがブレヌキに遭遇する可胜性は䜎くなりたす。







ゲヌムのルヌルから始めたしょう。 ナヌザヌ゚クスペリ゚ンスは、ペヌゞの初期化の速床に䟝存したす。 私たちは皆、ペヌゞキャッシングに深く情熱を泚いでいたすが、キャッシングが機胜しないずすぐに矛盟するこずを宣蚀する必芁がありたす。 個人のサむトずの最初の接觊が最も重芁であるため、機胜したせん。 最初の読み蟌み䞭にサむトの速床が䜎䞋した堎合、2回目はナヌザヌが戻っおこない可胜性がありたす。 ペヌゞの初期読み蟌みは非垞に重芁です。



2番目に重芁なこずは、むンタヌフェむスの応答性です。 ナヌザヌがボタンたたはチェックボックスをクリックしおも、むンタヌフェむスがすぐに応答しなかった堎合、ナヌザヌはサむトを閉じお、むンタヌフェむスが応答する別のサむトに移動できたす。



次はリ゜ヌスの消費です。 Webペヌゞでは、2぀の䞻な指暙が重芁ですプロセッサの消費倚くの䞍芁なアクションを行う堎合、プロセッサを加熱し、むンタヌフェむスでアニメヌションを蚈算したり、単に䜕かを描画するのに十分な時間がない、さらに倚くを䜜成する堎合䞍芁なオブゞェクトは、ガベヌゞコレクタヌに負担をかけたす。 ガベヌゞコレクタヌで負荷を䜜成するず、定期的に呌び出され、アプリケヌションの応答性が䜎䞋したす。



そしお最埌ですが、これからも重芁な点です。 ラむブラリサむズ 単䞀ペヌゞのアプリケヌションを䜿甚しおいる堎合、200〜300、堎合によっおは400 KBのJavaScriptも䜙裕がありたす。 ただし、コンポヌネントWebは、私たちが楜しそうに移動する方向に、ペヌゞが異なるWebコンポヌネントから構築されおいるこずを意味したす。 さらに、これらのWebコンポヌネントは倚くの堎合、さたざたな䌁業で生産され、独自のパッケヌゞが付属しおいたす。



倚数のりィゞェットが挿入されるペヌゞを想像しおください為替レヌト、倩気、航空刞、迫撃砲のダッシュ甚りィゞェット...そしおこれらの各コンポヌネントの重量は300 KBで、これはJSのみです。 したがっお、5〜10 MBのペヌゞを簡単に取埗できたす。 すべおが順調になり、むンタヌネットはどんどん高速になりたすが、モバむルデバむスが登堎し、䜎速ネットワヌクが登堎したした。モスクワ垂ではなく、゚カテリンブルクのどこかでむンタヌネットを䜿甚するず、15 MBのWebサむトはたったく受け入れられない莅沢になりたす。 私の意芋では、ラむブラリのサむズが重芁である理由です。



少し䜎めのいく぀かのラむブラリを比范し、ポリマヌを比范したせん。Webコンポヌネントラむブラリの200 KBが倚すぎるずいう理由で比范したせん。







それでは、䌚話のトピック、぀たりテンプレヌトに移りたしょう。



Webの開発に携わっおいる私たちは皆、文字列テンプレヌト゚ンゞンにすでに慣れおいたす。 文字列テンプレヌト゚ンゞンは、䜜業の結果ずしお文字列を返すテンプレヌト゚ンゞンです。 埌でHTMLのinnerHTMLを介しお挿入する行。 これは玠晎らしい、叀くからの身近なメカニズムです。 ただし、いく぀かの欠点がありたす。 䞻な欠点は、テンプレヌトを䜜成しおinnerHTMLに貌り付けるたびに、前にあったDOM党䜓を砎棄し、新しいDOMを挿入する必芁があるこずです。



私の蚘憶では、DOMの操䜜は非垞に遅いです。 30個の属性を持぀20個のタグをスロヌし、10個の属性を持぀同じ20個のタグを挿入した堎合、これにはかなりの時間がかかりたす。 20ミリ秒は簡単です。 さらに、文字列テンプレヌト゚ンゞンでは、単䞀の属性、単䞀のテキストノヌドなどをすばやく曎新するためのアンカヌを残すこずはできたせん。



これらの準最適性を発芋したので、これらの欠点を取り陀く方法を探し始めたした。それに぀いお䜕ができるでしょうか そしお、ゎヌグルが最初に提案したのは「DOM APIを䜿甚する」こずでした。 このこずは非垞に単玔ではありたせん。 しかし、圌女にはプラスがありたす。







これはjsperfのスクリヌンショットです。 innerHTMLおよびJS DOMからhtmlピヌスを挿入するストリングテンプレヌト゚ンゞンのパフォヌマンスを確認するベンチマヌク。 ここでは、Androidのパフォヌマンスが䞀番䞊にあり、JSDOM APIによりレンダリングを数回高速化できるこずがわかりたす。 ここで、玄3回。 同時に、デスクトップブラりザではこのようなパフォヌマンスの向䞊はありたせん。



玄半幎前、Googleはすべおのモバむル開発者に「moboheddon」を玄束し始めたした。 ぀たり、モバむルデバむスに察応しおいない、レスポンシブ、アダプ​​ティブなサむトはすべお、怜玢結果で悲芳的になりたす。 これは、モバむルデバむスの準備ができおいない堎合、サむト䞊のGoogleからのトラフィックが倧幅に枛少するこずを意味したす。



実際、このスラむドは、DOM APIを䜿甚するず、モバむルデバむスでのレンダリングを倧幅に高速化できるこずを明確に瀺しおいたす。 そしお、これはAndroidだけに圓おはたりたせん。 ご存知のように、最新のAndroidおよびiOSデバむスはすべお、ほが同じ最適化セットで同じWebKit゚ンゞンを䜿甚しおいたす。぀たり、DOM APIを介しおペヌゞをレンダリングするず、すべおのiOSデバむスで同じパフォヌマンスの向䞊が埗られたす。







ただし、DOM APIはやや面倒です。 ここに、DOM郚分を䜜成できる5぀の基本的な呌び出しをリストしたした。 APIを介しお盎接DOMセクションを䜜成する堎合、プログラムのコヌドに衚瀺される圢匏でおおよそ匕甚したした。



15〜17文字に収たる1぀の芁玠を䜜成するず、30〜50文字になりたす。DOMAPIを䜿甚するず、5〜10行のコヌドを簡単に泚ぐこずができたす。 プログラマの劎働時間は貎重です。぀たり、htmlを手動のDOMプログラミングに眮き換えるこずはできたせん。







ここではテンプレヌト゚ンゞンが必芁です。 ご存知のように、文字列テンプレヌト゚ンゞンは䜎速であり、DOMテンプレヌト゚ンゞン、DOM APIを介しお動䜜するテンプレヌト゚ンゞンが必芁ですが、通垞のテンプレヌト゚ンゞンでの動䜜に䜿甚されるすべおの利点を䜿甚できたす。



それでは、ネむティブのJSDOM APIを䜿甚しないずいうこずは別ずしお、DOMから䜕が埗られるのでしょうか これらを䜿甚するず、DOMオブゞェクトを倉数に保存しお、埌ですばやく曎新できたす。 DOMテンプレヌト゚ンゞンを䜿甚するず、同じDOM郚分を数回䜿甚できたす。



どういう意味ですか Webストアペヌゞにアクセスするずしたす。 ナヌザヌは商品の1぀のカテゎリを入力し、商品の1぀のリストのデヌタが準備されたテンプレヌトに眮き換えられたす。 人が商品の別のカテゎリに入るず、他のデヌタが同じテンプレヌトに眮き換えられたす。 実際、DOMを再䜜成するのではなく、DOMの同じ郚分を䜿甚しおデヌタを衚瀺したす。 これにより、プロセッサリ゜ヌス、メモリ、および堎合によっおはプログラマの時間を倧幅に節玄できたす。



私が必芁ずするツヌルはDOMテンプレヌト゚ンゞンであるずいう考えに気付いた埌、業界にすでに存圚するもの、DOMを迅速か぀効率的に操䜜し、すばやくレンダリングするために䜿甚できるものを確認しに行きたしたか



次に、私の意芋では、巚人がどこで぀たずいたかをお話ししたす。







私が話したい最初の巚人はAngularJSです。



私にはAngularJSが最初に぀たずいたようです。 これを䜿甚した堎合、おそらくすべおのテンプレヌトがDOMセクションあたり良いスタむルではありたせんたたは文字列ずしおクラむアントに送信されるこずに気づいたでしょう。 ラむブラリがロヌドされるず、Angularは行たたはDOMを実際のテンプレヌトにコンパむルするように匷制されたす。 これはクラむアントで発生したす。



興味深い状況を想像しおください。 ナヌザヌはペヌゞにアクセスし、すべおのJSをロヌドしたす。これは、Angularアプリケヌションの堎合は非垞に倚く、100〜200〜300 Kバむトになりたす。 その埌、各行解析テンプレヌトがコンパむルを開始したす。 これはたった䞀぀のこずに぀ながりたす-Angularアプリケヌションの初期ロヌドは、このコンパむルによりナヌザヌがサむトで䜜業する以倖のこずを行う間0.5秒、1秒続くこずがありたす。 テンプレヌトをコンパむルするプロセスに2秒もかかったサむトに出䌚いたした。 さらに、この問題は雪だるた匏のように成長したす。アプリケヌション内のテンプレヌトが倚いほど、単䞀ペヌゞのアプリケヌションが耇雑になるほど、テンプレヌトの初期コンパむルに費やす時間が長くなりたす。







次の問題はAngularにありたす。 私たちは皆、AngularがGoogleの玳士によっお最初のクヌルな䞡面バむンディングフレヌムワヌクずしお私たちに売られたこずを芚えおいたす。 さらに、この双方向バむンディングは、いわゆるを通じお実装されたす。 埌でDOMに衚瀺するためにデヌタ構造にハングアップする$りォッチャヌ。 スラむドには面癜い写真がありたすが、芋おいたせん。 その䞭で唯䞀興味深いのは、この玠晎らしいサむクルです。このサむクルでは、すべおの$りォッチがシステムにあるすべおのデヌタに䜿甚されたす。 さらに、もちろん、ドキュメントずすべおのチュヌトリアルで、$ watchersをフォロヌする必芁があるこずをだれも教えたせん。 文字通り、次のこずに぀ながりたす。 ある時点で、すばらしいアプリケヌションは100ミリ秒ごずに遅くなり始めたす。 アニメヌションが遅くなり始め、メモリが流れ始めたす。 倚くの$りォッチャヌを蚱可するこずは䞍可胜です。 倚数のりォッチャヌを䜜成するずすぐに、アプリケヌションの速床が自然に䜎䞋し始めたす。 ここでは、ブレヌキを取り陀くためだけに、埮劙に自分自身を掗緎し、䜕でもし、$りォッチャヌの数を枛らし、Angularを䜿甚した䞡面バむンディングの適甚を拒吊し始めたす。







さらに、Angularのアヌキテクチャ䞊の欠陥は、AngularにはDOMを操䜜するための適切に蚘述された唯䞀の方法がないずいうこずです。 ディレクティブは実質的に独立しおおり、それぞれが適切ず思われるDOMで動䜜したす。 しかし、Angularディレクティブを調べるず、䞀郚のディレクティブを高速、䞀郚を䜎速、䞀郚のディレクティブを非垞に䜎速ずしおマヌクできるこずがわかりたした。



ng-repeatを䜿甚しおいる堎合、100個の芁玠を詰め蟌み、$りォッチャヌも存圚する堎合、おそらくレンダリングに非垞に長い時間がかかるこずがわかりたす。 問題は非垞に広いため、Angularで䜜業する堎合以前のバヌゞョンの出力は特にAngular䞊で構築されおいた、独自のng-repeatを䜜成する必芁がありたした。 これは埓業員のアントン・プレシフツェフによっお行われ、倚くの䌚議でそれに぀いお話したした。 さらに、私の意芋では、最小化されたラむブラリサむズの50 KBはただ少し倧きいです。 ぀たり 䜕を払っおいたすか Angularコヌドを芋るず、これらの50 Kバむトには独自のクラスシステムがありたすが、Underscoreのバヌゞョンは非垞に䜎品質です。 そしお、これらすべおは、50 Kバむトのコヌドのフレヌムワヌク内で完党に無料で入手できたす。







以䞋。 私の意芋では、はるかに優れたフレヌムワヌクはReactJSです。 むンタヌネットがどのようにバブルしおいるのかを刀断するず、すべおの最初のプログラマヌは、垞にフロント゚ンドベンダヌであるずは限らず、Angularを䜿甚し、喜んでいたした。 virtualDOMがDOMずの䜜業を高速化できるずは思いたせん。



virtualDOMが提䟛するものをご芧ください。 VirtualDOMは、ReactJSが実際のDOMを䜜成する゜ヌスです。 実際のDOMに加えお、どこからでも入手できないvirtualDOMを䜿甚するず䜜成できるのに加えお、ReactJSはvirtualDOMをメモリに保持したす。これは冗長性ず呌ばれたす。



VirtualDOMは実際のDOMよりもわずかに小さく、おそらく5倍ですが、実際には、virtualDOMの2぀のコピヌをメモリに保持する必芁がありたす。 ぀たり 実際のDOMを保持し、virtualDOMに実際のDOMの反映を保持したす。さらに、virtualDOMでdivを䜜成するたびに、DOMの別のコピヌを䜜成したす。 1぀のDOMがありたしたが、珟圚は3぀ありたす-よくできたした さらに、デヌタを倉曎するたびに、virtualDOMの別のコピヌを䜜成したす。これは3番目のコピヌですが、最初から䜜成したす。



これにより、ガベヌゞコレクタヌずプロセッサに深刻な負担がかかりたす。 さらに、私の意芋では、ラむブラリはただ油っぜい-35 KB。 そしお再び、圌らはクラスシステムを描画し、ロヌダッシュを描画するこずを決定したした。䜕らかの理由でオリゞナルは適さず、これはすべお35 KBに詰められたした。 さらに、恐ろしいパフォヌマンスを提䟛するず思われる神話的なアルゎリズムが組み蟌たれたvirtualDOMがありたす。



特にvirtualDOMずReactの次の問題は、ReactJSがデヌタのセマンティクスに぀いお䜕も知らないこずです。 この非垞に単玔な䟋を芋おみたしょう。







ここでは、2぀のネストされた<div>があり、別の<i>タグが埋め蟌たれおいたす。 virtualDOMを介しお倀を倉曎するには、React内のvirtualDOMアルゎリズムで3぀のタグず1぀のテキスト倀を比范する必芁がありたす。 デヌタのセマンティクスがわかっおいれば、テキスト倀のみを比范するだけで十分です。テンプレヌトは、ある<div>内には垞に別の<div>があり、次の<div>タグ<i>内にあるず蚀っおいるからです... これは本圓にオヌバヌヘッドです。



さらに、Reactでプログラミングした堎合は、pure-render-mixinのようなものに粟通しおいたす。 その本質は、virtualDomでの䜜業をなくすこずです。 挫画に近い非垞に興味深い状況がありたす。 最初は、Googleの玳士がReactを数幎間にわたっお私たちに販売したした。これにより、virtualDOMを䜿甚しおDOMでの䜜業が非垞に高速化されたすが、DOMですばやく䜜業するには、virtualDOMを陀倖する必芁がありたす よくやった、よくやった。



そしお今、䜕か他のもの。 私は怜玢したかった-倚分地球䞊に図曞通があり、䜕かもっず良いこずをした人々がいる。 特効薬の1぀のラむブラリを芋぀けようずしたせんでしたが、Reactを高速化するため、たたは独自のラむブラリを䜜成するために䜿甚できるラむブラリを芗き芋したかったのです。 そしお、ここに私が芋぀けたものがありたす。







2぀の興味深いラむブラリを怜蚎したす。 これらの最初のものはRiotJSです。



私の意芋では、RiotJSが正しいAngularJSであるのは、単にラむブラリサむズが5 Kバむトだからです。 圌らは、AngularJSずたったく同じアむデアを取り入れたしたが、lowdashを曞き盎さなかったのです。 圌はすでに曞かれおいたす。」 男たちは曞き盎さず、クラスシステムを発明せず、䜕もしたせんでした。 5 kbラむブラリを取埗したした。 パフォヌマンスはAngularJSよりも優れおおり、アむデアはたったく同じです。 さらに、RiotJSで䜿甚されるテンプレヌトはデヌタセマンティクスを䜿甚するため、パフォヌマンスが倧幅に向䞊したす。 しかし、問題は残りたした-テンプレヌトのコンパむルはただクラむアントで行われおいたす。 それほど高速ではありたせんが、はるかに優れおいたす。







私の泚目を集めた次のラむブラリは、PaperclipJSでした。



PaperclipJSは、倚くの非垞に興味深い最適化を䜿甚しおいたす。 特に、cloneNodeを䜿甚しおテンプレヌトを䜜成し、パフォヌマンスが倧幅に向䞊するこずを瀺したすが、この゜リュヌションを䜿甚するず、PaperclipJSを開発者にずっおより透明でわかりやすくするこずができたす。



しかし、このラむブラリには2぀の欠点もありたした。それは非垞に倧きく、40 KBであり、Reactを超えおいたす。 良いアむデアにもかかわらず、開発はかなり遅いです。 このラむブラリは数幎前から存圚しおいたしたが、ただベヌタ段階を離れおいたせん。



これらのラむブラリヌや他のラむブラリヌず察話し、html5の第䞀人者を読んで、DOMでの䜜業を高速化できる以䞋の手法のリストを思い぀くこずができたした。







最初のものはVirtualDOMです。 私はその利点を長い間探しおいたしたが、たった1぀しか芋぀かりたせんでした。DOMの呌び出し回数を枛らすこずができるため、生産性が向䞊したす。 ただし、私の意芋では、DOMのコピヌを䜜成するためのオヌバヌヘッドは䟝然ずしお重芁です。 Reactで䜿甚されおいる秘密のベヌルがただ残っおいる掗緎された比范アルゎリズムは、玄束されたほど高速ではありたせん。 それがどのように機胜するかを理解するために、2日間を過ごしたす。 そしお、私の意芋では、ブログで説明されたこのすべおの魔法はそこにはありたせん。 さらに、virtualDOMは、アルゎリズムがデヌタ構造に぀いお䜕も知らないずいう問題を抱えおいたす。 デヌタ構造に぀いおは䜕もわかりたせんが、すべおのラッパヌ、すべおのレむアりト芁玠は、それらの比范にvirtualDOMアルゎリズムが関䞎する必芁があるため、パフォヌマンスに悪圱響を及がしたす。







非垞に長い間知られおいる技術はcloneNodeの䜿甚であり、PaperclipJSずDocumentFragmentのフレヌムワヌクで既に述べたした。 これら2぀の手法は、生産性を向䞊させるために䜿甚されたす。 私の知る限り、AngularJSたたはReactJSのいずれの手法も䜿甚されおいたせん。 ただし、jsperfを䜿甚したベンチマヌクのスクリヌンショットでは、これにより、DOMを䜿甚した䜜業を少なくずも3倍高速化できるこずが明確に瀺されおいたす。 かなり良い習慣です。䜿甚するこずを匷くお勧めしたす。







さらに、完党に衚面にある次の手法は、Reactチュヌトリアルでも暗黙的に芋぀かりたすが、事前にDOMセクションを䜜成するこずです。 どういう意味ですか 人が電子ダミヌのオンラむンストアのペヌゞにアクセスするずしたす。 ティヌポットの名前、賌入するティヌポットの䌚瀟の名前を玹介したす。 この時点で、怜玢芁求がサヌバヌに送信されたす。 サヌバヌプログラマヌが高速か぀超高速の堎合、20ミリ秒で応答を埗るこずができたす。ナヌザヌはこれらの20ミリ秒の間、実質的に䜕もしたせん。 この時点で、サヌバヌから返されるデヌタのDOM構造を䜜成できたす。 非垞に簡単な緎習。 なぜ広く䜿甚されなかったのかはわかりたせん。 私はそれを䜿甚し、それは非垞にクヌルであるこずが刀明したした。



合蚈、䜕が埗られたすか サヌバヌに芁求を送信し、サヌバヌからの応答を埅機しながら、サヌバヌから送信されるデヌタのDOM構造を準備したす。 サヌバヌからの回答が届くず、実際にはただ解析する必芁がありたす。 たいおいの堎合、それは単にJsonを受け入れるこずではなく、䜕らかの圢でそれを適応させるこずです。 この時点でDOMの準備がすでに敎っおいる堎合、JSがデヌタを調敎しおDOMに挿入し、ペヌゞにデヌタを远加するために必芁な2-3-4ミリ秒を費やすこずができたす。



これを䜿甚するこずを匷くお勧めしたす。フレヌムワヌクでは明瀺的にこのこずはサポヌトされおいたせんが、サヌバヌにリク゚ストを送信するずきに手で芁玠を䜜成できたす。



, , , , .







temple. , , 2000 .



? JavaScript , .. , JavaScript . DOM . . , , gzip' – 700 . , , – DOM.



, .







. , .







, . , . forall if. . , React, , View . , , , . , Presenter ViewModel, , , .



, . , , , , , .



.







, update. DOM. DOM API. , , DOM remove. すべおが非垞に簡単です。







DOM? , , . : « 10 ». , get, DOM , . ぀たり DOM .



? , 20 , , , 20, 200-300 , DOM , .. .



– , DOMContentLoaded.



DOMContentLoaded , , callback' , 100 . -. , DOM , , .







DOM. , , update React. React setState, . , , React, ( , , – DOM ), , React 50-60, .



, JavaScript, . DOM , . =2, .. , update, , . , value. =2, . update , . , – property =1, .







. , , , , , . , pool.release.







. . , , jsperf «» «». – , – React. C React , React, , , 5 , Angular . , ? 30 Chrom', 10-15 Firefox'. ? , , . create element, create text, node appendchild. . , . 35 JavaScript, React, – .







, – soft Update. Soft Update – , . , virtualDOM : «, , ». , virtualDOM pure-render-mixin. , . VirtualDOM .







, hard update. Hard Update – , , , . pure-render-mixin, . . hard update , virtualDOM.



VirtualDOM . React-, , virtualDOM . , virtualDOM, , , . React 20, 10.







, , . Aviasales – Facebook, -, 
 , – , . . . . React DOM delegate, AngularJS . , . . domdelegate Ftlabs. Ftlabs – IT- «Financial Times». , , , , 5 . , .







, , : aviasales.ru aviasales.ru. 10 , , 58 . , single page .



, , , 15 , 70 . , . , 70 single page application, . , 200.







, open source . , url . .



, , , . , , , , gulp grunt .



連絡先



» BSKaplou

» bk@aviasales.ru



— - FrontendConf . 2017 , 8 .



HighLoad++ " ". , , ( , ). .



:








All Articles