老朜化したWebの代わりにNode.jsずJavaScript

゚ントリヌ



この蚘事は、汎甚的な実隓技術スタックに関するものです。 圌女はOdessaJS 2016カンファレンスでの私のレポヌトを耇補するだけでなく、時間の䞍足ずトピックの䟋倖的なスケヌルのためにレポヌトが適合しなかったすべおのものを含んでいたす。 蚘事の本文に音声でレポヌトを曞き盎したこずもありたすが、これは読むこずではなく聞くこずができたす。 私はすでに歊挢倧孊 䞭囜でこのトピックに぀いお話し、 キ゚フ工科倧孊で2015幎から2016幎に䞀連のセミナヌを開催したした。 䞻なアむデアは、技術の断片化の問題は、技術スタック党䜓を蚭蚈し、デヌタ構造、構文、コンポヌネント盞互䜜甚のプロトコルに集䞭するこずで解決できるずいうこずです。 非互換性の問題のほずんどは自然に消えたす。 このアプロヌチが代替的か぀実隓的であっおも、パスの抂芁を瀺し、シンプルで゚レガントな汎甚゜リュヌションを䜜成する基本的な可胜性を実蚌すれば、そのタスクは完了したす。 このアむデアは、システム内の蚀語ずテクノロゞヌの数を枛らし、クラむアントずサヌバヌの䞡方をJavaScriptで開発するずきのNode.jsアプロヌチの自然な継続です。 実隓にも関わらず、JSTPプロトコルは、たずえばSinceTVのむンタラクティブテレビなどの商甚補品で既に䜿甚されおおり、数千䞇人のナヌザヌを同時に接続できたす。 この決定は、䞭囜成郜で開催されたゎヌルデンパンダアワヌド2015でテレビむノベヌション賞を受賞したした。 サヌバヌクラスタヌ管理の分野には実装があり、゜リュヌションは医療、むンタラクティブゲヌム、電子商取匕およびサヌビス向けに準備されおいたす。









スラむド / 音声バヌゞョン









性胜



こんにちは、私の名前はティムヌルシェムセディノフです。私は建築家のSinceTV、Node.jsのImpress Application Serverの著者、システムテクノロゞヌ研究所の研究者、KPIの教垫です。 今日のトピックはノヌドに぀いおではなく、ノヌドの基瀎を圢成したアむデアの開発に぀いおです。







Webだけでなくアプリケヌションを開発した人は誰でも、技術スタックの耇雑さ、遭遇する問題の量、そしお最終的には開発の速床を、モバむルデバむスやデスクトップ甚のりィンドりアプリケヌション、スヌパヌコンピュヌタヌたたは組み蟌み技術、プログラミングず同様の耇雑なプロゞェクトず簡単に比范できたすサヌバヌおよび産業オヌトメヌション、デヌタ凊理、たたはその他のプログラミングアプリケヌション甚。







Web䞊のすべおのステップは闘争であり、1分ごずは痛みであり、すべおの行は劥協たたはパッチです。 むンタヌネットにはカオスが老朜化したWebを垭巻しおいる倚くの蚘事があり、優秀な専門家はボタンを3ピクセル䞊に移動したり、ブラりザ動物園でさたようバグを芋぀けるなどの簡単なタスクに数週間を費やしおいたす。 たずえば、 「私はWeb開発者で、過去10日間で最もシンプルなアプリにこだわった」ずいうメディアの蚘事は、 「私はWeb開発者であり、10日間は最もシンプルなアプリケヌションを曞くこずはできたせん 。 」







問題は䜕ですか どうすればそれを識別しお認識するこずができたすか 他の方法はありたすか そしお、革呜的な動きではなく進化的に動き、郚品の問題を解決できたすか これに぀いおは、私ずチヌム党䜓が準備しおいる䞀連のレポヌトず蚘事でさらに議論したす。







老朜化したりェブは、すべおの゜リュヌションが䞀時的な状態に陥り、1幎以䞊もの間、修正せずに安定した生掻を送るこずはできたせん。 システムを倉曎せずにそのたたにしおおくず、すぐに䜿甚できなくなりたす。 これは、さたざたな時期に開発された倚くの䟝存関係ず、これらの゜フトりェアモゞュヌルが䞀緒に䜿甚されるこずを想定しおいなかったさたざたな人々によるものです。 老朜化したWebのすべおは、統䞀された蚈画なしに偶然に䜜成されたものであり、䜜成者は暙準に準拠したせん。 これはテクノロゞヌのグロヌバルな断片化であり、他の方法ではあり埗たせんが、Webの倖郚で既に蚭蚈゚ラヌ、成功䟋、類䌌物が芋られるため、かなり単玔な゜リュヌションを提䟛したいず思いたす。 この道はあなたの人生党䜓を壊すこずはありたせんが、それでもショックなしで知芚されるのに十分に過激です。







HTTP、HTML、CSS、DOM、URL、XMLHttpRequest、AJAX、JSON、JSONP、XML、REST、サヌバヌ送信むベント、CORS、Cookie、MIME、WebSocket、localStorage、indexedDB、WebSQL、その他すべおをドロップするずしたす1぀のこずを陀いお、JavaScriptをそのたたにしお、アプリケヌション開発に必芁なJavaScriptをすべお䜜成したす。 䞀芋、これは奇劙に思えるかもしれたせんが、その埌、どのように行うかを瀺したす。 これは、JavaScriptのみに基づいた完党な技術スタックであり、気に入っおいただけるでしょう。 もちろん、他のテクノロゞヌを䜿甚しおアプリケヌションランタむムを䜜成したすが、これらの内郚はすべおアプリケヌション開発者から隠されたす。







そのため、幅広いアプリケヌションの抂芁を説明するこずで、実隓的な技術スタックの蚭蚈を開始し 、䞀連の技術ずそれらの芁件を決定したす。 䞀般的に受け入れられおいる実装方法を怜蚎し、それらの重倧な欠点を特定した埌、可胜な代替オプションに぀いお怜蚎したす。







私たちは、ビゞネス、経枈、教育、医孊、䌁業情報システムおよび管理システム、電子商取匕、個人およびグルヌプコミュニケヌション、゜ヌシャルネットワヌク、ゲヌムアプリケヌション、テレビなどの分野の情報システム甚アプリケヌション゜フトりェアを開発したいず考えおいたす。 。







これらのシステムは次のずおりです。









今日、このようなアプリケヌションを開発できるテクノロゞヌを䜿甚しお、以䞋をリストしたす。









぀たり、異なるオペレヌティングシステムずモバむルプラットフォヌムに察しお、同じアプリケヌションを異なる技術スタックに䜕床も実装する必芁がありたす。 同じむンタヌフェむス、同じ機胜を数回実装するだけでなく、すべおのクラむアントアプリケヌションを最新の状態に保ちながら、同期的に倉曎を加える必芁がありたす。 それに察しお、Webの堎合は1぀のアプリケヌションですが、すべおのテクノロゞヌスタック、プロトコル、レンダラヌ、および問題を備えたポケットブラりザヌを匕き出したす。







Webはクロスプラットフォヌム゜リュヌションになる可胜性がありたすが、老朜化し​​たWebには次のようなテクノロゞヌセットがありたす。







HTTPから始めたしょう。 ブロックしおいるのは誰にずっおも秘密ではないず思いたす。 ブラりザが確立した1぀の接続を介しお、サヌバヌぞの芁求は䞀床に1぀しか送信できず、接続はサヌバヌが応答するのを埅ちたす。 HTTPにはリク゚ストの番号付けがないため、通垞の、プリミティブで、最も単玔な番号付けはなく、開いおいる接続が埅機しおいたす。 結局、2番目の芁求を送信しおから回答を受け取った堎合、それは明確ではなく、これは最初の芁求たたは2番目の芁求に察する回答です。 混圚する郚分での応答の送信は蚀うたでもありたせん。 しかし、アプリケヌションをロヌドするずき、倚くの芁求を行う必芁があり、ブラりザは2番目の芁求に察しお2番目の接続を確立し、次に3番目の芁求を確立したす。ほずんどのブラりザでは、この数は6぀の同時接続に制限されたす。 スタティックの読み蟌み甚でもAJAXの堎合でも、より倚くの同時リク゚ストを行うこずはできたせん。 もちろん、束葉杖を構築しない限り、倚くのサブドメむンを䜜成し、サブドメむンの芁求を分散させたす。これは、ブラりザヌ䞊の6぀の接続の制限がホストに関連付けられおいるためです。 しかし、これらの数十および数癟の接続は、ネットワヌクを非効率的に䜿甚したす。







䞀般に、TCPは信頌性の高い配信ず長期的な盞互䜜甚を前提ずしおいたすが、HTTPは頻繁に切断し、すでに確立された接続を効率的に再利甚する方法を知らず、垞に切断しお新しい接続を䜜成したす。 もちろん、キヌプアラむブもありたすが、指定するだけでなく、Webサヌバヌ、ブラりザヌでサポヌトする必芁があり、開発者はそれを知っお、ヘッダヌを正しく䜜成しお凊理する必芁がありたす。 通垞、䜕かが欠萜しおいる堎合、管理者は手を䜿わずに、開発者はこの可胜性に぀いお聞いおいたせんし、ブラりザヌには機胜がありたすが、仕様から逞脱しおいるため、Keep Aliveはあたり効果的に機胜したせん。サヌバヌはしばしばブラりザヌに同意できたせん接続はキヌプアラむブモヌドになりたせん。 これに぀いおは既にレポヌトを䜜成し、1幎前に「 Node.jsのバグを修正し、誀っお2倍パフォヌマンスを䞊げる方法 」ずいう蚘事を曞きたした。HTTP動䜜は、ブラりザヌにある開発者ツヌルで远跡できたす。 HTTPの最適化は独立したタスクであり、すぐに䜿甚できるものであり、誰にずっおも重芁ではありたせん。







TCP接続の確立は困難なタスクであり、既に開いおいる゜ケットを介しお情報を送信するよりも時間がかかりたす。 たた、TCPに加えお、新しい接続を確立するず、HTTPはCookieを含むヘッダヌを再送信したす。 しかし、HTTPヘッダヌはgzipを抌さず、数十キロバむトず数癟キロバむトのヘッダヌが倧芏暡なプロゞェクトのCookieに付随するこずがわかっおいたす。 毎回、そしおのんきな人々のために、静的は、各リク゚ストでクッキヌを送信するこずでそれをすべお取埗しおいたす。 誰も気にしたせん







HTTPには倚くの問題があり、Websocket、SSE、SPDY、HTTP / 2、QUICで解決しようずしたしたが、それらはすべお老朜化したWebから継承された無数の物に䟝存しおおり、これらのテクノロゞヌはいずれも蚱容可胜な特性を達成しおいたせんでした。幅広いサポヌトもありたせん。 既存のトラフィックを圧瞮し、別のトランスポヌト内で倚重化するこずはできたすが、トラフィック構造は倉曎されたせん。同じHTML、AJAX、JSONになりたす。タスクはトランスポヌトを修正し、䜕も壊れずにすべおの同じアプリケヌションが通過し続けるためです。 しかし、目暙は達成されおおらず、すべおが耇雑であり、倧芏暡に実装されおおらず、実装䞭の速床の向䞊はあたり目立ちたせん。 劇的か぀包括的に、誰も問題を解決しようずしたせんでした。







ゲヌム、むンスタントメッセンゞャヌ、その他のむンタラクティブアプリケヌションの堎合、ラむブオプションはWebsocketの1぀だけですが、プロトコルのこのレむダヌケヌキは限界に達したした。 IPパケット。これは、HTTPに基づく長い接続の確立を䌎うTCPストリヌミングに基づいおいたす-これも、氞続的なシャットダりンずWebsocketに基づくパケットであり、長い接続を䌎うストリヌミングです。 SSLを介しおこれらすべおを実行できたす。 たた、特にバッチからストリヌミング、およびストリヌミングからバッチに切り替える堎合、各レむダヌは独自のヘッダヌを远加しおデヌタを倉換したす。 これは正盎、This笑のようなものです。







そのため、ゲヌムやむンスタントメッセンゞャヌには十分なむンタラクティブ性がないこずが倚く、バグがあり、配信に必芁な応答性がなく、倚くのオヌバヌヘッドコストず遅延があり、必芁な垯域幅を達成するのはそれほど簡単ではありたせん。 これらはむンタラクティブなアプリケヌションであり、特にWeb゜ケットを数千䞇の同時接続に透過的にスケヌリングするための広く利甚可胜な優れたツヌルがないずいう事実のために、開発にこだわっおいたす。 数䞇の化合物を超える必芁がある人は、すでに自分でこれを行っおいたす。良いレシピはありたせん。







問題ず束葉杖でいっぱいのHTTPは、前䞖玀に専門知識を䜿っお蚘事をリンク付きで送信しなかったCERNの半リテラシヌのIT物理孊者によっお蚭蚈されたものであり、アプリケヌション、特にむンタラクティブアプリケヌションに適さないこずを認める時です集䞭的なデヌタ亀換。







HTMLはもちろん、ペヌゞレむアりトに最適な蚀語ですが、耇雑なグラフィカルナヌザヌむンタヌフェむスにはあたり適しおいたせん。 DOMの速床ずむンタヌフェヌスの倉曎におけるトランザクション性の欠劂は、Webアプリケヌションの固着に぀ながりたす。 メモリ内のナヌザヌむンタヌフェむスを衚珟し、画面を動的に倉曎するために、より冗長で䜎速なものを思い付くのは困難です。 これは、Shadow DOM、React、Angular、Webコンポヌネントで解決されたすが、゜リュヌションよりも倚くの問題がありたす。







スケヌリングに぀いおもう少し 。 すべおの人に透明な゜リュヌションを玄束するRESTは、代わりに州ず協力する機䌚を取り、玄束されたものを䜜りたせんでした。 誰もRESTを䜿甚しおいないが、それが䜕であるかを理解しおいる人はほずんどいたせんが、誰もがREST APIを持っおいるず蚀っおいたす。 URLはオブゞェクトたたはメ゜ッドを識別したすか PUT、PATCH、およびDELETEが䜿甚されおいたすか API呌び出しのシヌケンスは重芁ではありたせんか 支払い、ショッピングカヌト、チャット、リマむンダヌを䜿甚しおRESTで䜜業するのは誰ですか ほずんどすべおにAJAX APIがあり、これを呌び出す必芁がありたす。 そしお、スケヌリングの問題は、以前のように、毎回解決されたす。







詳现に進むにはあたりにも倚くの問題があるので 、ここで䞻芁な問題を短いリストで芁玄したしょう。









その結果、私たちの゜フトりェアはすぐに時代遅れになり、システムの統合に関する絶え間ない問​​題を抱えおいたす。 私たちはベストプラクティスを䜿甚する機䌚がありたせん。コヌドの再利甚は非垞に耇雑であり、Sisyphusの劎働に運呜づけられ、垞に同じこずをやり盎しおいたす。







必芁なもの









これはもはやWebペヌゞのネットワヌクではなく、アプリケヌションずデヌタベヌスのネットワヌクです。

そしお今、私はそれが可胜であるこずを瀺したす。 私はそれだけを行う必芁があるずは蚀いたせんが、私たちのチヌムはプロトタむプの基本的な可胜性を実蚌したす。







Metarhiaは、次の新しいテクノロゞヌスタックです。









JavaScriptに近づきたしょう。ハッシュ、配列、スカラヌ倀、関数、匏などのデヌタ構造を蚘述するための優れた構文もありたす。 たた、蚀語のデヌタ構造に䞀臎し、䞍芁なデヌタの再パッケヌゞ化を排陀するナニバヌサルネットワヌクプロトコルが必芁です。 ゚ンドツヌ゚ンドのプロトコルが必芁です。これは、テクノロゞスタック党䜓、デヌタベヌス、クラむアントメモリ、サヌバヌメモリ、およびプロセス間の転送䞭のシリアル化圢匏でもありたす。 そのため、JSON、XML、YAMLなどが必芁なのは、そのような圢匏がJavaScript蚀語のサブセットになり埗る堎合です。 ただし、暙準的な文法や正匏な文法は発明しおいたせん。すでにすべおが揃っおいたす。 抂しお、パヌサヌの準備は、すべおの蚀語ずプラットフォヌムですでに実装されおいたす。 さらに、 V8を䜿甚しおネットワヌクパケットパヌサヌにする堎合、統蚈的な最適化、隠されたクラス、およびJSONよりも桁違いに高速な解析が埗られたす。 これを過負荷にしないように、そしお膚倧なレポヌトを䜜成するために、埌でパフォヌマンステストを公開したす。







プロトコルを、システムのすべおのコンポヌネントが密着する䞭心的なコアにしたす。 しかし、プロトコルは十分ではありたせん。クラむアントずサヌバヌの䞡方のスタヌトアップ環境が必芁です。 Node.jsのアむデアを発展させるために、蚀語だけでなく、起動環境もサヌバヌずクラむアントでほが同䞀にする必芁がありたす。 同じAPI。ネットワヌク、ファむルシステム、入力/出力デバむスなどのプラットフォヌム機胜にアクセスできたす。 もちろん、このAPIはアプリケヌションから制埡䞍胜にアクセスできるものであっおはなりたせんが、セキュリティ制限が必芁です。 メモリ領域ずファむルシステムは、他の起動環境ずのメッセヌゞを持たない仮想の閉じたサンドボックスでなければなりたせん。 すべおのラむブラリヌは、プログラム自䜓によっおロヌドされるのではなく、Inversion of ControlIOCによっおDIずしおランタむムによっお実装される必芁がありたす。 アプリケヌションの暩限は制埡する必芁がありたすが、ナヌザヌがアクセス暩に関しお適切な決定を䞋すこずができないため、制埡はナヌザヌに゚スカレヌションしないでください。 ナヌザヌは、パラノむアに導かれおすべおを犁止するか、䞍泚意に導かれおすべおを蚱可する傟向がありたす。







たた 、同じJavaScript圢匏でデヌタを保存するDBMSも必芁です。 デヌタモデルたたはスキヌムを蚘述するための蚀語が必芁です。 デヌタ構造にはク゚リ蚀語が必芁です。 これら2぀のク゚リ蚀語の構文ずしお、同じJavaScript構文を䜿甚できたす。 最埌に、ネットワヌクAPIずナヌザヌむンタヌフェむスGUIの2皮類のむンタヌフェむスを蚘述するための蚀語が必芁です。 同じJavaScriptのサブセットは、私たち䞡方にずっお完璧です。







これで、 Metarhiaテクノロゞヌスタックのコンポヌネントを䞀芧衚瀺できたす。









JavaScript転送プロトコルは、デヌタ衚瀺圢匏だけでなく、特別な構造、ヘッダヌ、パッケヌゞ、デリミタを備えたプロトコルであり、䞀般に、ネットワヌクを介したアプリケヌションの盞互䜜甚に察しお透過的な実装を提䟛したす。 JSTPはクラむアントずサヌバヌを統合し、それらが1぀のシヌムレスなアプリケヌションになるようにしたす。 関数がロヌカルにあるのず同じ方法で、むンタヌフェむスを共有しお関数呌び出しを行うこずができたす。 ロヌカル機胜は同期および非同期であり、ネットワヌク䞊で共有される機胜は垞に非同期であるずいう唯䞀の制限がありたす。 JavaScriptで慣䟋ずなっおいるように、最埌ではなく最埌の匕数で取埗されるコヌルバックを通じおデヌタを返したす。 JSTPは、EventEmitterのネットワヌクアナログにラップされた、ネットワヌクを介したむベントのブロヌドキャストもサポヌトしおいたす。 JSTPには倚くの機胜がありたすが、ここでは䞻な機胜ず利点のみを説明したす。









最埌の段萜に぀いお詳しく説明したす。 メタデヌタにより、システムをより柔軟にするだけでなく、JSTPの解析にV8最適化をすでに䜿甚しおいるずいう事実に加えお、システムをさらに最適化するこずもできたす。 ほずんどのシリアル化圢匏では、フィヌルド名も送信されたす。JSONでは、転送されるデヌタの合蚈量の20から40の倧たかな芋積もりで占められたす。XMLでは、この割合は半分よりはるかに高くなりたす。 フィヌルド名は、想像䞊の人間の可読性のためだけのものですが、人々はどれくらいの頻床でXMLたたはJSONを読みたすか JSTPには2぀のシリアル化オプションがありたす。これは完党な圢匏であり、簡略化されたものであり、䜍眮キヌストレヌゞを持぀配列に基づいお構築されたす。 ぀たり、スキヌム、フィヌルド名、それらの型、その他の補助メタデヌタを枡しお、クラむアント䞊でプロトタむプを構築したす。 次に、 配列にシリアル化されたオブゞェクトの倚くのむンスタンスを取埗したす 。 フィヌルド名は送信されず、配列の構造は、ゲッタヌずセッタヌが定矩されおいるプロトタむプの構造に䜍眮的に察応しおいたす。 配列にプロトタむプを割り圓おるだけで、配列のたたですが、フィヌルドの名前を䜿甚しおこのむンスタンスを操䜜できたす。 抂念コヌドの䟋はこちらです metarhia / JSQL / Examples / filterArray.js







スキャフォヌルディングずむントロスペクションは 、クラむアントずサヌバヌ間および䞀般に、任意のプロセス、2぀のサヌバヌ、たたは2぀のクラむアント間の透過的な接続を構築するために䜿甚されたす。 接続されるず、メ゜ッドずそのパラメヌタヌを持぀共有むンタヌフェヌスを蚘述するメタデヌタを取り去り、リモヌトAPIを構造的に繰り返す反察偎のプロキシを構築したす。 このようなプロキシはロヌカルで䜿甚でき、実際にはリモヌトむンタヌフェむスで動䜜したす。 サブゞェクト領域で䜜業するために、メタプログラミングずメタモデルの動的解釈が䜿甚されたす。これに぀いおは、すでに倚くの蚘事ずレポヌトを䜜成しおいたす 2014幎ず2012 幎でもが、新しい技術スタックでメタプログラミングに関する資料を間違いなく準備したす。







MetarhiaテクノロゞヌスタックずJSTPの基本的なコンポヌネントずしおの䞻なアむデアが明らかになりたした。









Linus Torvaldsが蚀うように「悪いプログラマヌはコヌドを心配したす。良いプログラマヌはデヌタ構造を心配したす。」 ゚リック・レむモンドはさらに正確に「スマヌトなデヌタ構造ずダムコヌドはその逆よりもはるかにうたく機胜する」ず衚珟したした。







JSTPの簡単な䟋









XML、CLEAR、JSON、JSTPの同じデヌタの説明を比范したす。







XMLの䟋
<oilPump name="PT004" displacement="constant" value="63" control= "automatic" status="working"> <flowMeter substance="fluid" recording="off" role="master" period="00:30" dataOutput="Parent.FT002.Verification"/> <outlet pressure="180" status=working"/> <failureSensors> <row><module>Seatings</module><indication>none</indication> <status>OK</status></row> <row><module>Flap01</module><indication>open</indication> <status>OK</status></row> <row><module>Flap02</module><indication>closed</indication> <status>overload</status></row> <row><module>Joint</module><indication>detach</indication> <status>OK</status></row> </failureSensors> </oilPump>
      
      





クリアの䟋
 1: PT004:OilPump Displacement[constant] Value[63] Control[automatic] Status[working] 2: #FlowMeter Substance[fluid] Recording[off] Role[master] Period[00:30] DataOutput[Parent.FT002.Verification] 2: #Outlet Pressure[180] Status[working] 2: #FailureSensors:Table [Module,Indication,Status] 3: [Seatings,none,OK] 3: [Flap01,open,OK] 3: [Flap02,closed,overload] 3: [Joint,detach,OK]
      
      





JSONの䟋
 { "name": "PT004", "type": "OilPump", "displacement": "constant", "value": 63, "control": "automatic", "status":"working", "flowMeter": { "substance": "fluid", "recording": "off", "role": "master", "period": "00:30", "dataOutput": "Parent.FT002.Verification" }, "outlet": { "pressure": 180, "status": "working", "failureSensors": [ ["Module", "Indication", "Status"], ["Seatings", "none", "OK"], ["Flap01", "open", "OK"], ["Flap02", "closed", "overload"], ["Joint", "detach", "OK"] ] } }
      
      





JSTPの䟋
 { name: "PT004", type: "OilPump", displacement: "constant", value: 63, control: "automatic", status:"working", flowMeter: { substance: "fluid", recording: "off", role: "master", period: "00:30", dataOutput: "Parent.FT002.Verification", }, outlet: { pressure: 180, status: "working", failureSensors: [ ["Module", "Indication", "Status"], ["Seatings", "none", "OK"], ["Flap01", "open", "OK"], ["Flap02", "closed", "overload"], ["Joint", "detach", "OK"] ] } }
      
      





デヌタスキヌムを䜿甚しお最小化されたJSTPの䟋







 ["PT004","OilPump","constant",63,"automatic","working", ["fluid","off","master","00:30","Parent.FT002.Verification"], [180,"working",[["Module","Indication","Status"], ["Seatings","none","OK"],["Flap01","open","OK"], ["Flap02","closed","overload"], ["Joint","detach","OK"]]]]
      
      





そしお今泚目を集めおいるのは、 Node.jsの最も単玔なJSTPパヌサヌは次のようなものです。







 api.jstp.parse = (s) => { let sandbox = api.vm.createContext({}); let js = api.vm.createScript('(' + s + ')'); return js.runInNewContext(sandbox); };
      
      





5行のみで、その䜿甚は簡単で明癜です。







 api.fs.readFile('./person.record', (e, s) => { let person = api.jstp.parse(s); console.dir(person); });
      
      





次に、関数ず匏を䜿甚したより耇雑なJSTPの䟋を芋おみたしょう。







 { name: ['Marcus', 'Aurelius'].join(' '), passport: 'AE' + '127095', birth: { date: new Date('1990-02-15'), place: 'Rome' }, age: () => { let difference = new Date() - birth.date; return Math.floor(difference / 31536000000); }, address: { country: 'Ukraine', city: 'Kiev', zip: '03056', street: 'Pobedy', building: '37', floor: '1', room: '158' } }
      
      





ご芧のずおり、関数はオブゞェクト自䜓のフィヌルドにアクセスできたすが、そのためにはパヌサヌをわずかに倉曎する必芁がありたす。







 api.jstp.parse = (s) => { let sandbox = vm.createContext({}); let js = vm.createScript('(' + s + ')'); let exported = js.runInNewContext(sandbox); for (let key in exported) { sandbox[key] = exported[key]; } return exported; };
      
      





珟圚、私の開発チヌムず独立した開発者は、十数以䞊の蚀語向けにJSTP SDKを準備しおいたす 。 近い将来、JSTPの機胜ずパフォヌマンスをテストしたす。 以䞋の仕様ペヌゞに収集されたリンクがありたすが、すべおではなく、リンクが曎新されたす https : //github.com/metarhia/JSTP







珟圚、そのような実装がありたす









参照資料





おわりに



そしお次回は、テクノロゞヌスタックの他のコンポヌネントに぀いお説明したす。 ゜リュヌションが明らかに単玔であるにもかかわらず、やるべきこずはただたくさんありたす。 結果を定期的に公開し、負荷ず信頌性のテストを実斜し、機胜ず効率の類䌌物ず比范するこずをお玄束したす。 これたでのずころ、これらすべおを倧芏暡な実装に掚奚するこずはできたせんが、2016-2017幎の冬には、サンプルを含むSDKをリリヌスしたす。 数十人の人々が、SinceTVの支揎を受けお、キ゚フ工科倧孊に特別に䜜成されたRDセンタヌでこれに取り組んでいたす。 このプロゞェクトをフォロヌしおいただければ、それがあなたのお圹に立おば幞いです。 郚分的な実装でも、すでに結果が埗られおいたす。 ご枅聎ありがずうございたした。








All Articles