ES3での新しいJavaScript機胜の䜿甚

こんにちは同僚。



最近、時々JavaScriptテヌマに戻りたす。 私たちは、ES6暙準 Kyle Simpsonに特化したシリヌズ「You Do n't Know JS」の次の本に特に興味がありたした。







ずころで、誰かがすでにAdam Boduhの新しい本「 JavaScript at Scale 」をよく芋お、ロシア語で芋たいず思っおいるかもしれたせん。







これに぀いおは調査で。 そしお、アンダヌカット-Cody Lindley氏による重芁な1月蚘事で、JavaScriptの䞖界がどのように倉化する準備ができおいるかを考えるのに圹立ちたす。







倧䌁業向けのJavaScript Web開発の䞖界では、少なくずもECMAScript 3ES3暙準の条件䞋で機胜するような゜リュヌションが䜜成され、ツヌルが䜿甚されたす。 あなたには驚きの暩利がありたす-しかし、これはどのようにできたすか 最終的に、ECMAScript 5は2011幎6月に準備が敎い、IE 9 strictモヌドを陀くを含むすべおの最新ブラりザヌでサポヌトされおいたす 。



この蚘事では、倧䌁業のすべおではないにしおも倚くのJavaScript開発者がただES3を怜蚎する必芁がある理由に぀いお説明し、ES5 / ES6機胜を今日䜿甚したい人のためのいく぀かの戊略に぀いおも説明したす。 最埌に、なぜ自分でやらないのかを説明したす。



IE8はただここにありたす。 それに慣れおください。



IE 8、7、さらには6のサポヌトは、䟝然ずしお䌁業の関連芁件である可胜性がありたす。 あなたがそれを望むかどうか、あなたがそれに同意するかどうか-それはそうです。 蚀い換えれば、戊闘コヌドでJavaScript ES5たたはES6の機胜を䜿甚するこずは、倚くの䌁業環境ではただ未来のこずです。



原則ずしお、䌁業の開発者が䜜成したコヌドず圌らが䜿甚するツヌルは、ES3環境をサポヌトする必芁がありたす。 たずえば、Kendo UIのほずんどのりィゞェットモバむルりィゞェットを陀くはIE7 +でテストおよびサポヌトされおいたす。 䌁業の開発者向けに曞かれたほずんどすべおのJavaScript゜リュヌションの簡単な調査でさえ、これらの゜リュヌションのほずんどはES3暙準を考慮しお䜜成されおいるず確信しおいたす。



これは、䌁業開発に手を染めた人を驚かせるべきではありたせん。 ただし、 最新の JavaScriptツヌルAngular 1.3などの倚くは、玔粋なES3環境での理想的な動䜜に関係なくテストおよび開発されおいるため、たったく根付いおいない可胜性があるずいう事実を理解するのが難しい堎合がありたす。 少なくずも、圌らは深刻なトラブルを匕き起こし、回避策ずポリフィルを必芁ずしたす。



今日、䌁業のツヌルは、プログラマが盎面できる最も耇雑なタスクのみを解決するために、非垞に信頌性が高く、䞀流の、実瞟のある、鋭利なものずしお認識され、称賛されるこずがよくありたす。 しかし珟実には、゚ンタヌプラむズJavaScriptコヌドず関連ツヌルのほずんどは、16幎前に完成した仕様に基づいお蚘述および暙準化されおいたす。



間違いなく、ES3暙準は時を経おテストされおいたすが、倧䌁業ぞの高い信頌性ず適合性に぀いおは、珟圚のJavaScript開発者の倚くが議論できるず思いたす。 最終的に、新しいES5およびES6仕様の機胜は、定矩䞊、ES3の欠陥を修正し、珟圚盎面しおいる耇雑な問題を解決するための最新のJavaScriptのために特別に䜜成されたした。 さらに、16幎前に実珟された単なる機䌚だけでは、珟代のJavaScript開発には䞍十分であるこずに疑いの䜙地はありたせん。



開発者向けのアクションプランは䜕ですか



倧䌁業の平均的なJavaScript開発者にずっお、これがどれほど悲芳的であるか想像しおみおください。 JavaScriptの専門家ずしお、私自身も最終的な開発ず実装を埅たずに、すべおの同僚が新しいJavaScript機胜の䜿甚を開始できるようにしたいず考えおいたす。 ブラりザず䌁業、気になりたす



しかし、望たしいものず実際のものずの間には倧きな違いがありたす。 だからこそ、新しい機胜をシミュレヌトするためにポリフィルが䜜成され、人々は叀いブラりザヌ甚にJavaScriptをコンパむルしたり、クラむアントコヌドをドロップしおNodeを孊習したりしたす。 笑っおはいけたせん、それは起こりたす。 クラむアントずブラりザは本圓に開発者を匕き付けるこずができるので、圌はJavaScriptのより良いランタむム環境の探玢に真っ向から走りたす。



真剣に、ES3ツヌルを䜿甚し、ES3環境で実行されるコヌドを蚘述する䌁業開発者にずっお最も賢いこずは、ただ仕事をするこずです。 い぀か叀いブラりザES3をサポヌトするこずを忘れお、ES5たたはES6の最新のネむティブコヌドのみを䜜成できるずいう倢を誰も気にしないず思いたす。 もちろん、゚ンタヌプラむズ開発者は叀いブラりザの死を埅぀必芁がありたす-率盎に蚀っお、これは倧䌁業ではすぐには起こりたせん。



ポリフィルたたはコンパむルを䜿甚しない理由



個人的には、倧芏暡なポリフィルを䜿甚しようずしたこずはなく、ES5たたはES6から機胜するES3コヌドを䜜成するためのコンパむルに頌りたせんでした。 はい、時々ポリフィルに頌りたしたが、ポリフィルたたはコンパむル手順の包括的な䜿甚に䌎う困難ずコストに察凊するこずができたせんでした぀たり、ES5たたはES6゜ヌスコヌドからES3コヌドを䜜成したす。 萜ずし穎、远加のポリフィル、䜿甚䞊の制限、および劣った機胜-これらが私にこれをさせなかった理由です。 たずえば、新しい6to5コンパむラヌを䜿甚する堎合のES6機胜の䜿甚に関するすべおの詳现に぀いお読んでみおください。



これは、そのような機䌚があったずきに新しいJavaScript機胜を楜しんだり、プログラムしたり、䜿甚したりしたわけではありたせん。 同じこずをしたす。 実際のずころ、ES3環境からのサポヌトが必芁な堎合、次のような最も抵抗の少ないパスを遞択したす。そのようなツヌルを䜿甚しお、ES3の「金属」にできるだけ近いコヌドを䜜成したす。 最埌に、ツヌルがES5 +を必芁ずするずいう単なる事実は、ポリフィルたたはコンパむルに関連する別のサヌドパヌティ゜リュヌションに固有の条件䞋で動䜜できるこずを意味したせん-もちろん、この゜リュヌションが事前にテストされおおらず、必芁なポリフィルが付属しおいる堎合明らかな理由ファむルサむズ、同期、耇補などは通垞行われたせん。



そのため、ポリフィルやコンパむルに頌るこずはほずんどありたせんでした。 JavaScriptアプリケヌションの構築は、それ自䜓が非垞に耇雑な䌁業だず思いたす。 倧芏暡な䌁業プロゞェクト、コスト、たたは官僚䞻矩特にサヌドパヌティの官僚䞻矩のわずかな合䜵症は、それらが開発に根本的な利益をもたらす堎合にのみ正圓化されたす。 私の緎習では、ES3ベヌスのコヌドベヌスに新しいJavaScript機胜を远加するこずで、このような利益を達成するこずはできたせんでした-それはずおも難しいこずです。



しかし、誰もが私に同意するわけではありたせん。 もちろん、それぞれに远加の耇雑さや正圓なリスクの蚱容限床がありたす。 したがっお、この蚘事の䞀郚ずしお、私ずは異なり、埌の仕様で登堎したES3コヌドベヌスでそのような機胜を䜿甚するこずにしたず思いたす泚サヌドパヌティコヌドのポリフィルに぀いお話しおいる。



䌁業で新しいES6 + JavaScript機胜を掻甚するための戊略



この蚘事の残りの郚分では、゚ンタヌプラむズで新しいES6 + JavaScript機胜を䜿甚するための3぀の戊略に぀いお説明したす。



戊略1.挿入されたポリフィルの適甚



ES3環境をES5およびES6暙準さらにはES7からの機胜で満たせないのは非垞に簡単です-HTMLドキュメントにcore.jsプロゞェクトのshim.jsファむルを含めるだけです。



shim.jsは 、実行/解析する最初のJavaScriptファむルずしおHTMLドキュメントに含たれおおり、それに続くすべおのJavaScriptコヌドは、ポリフィル機胜をネむティブのものずしお䜿甚できたすcore.jsのコヌド䟋を以䞋に瀺したす。



console.log(Array.from(new Set([1, 2, 3, 2, 1]))); // => [1, 2, 3] console.log('*'.repeat(10)); // => '**********' Promise.resolve(32).then(console.log); // => 32 setImmediate(console.log, 42); // => 42
      
      







core.jsは、ECMAScript互換のポリフィルの完党なセットを提䟛するだけでなく、shim.jsの代わりにcore.jsを䜿甚する堎合に利甚できる次の非暙準JavaScript機胜も提䟛するこずに泚意しおください。







戊略2.オプトむン原則の䜿甚



奜むず奜たざるずにかかわらず、䞊蚘のプラグむンポリフィルは、実行時にES環境に新しい機胜を远加したす。 すべおのコストで。 これがあなたに合わない堎合、別のオプションがありたす。 core.jsプロゞェクトは、新機胜を実装する明瀺的なオプトむンpolizolneniyaも提䟛したすが、これらの機胜は遞択的に䜿甚でき、それぞれを個別にアクティブ化できたす。 同様の方法は、lodashのようなラむブラリで䜿甚されたす。lodashは、1぀のグロヌバル倀_などを提䟛し、すべおの可胜性が結び付けられおいたす。



コヌドでES5およびES6を明瀺的に有効にするには、core.jsのlibrary.jsファむルを含めるこずができたす。 次に、「core」のグロヌバル倀に関連付けられおいるメ゜ッドの機胜に察応するコヌドを蚘述するこずにより、必芁に応じお新しいECMAScript機胜を適甚できたす。 同様の状況は、次のコヌドサンプルで実装されおいたす䟋はcore.jsから取られおいたす。



 var log = core.console.log; log(core.Array.from(new core.Set([1, 2, 3, 2, 1]))); // => [1, 2, 3] log(core.String.repeat('*', 10)); // => '**********' core.Promise.resolve(32).then(log); // => 32 core.setImmediate(log, 42); // => 42
      
      







戊略3. ES3のポリフィルの以䞋の適甚によるES6 + ES5の予備コンパむル



ES5およびES6の暙準機胜をES3コヌドに盎接コンパむルするこずはできたせんたずえば、叀い機胜を䜿甚しお新しい同等の機胜を䜜成するなど。 そうでなければ、あなたはそれらの機䌚を真剣に制限したす。 攟送するこずができたす。 ES6コヌドがES5にコンパむルされるプリコンパむルステヌゞを䜿甚し、プラグむンpolyfill shim.jsを䜿甚しおES3ぞの最埌のアップグレヌドを克服するのが珟実的です。



これを行うには、新しい6to5トランスパむラヌを䜿甚しお、gulpを䜿甚する予備ビルドタスクを䜜成したす。gulpは、ES6を未修正バニラES5に倉換したす。 次に、6to5のドキュメントによるず、 ES6の本栌的なランタむム環境を取埗するには、 再生成ランタむム 、 shim.js 、 ES6モゞュヌルロヌダヌポリ フィルを䜿甚しおこの環境を準備する必芁がありたす 泚core.jsのclient / shim.jsを䜿甚したす。 ES3サポヌトが提䟛されたす。



6to5でコンパむルされたコヌドを含むHTMLファむルは次のようになりたす。



 <!DOCTYPE html> <html> <body> <script src="runtime.js"></script> <script src="client/shim.js"></script> <script src="es6-module-loader.js"></script> <script> System.parser = '6to5'; //  es6-module-loader.js    6to5 //   ,   6to5 </script> </body> </html>
      
      







商甚コヌドでこれを行う堎合は、 考えられる すべおの ニュアンスを 絶察に探玢するこずを匷くお勧めしたす。



サヌドパヌティのコヌドはどうですか



理論的には、ES3環境で新しいJavaScript機胜を䜿甚するためにコヌドをポリコンプリヌトたたはポリフィル+プリコンパむルしおいる堎合、ES5 +環境でのみ動䜜するサヌドパヌティツヌルを安党に䜿甚できたすか いや



ES3環境でサヌドパヌティツヌルを安党に䜿甚できるようにする唯䞀のオプションは、サヌドパヌティコヌドレベルで特定のポリフィル/コンパむラを盎接サポヌトするこずです。 それ以倖の堎合、このセクションの最初の段萜の前提は非垞に愚かで䞀時的なたたです。 叀い環境ぞの新しい機䌚のこのすべおの提出は、特定の萜ずし穎、耇雑なトリック、および個人的な意芋に関連しおいたす。 これらの開発者があなたの環境に正確に適応しおいるこずを個人的に確認しおいない限り、サヌドパヌティの開発者がそのような詳现に察凊したず想定しないでください。 よくわからない堎合は、サヌドパヌティの開発者がポリフィルずコンパむル枈み出力をテストする可胜性は䜎いこずに留意しおください。 原則ずしお、サヌドパヌティコヌドの解析にES5 +環境が必芁な堎合、実際のES5 +環境を意味したす。



All Articles