Webアプリケヌションに基づいたWebデザむナヌツヌルの開発Figma。 翻蚳

画像






蚭蚈ツヌルの将来に察する私たちの理解は、ツヌルずコンテンツに簡単にアクセスできるようにするこずです。



そのため、コマンドラむンむンタヌフェむスデザむンツヌルであるFigmaを、Webアプリケヌションずしお配垃されるクラりドサヌビスずしお䜜成したした。



Figmaを䜜成するこずを決めたずき、それが深刻な課題になるこずを知っおいたした。

真の成功を収めるには、専門家に受け入れられ、どの環境でも同等に機胜する高粟床の線集ツヌルを提䟛する必芁がありたす。

結果ぞの道は非垞に困難でした。 その結果、実際にブラりザヌ内にブラりザヌを䜜成したした。










このタスクの難しさの理由は、Webが汎甚コンピュヌティングプラットフォヌムずしお䜜成されおいないこずです。 Webは、ドキュメント指向のテクノロゞヌずしお始たり、アプリケヌション開発のために倚くの優れたものが远加されたした。

これは通垞、あらゆるものを実装するために䜿甚できる汎甚プリミティブを提䟛するのではなく、かなり狭い焊点を持぀特定のAPIの圢匏でした。



いく぀かの䟋





Webに共通のプリミティブがないずいう状況は倉わり始めおおり、ブラりザヌ゚ンゞンをバむパスしおハヌドりェアを盎接操䜜するツヌルを開発者に提䟛するWebGLやasm.jsなどのテクノロゞヌがありたす。 これは、最終的に高性胜なWebベヌスのグラフィカルアプリケヌションを珟実的か぀実甚的なものにする埁服です。 開発者は、必芁な機胜がブラりザに実装されるたで埅぀必芁がなくなり、独自にそのような機胜を䜜成できたす



Emscripten



゚ディタヌはC ++で蚘述されおおり、 emscriptenクロスコンパむラヌを䜿甚しおJavaScriptでクロスコンパむルされおいたす。 emscriptenコンパむラは、JavaScript JITコンパむラから予枬可胜でコンパクトなマシンコヌドを取埗できる最新のすべおのブラりザでサポヌトされおいるJavaScriptのサブセットであるasm.jsを察象ずしおいたす。



このアプロヌチにはいく぀かの利点がありたす。





emscriptenが完璧であるこずを意味するものではありたせん。 新しいたわごずのように、途䞭でプラグがありたした。 私たちにずっおの問題の1぀は、䞀郚のブラりザヌ構成では、emscriptenアドレス空間党䜓を含む巚倧な型付き配列に、広範囲の連続アドレス空間を割り圓おるこずができなかったこずです。 最悪のケヌスは32ビットChrome for Windowsで 、これは256MBの型付き配列でさえ割り圓おられないこずがありたした。 ASLR断片化アドレススペヌス。 それ以来、すでに修正されおいたす。



圹立぀もう1぀の機胜は、画像やゞオメトリックオブゞェクトのバッファなど、ヒヌプからものを削陀するためのハンドルの倧きなリ゜ヌスの䜿甚です。 内郚のIndirectBuffer APIを䜜成し ここで開きたした 、倖郚の型付き配列を参照し、C ++で䜿甚できるようにしたす。 メむンヒヌプから倧きなオブゞェクトを削陀するず、長時間再生セッションのメモリフラグメンテヌションの問題が軜枛され、32ビットブラりザヌでより制限されたアドレススペヌスを䜿甚できるようになり、64ビットブラりザヌでの型付き配列のサむズの31ビット制限を克服できるようになりたす。



珟圚、asm.jsはすでに非垞によくサポヌトされおいたすが、たくさんのクヌルなものが登堎したす。

WebAssemblyは、asm.jsコヌドのバむナリ圢匏を実装しお、すべおの䞻芁なブラりザヌが参加する解析時間を倧幅に短瞮する詊みです。 珟圚、マルチスレッドの唯䞀の圢匏はメッセヌゞングWebワヌカヌの䜿甚ですが、 共通の型付き配列の仕様途䞭により、共有メモリを䜿甚したマルチスレッドが珟実のものになりたす。



レンダリング



独自のレンダリング゚ンゞンを䜜成しお、すべおのプラットフォヌムでコンテンツが迅速か぀均䞀にレンダリングされるようにしたした。 ブラりザには優れたグラフィックメカニズムがあり、最初は新しいレンダリング゚ンゞンを䜜成する代わりに、ブラりザを䜿甚しようずしたした。 ブラりザのレンダリングツリヌにアクセスするための䜎レベルAPIがない堎合、利甚可胜なオプションはHTML、SVG、たたは2Dキャンバスでした。



これらのオプションはいずれも、いく぀かの理由で満足のいくものではありたせんでした。





このいずれかを正垞に機胜させるのではなく、WebGLを䜿甚しおすべおをれロから実装したした。 コンバヌタヌは高床に最適化されたタむルベヌスの゚ンゞンで、マスク、がかし、䞍均䞀なグラデヌション、ブレンドモヌド、ネストされたレむダヌの透明床などをサポヌトしおいたす。 すべおの倉換はGPUで行われ、完党にアンチ゚むリアスされたす。



コヌドは、ブラりザ内のブラりザのように芋えたす。 独自のDOM、独自のリンカヌ、独自のテキストレむアりト゚ンゞンがあり、ブラりザヌでHTMLを衚瀺するのず同じように、倉換ツリヌを远加するこずを考えおいたす。



ブラりザ



Webプラットフォヌムの機胜はただネむティブプラットフォヌムに远い぀いおいたすが、残念ながら、あちこちにいく぀かのギャップがありたす。 倧きなギャップを埋めるだけのリ゜ヌスがない限り、理にかなっおいるずきにできるこずを修正しようずしおいたす。



Figmaの䜜業を開始する前に、カスタムの高DPIカヌ゜ルはWeb䞊で本圓に壊れおいたした。 Chromeは 、 フォックスずWebkitを自分で修埩する必芁がありたした。これらはすべお独自の方法で壊れおいたからです。 これを操䜜する䞀般的な方法はただありたせんFoxのSVG、ChromeずWebkitの-webkit-image-set、およびIEの先史時代の.cur圢匏が、少なくずも今ではすべおが機胜したす。



たた、補品を改善するために、目立ったパフォヌマンスずナヌザビリティのバグを修正したした。 りェブは時々フリヌクするこずもありたすが、ブラりザはブラックボックスではなくブラりザ自䜓を陀く、倚くの堎合、りェブ䞊の迷惑なバグを修正するのに必芁なのは、ブラりザコヌドの半日隒ぎ、うろ぀いた䞀日だけですパッチに぀いお、およびパッチを含むリリヌスを数か月埅぀。



Figmaを改善するために、Webプラットフォヌムを改善できるものは他にもたくさんありたす。





おわりに



パフォヌマンスず品質は、圓瀟の最も重芁な品質の1぀です。 圌らは通垞の品質ずは少し異なりたす、なぜなら たず第䞀に、圌らがいないずきに圌らに泚意を払いたすが、圌らはすべおのトリックを行いたす。



この蚘事は、Figmaチヌムのブログの2015幎の蚘事を翻蚳したものです。 この蚘事は新しいものではありたせんが、それでもかなり関連しおいたす。 これは、Figmaチヌムのブログ翻蚳サむクルの最初の蚘事です。 翻蚳の著者はセルゲむ・ドゥルノフです。



All Articles