最後に、JavaScriptはshadowrealmsで成熟している


JavaScriptはJavaScriptの非常に明るい未来を定義する3つのユニークな機能を最近来ている.そして、ここで私はそれらの1つについて話します- shadowrealms.
将来のJavaScriptは以下のようになっています:
  • JavaScriptのパイプライン演算子
  • レコードとタプル
  • shadowrealms
    しかし、私は後で第1と第2の特徴を議論するかもしれません.たぶん次のブログシリーズで.
  • では、シャドウ領域が何であるかを理解しましょう.JavaScriptが最終的に必要な成熟した環境になっているようです.

    shadowrelamsとは


    ShadowRealmはJavaScriptの別の驚くべき機能であり、これは業界のすべてのJavaScript開発者の心を爆破する.ShadowRealmは、JavaScriptコードファイルを実行できる独立したグローバルコンテキストを作成するのに役立ちます.
    だから、今あなたはshadowrealmとは何かを理解している.では、ShadowRealmがどのように動作するかを理解していきましょう.
    ( ShadowRealmのサポート)
    ShadowRealmは、フェーズ3の開発にあるJavaScriptの新たな概念の一つです.その結果、NODEJSのような多くのブラウザまたはネイティブのサーバー側の言語はshadowrealmsをサポートしません.さらに、安定したバベルやNPMのプラグインは、長年にわたって多くの変更のために機能をポリフィルにはありません.
    shadowrealmがフェーズ3に達したので、私は来たるべき日により多くの修正を見たくないです.また、いくつかの時点でShadowRealmにネイティブサポートを期待しています.
    shadowrealmsの機能
    エーShadowRealm 基本的には、他の領域からコードを分離するユニークなグローバルオブジェクトを使用して、まったく新しい環境を作成する手法です.JavaScriptでは、私がグローバルなオブジェクトについて話すならば、それはウインドウまたはGlobalthisの概念についてです.
    ShadowRealmの主な目的は、多くのコードベース間の衝突を排除し、分離して実行する必要のあるコードを実行するための安全な環境を作成することです.それは、我々が他のコードベースまたはパッケージからグローバルなオブジェクトのより少ない汚染を観察することができることを意味します.結果として、ShadowRealmのコードは、異なる領域で他のオブジェクトと転送または相互作用することができません.
    シャドウ領域の使用例
    JavaScriptのように、ShadowRealmsは同じスレッドで実行します.そこで、JavaScriptをマルチスレッド化するためにWebワーカーズを使う必要があります.その結果、私たちは労働者と従来のJavaScriptファイルの両方でshadowrealmを見つけることができます.shadownrealmsも他のshadowrealmsの中に存在することができます.
    メインホームページと対話するコードエディターにユーザーと対話する必要はありません.
    我々は自分で実行できるプラグインが必要です.
    異なる環境でDOMをエミュレートするたとえば、特定の領域のスクロール位置を調べる必要がある場合は、shadowrealmをエミュレートできます.これは、メインのWebページ上のユーザーのスクロールは、ウィンドウに影響を与えないことを意味します.我々のエミュレーションのトップ変数.

    JavaScriptでshadowrealmをつくる方法?


    今こそAとして働く時間ですJavaScript developer を参照してください.
    まず最初に、新しいshadowrealmインスタンスを呼び出しなければなりません.それから私たちの領域にいくつかのJSをインポートします.そして、そのためには、import value関数を使用しています.この関数はimport関数として有効に動作します.
    let myRealm = new ShadowRealm(); 
    
    let myFunction = await myRealm.importValue('./function-script.js', 'analyseFiles'); 
    // Now we can execute our function within our ShadowRealm 
    let fileAnalysis = myFunctions();
    
    上の例で分かるように、エクスポート名AnalyseFilesは関数スクリプトからインポートしているものです.jsこのエクスポートをキャプチャし、MyFunctionで保存されます.重要なことに、我々が我々のドメインに加える輸出はcallableでなければなりません.
    機能スクリプト.JSファイルは、標準のJavaScriptファイルをエクスポートしています.
    これは次のようになります.
    export function analyseFiles() 
    { 
        console.log('Hello, Developer!'); 
    }
    
    ShadowRealmは、ウィンドウやGlobalthisなどの他のグローバルオブジェクトとは独立して存在します.
    他のインポートと同じ方法で、Curlyブラケットのインポート表記を使用できます.
    let myRealm = new ShadowRealm(); 
    
    const { runFunction, testFunction, createFunction } = await myRealm.importValue('./function-script.js'); 
    
    let fileAnalysis = runFunction();
    
    ImportValueを使用したい場合は、配列に変換する多数の約束を構築できます.
    let myRealm = new ShadowRealm(); 
    
    const [ runFunction, testFunction, createFunction ] = await Promise.all([ 
    
        myRealm.importValue('./file-one.js', 'runFunction'), 
    
        myRealm.importValue('./file-two.js', 'testFunction'), 
    
        myRealm.importValue('./file-three.js', 'createFunction'), 
    
    ]); 
    
    let fileAnalysis = runFunction();
    
    ShadowReomsで評価するコードを実行する方法
    我々は、同じファイルから別のものではなく、ShadowRealmでコードを直接実行する必要がある場合、評価メソッドを使用してJavaScriptのシャドウ領域に文字列を実行することができます.これはeval ()と同様です.
    let myRealm = new ShadowRealm(); 
    myRealm.evaluate(`console.log(‘Hello, Developer!')`);
    
    ShadowRealmのインポート値は
    import valueの値は約束を返します.この関数は、then ()を確実に利用し、出力関数を使って何かを行うようにします.
    次のシナリオを考えます.
    window.myVariable = 'Hello, Developer!'; 
    let myRealm = new ShadowRealm(); 
    
    myRealm.importValue('someFile.js', 'createFunction').then((createFunction) => { 
    
       // Do something with createFunction(); 
    })
    
    また、somefileで宣言されたグローバル変数にアクセスするためにこのテクニックを使用することもできます.js
    私たちがsomefileを変えたと想像しましょう.JSのようなものです.
    globalThis.name = "fjolt"; 
    export function returnGlobals(property) 
    { 
      return globalThis[property]; 
    }
    
    今、我々の当時の機能では、我々は価値を得ることができましたglobalThis.name:
    window.myVariable = 'Hello, Developer!'; 
    let myRealm = new ShadowRealm();
    
    myRealm.importValue('someFile.js', 'returnGlobals').then((returnGlobals) => { 
    
        // Do something with returnGlobals(); 
    
        console.log(returnGlobals("name")); // Returns fjolt 
        console.log(window.myVariable); // Returns undefined 
    })
    

    JavaScriptは成熟しているか


    今日,iframeはweb環境を分離する最も一般的な方法である.iframeについて話している間、それらは扱いにくくて、不便です.一方、ShadowRealmはより効率的で、既存のCodeBaseと統合しやすく、Webワーカーなどの最新のJavaScriptテクノロジと互換性があります.
    ShadowRealmsは、コードベースの残りの部分と対話しないコード実行のための個別の領域を提供するユニークな値命題のため、JavaScript開発のための標準となるでしょう.
    彼らは、コードベース干渉の他のセクションについて心配することなく彼らの内容をエクスポートするためにパッケージとモジュールの役に立つメカニズムになることができました.
    その結果、将来見ることになる.それまで、ハッピーコーディングとより多くの技術駆動コンテンツのこのスペースを見続ける.