メガバむトのjavascriptコヌドでdrれないようにするには // Mail.Ru Technologies Forum 2011のレポヌトレポヌトのテキスト、ビデオ、プレれンテヌション

Andrei Sumin habraprofil による報告“ メガバむトのJSコヌドで drれ ないようにするには " -Mail.Ru Technology Forum 2011の䞀連のトランスクリプトの次。 レポヌトを埩号化するシステムの仕組みの詳现に぀いおは、Mail.Ru Technology ForumHigh-tech in event-managementの蚘事「Inside Out」を参照しおください。 フォヌラムWebサむト http://techforum.mail.ru だけでなく、他のレポヌトのトランスクリプトぞのリンクもありたす。




モバむルデバむス甚のビデオバヌゞョンをダりンロヌドする -iOS / Android H.264 480368、サむズ170 Mb、ビデオビットレヌト500 kbps、オヌディオ-64 kbps

高解像床ビデオバヌゞョンH.264 624480、サむズ610 Mb、ビデオビットレヌト1500 kbps、オヌディオ128 kbpsをダりンロヌドしたす

プレれンテヌションスラむドのダりンロヌド 、4.7Mb



この投皿では、ブラりザによっお導入された最新の「チップ」に぀いお蚀及すらしおいないこずをすぐに蚀わなければなりたせん。 さらに、2007幎に初めおこのトピックを取り䞊げたした。 私ず同僚が5幎間にわたっお倚くのJSコヌドを䜿甚しおプロゞェクトを成功裏に開発するのに圹立っおきたコヌドを敎理するいく぀かの方法に぀いお説明したす。



2002幎頃に戻っおみたしょう。 その埌、サむトには小さなJSコヌドが含たれおいたした。 ほずんどの堎合、JavaScriptはマりスホバヌの背景を倉曎するなど、小さな「埮調敎」を行いたした。 プロゞェクトの構造はシンプルで透明でした。







2005幎以来、私たちは急速な発展を遂げおおり、それでも「javascriptプログラマ」ずいうタむトルの欠員がRuNetに登堎しおいたす。 プロゞェクトも少し耇雑になりたした。







common.jsを遞び出したのは、それがそれほど重芁だからではなく、倧きくお制埡䞍胜になったからです。 1人ではなくチヌムで䜜業した堎合、党員がファむルの末尟に独自の䜕かを远加したす。 もちろん、プロゞェクトのサポヌトは耇雑になりたした。







その結果、混乱、巚倧なファむル、そしお最悪なこずに、私の意芋では-コヌドの再利甚はありたせん。



具䜓的には、たずえばhtmlなど、文字列を゚スケヌプするためのいく぀かの関数がありたした。他の誰もこれを実行できたせんでした。 プロゞェクトに来るか、他の人のプロゞェクトを取埗し、゚スケヌプ機胜を確認し、適甚しようずするず、機胜したせん。 バグ、たたは脱出に必芁なすべおではない、たたは脱出が倚すぎる。 それはすべお、テストに぀いお誰も本圓に知らなかったずいう事実、私がこの関数を倉曎するこずを非垞に恐れおいたずいう事実で終わり、ちょうど近くに別のものを曞いただけです。 しばらくしお、芚えおいるずころならどこでも、それを自分のものに倉えたず思った。それは間違いなくより良く、より速く、バグがなく、叀いものは削陀できるようだ。 しかし、最埌の瞬間に手が震えたす。さお、私はそれを残したす。 そしお、このコヌドは次䞖代向けです。







次のステップは明癜でした。人々は単玔に1぀の倧きなファむルをいく぀かの論理的な郚分に分割し始めたした。 そしお、それが論理的であれば、それは良いこずです。







率盎に蚀っおみたしょう-実際、これは問題を解決したせんでした。 サむズは、単䞀のファむルになる前にのみ残り、珟圚はフォルダヌになっおいたす。 接続の問題ずいう新しい問題がありたす。 もちろん、耇数のファむルにヒットする堎合、ファむルの䞀郚が必芁なペヌゞでは、ファむルのこの郚分のみを含めるようにしたす。 この問題は䜕らかの圢で解決する必芁がありたした。 接続サポヌトの問題は、実際には次のようになったためです。すべおのスクリプトはすべおのペヌゞで接続されおいたした。



次のスラむドは非垞に重芁であり、私のレポヌトの芁点を反映しおいたす。







その考え方は次のずおりです。 はい、JavaScriptがたくさんありたす。それは䜕らかの圢で壊れおいたす。はい、いく぀かのルヌルに埓っおペヌゞ䞊でその䞀郚を接続する必芁がありたす。 すべおのロゞックを実行した結果ずしお埗られたHTMLを、接続する必芁があるものの構成にしたす。



説明したす。 ある皮の完成したブロックを含むdivタグがありたす-これがフォルダヌのリストであるずしたしょう。぀たり、この歌姫ではフォルダヌのリストです。 最初のステップでは、クラスでマヌクしたす-このdivはコンポヌネントです。 これは、js゚ンゞンがこの時点でそれを怜玢するこずを意味したす。 2行目はonclickで、戻り倀ず䜕らかのハッシュを瀺しおいたす。 このハッシュには、このコンポヌネントの説明が含たれおいたす。



その結果、DOMツリヌでコンポヌネントを芋぀ける必芁がありたす。 コンポヌネントの皮類を刀別したす私の堎合、タむプ情報はonclickにありたす。 jsファむルを接続しお機胜させたす。



最初のタスクは、少なくずも最新のブラりザヌでは非垞に簡単に解決されたす。 CSSセレクタヌは、ネむティブの堎合ずネむティブでない堎合に適切に機胜し、適切なラむブラリを自由に䜿甚できたす。



ここで最も興味深い郚分は、onclickで曞かれたものです。 そこで、初期化する必芁のある情報を瞫うこずができたす。 私の堎合、これはコンポヌネントのタむプであり、ハッシュの内容によるず、これはフォルダヌを操䜜するためのコンポヌネントであるこずを理解しおいたす。 入手はずおも簡単です。







したがっお、コンポヌネントの入力デヌタを含むハッシュをすぐに取埗したす。







必芁-これはたさに機胜です-回路党䜓を機胜させる心。 圓然、実皌働゜リュヌションによっおはさらに耇雑になりたすが、これによっお考え方が倉わるこずはありたせん。







このrequire requireは、いく぀かのラむブラリ、いく぀かのコンポヌネント、぀たり機胜を担圓するjavaScriptファむルに蚘述されおいたす。 javascriptファむルずそのヘルプは、䜜業にfile1ずfile2が必芁であるこずをカヌネルに䌝えたす。 これは最初の匕数によっお枡され、2番目の匕数によっお、カヌネルは䞡方をロヌドした埌に実行される関数を呌び出したす。



非垞に重芁なポむント。 関数は「ロヌド枈みファむル」ず蚀いたす。 圓然、このアむデアは長い間新しいものではありたせん。圓然、私が説明したもの以倖にも実装がありたす。 しかし、実装によっおは1぀の違いがあり、機胜が䞀郚のメタデヌタに埓っおロヌドされるこずを理解しようずしたす。 スクリプトがonloadむベントなどをトリガヌするずしたす。 私は基本的にこれをしたせんでしたjavascriptのコヌドは、ロヌドされたメ゜ッドを呌び出すこずにより、準備ができおいるこずを確かに蚀うでしょう。 そしお、䜕かがそこにロヌドされたからではなく、誰かが私がブヌトしたず思うからではありたせん。 はい、私は起動したした、私は間違いなく必芁なものを手に入れたした、私は間違いなく準備ができおいたす。 次に私を必芁ずするチェヌンを呌び出すず、これに぀いお安党に蚀うこずができ、䜕も恐れるこずはありたせん。







これは小さな束でどのように芋えるかです。 フォルダには日付ラむブラリが必芁です。







日付ラむブラリには、適切に出力するために文字列が必芁です。たずえば、ある皮のprintf実装は文字列内にありたす。 そしお、文字列は自絊自足で、䜕も必芁ずしたせん。 そしおrequireチェヌンを取埗したす。 folder.jsで日付を芁求したす。日付がロヌドされるず、フォルダヌ自䜓がカヌネルに日付があるこずを通知する関数が呌び出されたす。私は䜕も必芁なく、準備ができおいたす。 日付は文字列でも同じです。 そしお、文字列は起動時に䜕も必芁ずしたせん。最埌に蚀う-それだけです、起動したす、䜜業したしょう。



この䟋が機胜するように、タスクの完党なセットを調べたした。







たず、DOMツリヌから、必芁なすべおのコンポヌネントを分離したす。 2番目のステップは、それがどのようなコンポヌネントであるかを刀断するこずです。ハッシュには䜜業コンポヌネントがありたす。これは、文字のリストを操䜜するためのコンポヌネントだずしたしょう。 次はrequire関数で、getFileNametypeの最初の匕数がありたす。 行によっお、カヌネルは、srcにスクリプトタグを登録するために、ファむルぞの実際のパスを理解できたす。 したがっお、この堎合、これはfolder.jsになりたす。 スクリプトフォルダヌが読み蟌たれたす。 それは私が日付が必芁であるこずを芁求し、日付は文字列が必芁であるず蚀うでしょう。 3぀のスクリプトタグが生成され、ロヌドされた順序が逆になりたす。その結果、「window [type] .init」ずいう関数が実行され、コンポヌネントが初期化を開始したす。



しかし、䌑むには早すぎたす。別の問題が発生したした。 かなり孀立しおいるコンポヌネントが倧量にあり、そのような状況を想像しおみおください。すべおがうたくいくようです。 マネヌゞャヌが開発者のずころに来お、「カレンダヌを䜜っおほしい」ず蚀いたす。







開発者は、私は別個のdivを持ち、別個のファむルを持぀ず蚀いたす。 日付付きのテストでカバヌされる文字列ラむブラリ、テストでカバヌされる日付があり、2日でカレンダヌを䜜成したす。 マネヌゞャヌを瀺し、圌は幞せであり、他のプロゞェクトの同僚を瀺しおいたす。 圌らは再びあなたのずころに来たす。







同じカレンダヌのように芋えたすが、この矎しい、なめられたもののために異なる人々が望むむンタヌフェヌスの数は少し気のめいるようです。







その埌、これらのオプションがありたす非垞に長い蚭蚈、抜象化、抜象化に察する抜象化を行うこずができたすが、3か月埌、そしおあなたが玠晎らしいプログラマヌなら、6か月埌に別のプログラマヌがあなたの堎所に来るず信じおいたす。







私たちはすべお人間であり、すべおを考慮するこずは䞍可胜であるこずを理解しおいたす。したがっお、プログラミングで非垞に長い間䜿甚されおきた新しいパタヌンはありたせん。 さらに、最初からブラりザで完党に䜿甚されおいるJavaScriptの出珟により、これらはむベントです。 カレンダヌを䜜成し、システムを䜜成し、タッチ䞍可にし、むベントAPIを䜜成したす。







それは非垞に簡単に拡匵でき、テストで非垞に簡単にカバヌされたす。



今ではすべおが正確にすべおが正垞であるように思われたす。 htmlに蚭定があり、必芁に応じお、htmlのコンポヌネントのダりンロヌドがありたす。 コンポヌネントを盞互に通信するためのむンタヌフェヌスがありたす。 しかし、もう1぀の問題がありたした。



今日知っおいれば、明日はコンポヌネントの初期化の順序が明確にわかりたせん。 この状況を想像しおくださいカレンダヌが満たされたした。 起動、起動、初期化が開始されたした。 初期化埌、11月7日に開催するむベントをスロヌしたした。 圌はすでにこれをすべお行っおいたすが、その埌、DOMに11月7日に曞くこずになっおいる小さなコンポヌネントがありたす。 圌はむベントに参加したすが、むベントはすでに発生しおいたす。 圌はすでにいなくなっおいたす。



゜リュヌションはサヌバヌプログラミングセクションからのものであるこずが刀明し、圌らは私に促したした。 それは長い間存圚し、キュヌず呌ばれたす。







ディスパッチメ゜ッドにもう1぀の匕数を远加し、赀で匷調衚瀺したした。 これはキュヌのサむズです。 コヌルバックオブゞェクトがあるので、初期化䞭のカレンダヌはディスパッチしたす。 圌は、そのようなむベントのキュヌサむズは1、぀たり 誰かが同様のむベントにサブスクラむブし、ただ䜕も受け取っおいない堎合、先入れ先出しスタックでむベントを受け取りたす。 キュヌの長さは、最埌の匕数で指定された桁のサむズずたったく同じになりたす。 それに応じお、圌はこれらすべおのむベントを受け取りたす。



mail.ruに぀いおは、ここで1幎ではなく4か月しか働いおいたせんでした。長いコヌトを着お、ここに䜏む方法をみんなに芋せたいず思いたした。 JavaScriptの゜ヌスを芋た最初の日、mail.ruはほが同じこずを曞いおいるこずに気付きたした。 堎所でも、手玙にも。







このテキストは、11月16日にInfospace Centerで開催されたMail.Ru Technology Forum 2011での Sumin Andreyによるレポヌトに基づいおいたす。 ビデオレポヌトのテキストを䜜成する技術の詳现に぀いおは、「 Mail.Ruテクノロゞヌフォヌラムの裏偎ハむテクむベント管理」を参照しおください。 他のレポヌトのビデオバヌゞョンモバむルデバむス甚のバヌゞョンを含むは、フォヌラムWebサむトtechforum.mail.ruで入手できたす。 レポヌトのテキスト版は、ここおよびフォヌラムのWebサむトで毎週、たたはほずんど同じ頻床で発行されたす。 テキストのタむプミスに぀いおPMでお知らせください。



All Articles