国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

ホームページ ウェブフロントエンド jsチュートリアル モジュール式の Edge Side には、JavaScript Compute 用のコンポーネントが含まれています

モジュール式の Edge Side には、JavaScript Compute 用のコンポーネントが含まれています

Dec 20, 2024 am 03:13 AM

A modular Edge Side Includes component for JavaScript Compute

2022 年の夏、私のチームメイトの Kailan は Fastly Compute 用の Rust クレートに取り組み、Edge Side include (ESI) テンプレート言語(yǔ)のサブセットを?qū)g裝し、次のブログ投稿を公開(kāi)しました。それ。この記事が重要だったのは、私たちが便利なライブラリをリリースしたというだけではなく、コンピューティングがもたらすもの、つまりモジュラー機(jī)能を備えたプログラマブル エッジを見(jiàn)事に示したものだったからです。そして、JavaScript が Compute で一般的に利用可能になってから 1 年以上が経過(guò)したため、JavaScript ユーザー向けに同様のソリューションを用意する時(shí)期が來(lái)ました。 Fastly の JavaScript 用 ESI ライブラリは npm で利用できるようになり、アプリケーションに強(qiáng)力な ESI 処理を追加できます。


プログラマビリティとモジュール性

Fastly の CDN は、ほぼ 10 年にわたり、HTML ソース內(nèi)の特別なタグを解釈することで機(jī)能するテンプレート言語(yǔ)である Edge Side include (ESI) をサポートしてきました。これはタグ を中心に展開(kāi)し、エッジ サーバーに別のドキュメントをフェッチしてストリームにインライン化するよう指示します。

index.html

<body>
<esi:include src="./header.html" />
<main>
Content
</main>
</body>

header.html

<header>Welcome to the web site</header>

出力


<header>Welcome to the web site</header>
Content

コンピューティングが登場(chǎng)すると、エッジの狀況は主にプログラマビリティとモジュール性の 2 つの點(diǎn)で変化しました。

Rust のプラットフォーム サポートが安定してからすぐに、ESI を?qū)g裝し、プログラマビリティを追加した Rust 用のクレートを公開(kāi)しました。コードを使用して、追加のバックエンド要求を構(gòu)築する方法と、応答フラグメントを処理する方法を構(gòu)成できるようになりました。バックエンド サーバーから発信されていないドキュメントに対して ESI 処理を?qū)g行することもできます。このプログラマビリティにより、提供する機(jī)能の固定セットに限定されていた VCL の ESI サポートとは區(qū)別されました。

同時(shí)に、このアプローチは高度にモジュール化されており、プログラマはこの ESI 処理をリクエストごとに実行する選択肢と、互換性のあるデータ型で動(dòng)作する他のモジュールと処理を組み合わせて適用するオプションを提供しました。任意の順序および/または指定された論理?xiàng)l件でそれらを?qū)g行します。

次のターゲット: JavaScript

Rust リリースと同様に、この JavaScript ライブラリをプログラム可能にする必要がありました。 Fastly の JavaScript サポートには、Fetch API とその付屬の Streams API が常に組み込まれています。 Streams API の便利な機(jī)能の 1 つは TransformStream インターフェイスです。これにより、ESI に最適な変換を適用するためにオブジェクトを介してデータを「パイプ」することができます。 ESI プロセッサを TransformStream の実裝として実裝することで、JavaScript で書(shū)かれた Fastly Compute アプリケーションに ESI プロセッサを適合させることができました。

ストリーミング方法は次のとおりです:

<body>
<esi:include src="./header.html" />
<main>
Content
</main>
</body>

EsiTransformStream と呼ばれる変換はストリームに直接適用され、メモリとパフォーマンスの問(wèn)題が軽減されます。これは次のことを意味します:

  • 変換を適用する前にアップストリーム応答全體をバッファーする必要はありません。
  • トランスフォーマーは、アップストリームの応答をできるだけ早く消費(fèi)し、ストリームに表示される ESI タグを処理します。トランスフォーマーが各 ESI タグの処理を完了すると、結(jié)果はすぐに下流にリリースされるため、最小限のバッファーを保持できます。これにより、クライアントは、ストリーミングされた結(jié)果が完全に処理されるまで待つことなく、準(zhǔn)備が整ったときにその最初のバイトを受信できるようになります。

さらに、この設(shè)計(jì)はモジュール式であるため、EsiTransformStream は他のものと一緒に使用できる?yún)gなるツールになります。たとえば、圧縮などの他の変換を応答に適用したい場(chǎng)合、応答は完全に標(biāo)準(zhǔn)のインターフェイスであるため、これらの変換ストリームをいくつでもパイプ処理できます。 必要に応じて、リクエスト ヘッダー、パス、レスポンス コンテンツ タイプなどによって、特定のリクエストまたはレスポンスのみに対して ESI を條件付きで有効にすることもできます。

EsiTransformStream をインスタンス化する方法は次のとおりです。

<header>Welcome to the web site</header>

コンストラクターは URL と Headers オブジェクトを受け取り、オプションでいくつかのオプションを 3 番目のパラメーターとして受け取ります。前述したように、ESI の主な機(jī)能は、追加のテンプレートをダウンロードして、結(jié)果のストリームに含めることです。 に遭遇しました。タグは、テンプレートを取得するための基礎(chǔ)となるメカニズムとしてフェッチを使用します。これらのパラメーターの主な目的は、フェッチ呼び出しを構(gòu)成することです。

  • URL は、 の src 內(nèi)の相対パスを解決するために使用されます。タグ。
  • ヘッダーは、テンプレートを取得するための追加リクエストを行うときに使用されます。
  • オプションの構(gòu)成オブジェクトを使用すると、行われたフェッチの動(dòng)作をオーバーライドしたり、フェッチされたテンプレートの処理方法やカスタム エラー処理などの他のカスタム動(dòng)作を適用したりできます。

最も単純なケースでは、構(gòu)成オブジェクトのフェッチ値のみを使用します。これを指定しない場(chǎng)合は、代わりにグローバル フェッチ関數(shù)が使用されますが、Compute では、テンプレートを含めるときにフェッチに使用するバックエンドを指定する必要があります (動(dòng)的バックエンド機(jī)能を使用している場(chǎng)合を除く)。上のサンプル スニペットは、グローバル フェッチを呼び出す前に、origin_0 という名前のバックエンドを割り當(dāng)てます。

それだけです!この簡(jiǎn)単なセットアップにより、バックエンドで ESI タグを処理し、コンピューティング アプリケーションで ESI タグを処理することができます。実行できる完全な例は次のとおりです:

fiddle.fastly.dev

ESI機(jī)能のサポート

この実裝では、これまでに利用可能にした他の機(jī)能よりも多くの ESI 機(jī)能が提供されます。

エラー処理

によって參照されるファイルが存在する場(chǎng)合があります。タグが存在しないか、サーバー エラーが発生するため、タグの取得に失敗する可能性があります。このような場(chǎng)合、屬性 onerror="Continue" を追加することでエラーを無(wú)視できます。

<body>
<esi:include src="./header.html" />
<main>
Content
</main>
</body>

/templates/header.html でエラーが発生した場(chǎng)合、ESI プロセッサはエラーを無(wú)視し、 全體を置き換えます??栅挝淖至肖蚝啷骏?。

を使用することで、より構(gòu)造化されたエラー処理を使用することもできます。ブロックは次のようになります:

<header>Welcome to the web site</header>

ESI プロセッサは最初に の內(nèi)容を?qū)g行します。 esi:include タグによってエラーが発生した場(chǎng)合、ESI プロセッサは の內(nèi)容を?qū)g行します。

全體がブロックは の全體に置き換えられます。成功した場(chǎng)合はブロック、または エラーがある場(chǎng)合。上記の例では、/templates/header.html でエラーが発生すると、テキスト "Main header" も出力に表示されなくなります。 「代替ヘッダー」 というテキストのみが含まれます。詳細(xì)については、ESI 言語(yǔ)仕様を參照してください。

條件文

ESI では、変數(shù)に対して実行時(shí)チェックを?qū)g行することにより、條件付き実行も可能です。以下はそのようなチェックの例です:


<header>Welcome to the web site</header>
Content

プロセッサが に遭遇したとき。ブロックでは、 を通じて実行されます。ブロックをテストし、テスト屬性に設(shè)定された式をチェックします。プロセッサは、式が true と評(píng)価される最初の esi:when ブロックを?qū)g行します。どの式も true と評(píng)価されない場(chǎng)合は、esi:otherwise ブロックが指定されている場(chǎng)合は、オプションでそれを?qū)g行します。 全體ブロックは、 のいずれか全體で置き換えられます。または 実行するブロック。

プロセッサは、主にリクエスト Cookie に基づく、限られた変數(shù)セットを利用可能にします。上の例では、「group」という名前の HTTP Cookie の値がチェックされます。私たちの実裝は ESI 言語(yǔ)仕様に基づいています。詳細(xì)については、それを參照してください。

サポートされているタグと機(jī)能のリスト

この実裝は、ESI 言語(yǔ)仕様の次のタグをサポートします。

  • esi:include
  • esi:コメント
  • esi:削除
  • esi:try / esi:attempt / esi:以外
  • esi:選択 / esi:いつ / esi:それ以外
  • esi:vars

タグは仕様でオプションとして定義されており、この実裝には含まれていません。

ESI 変數(shù)は ESI タグの屬性でサポートされ、ESI 式は の test 屬性でサポートされます。さらに、コメントがサポートされています。

カスタム動(dòng)作は無(wú)限の可能性を意味します

この機(jī)能セットだけでも十分興奮できますが、プログラム可能であることの本當(dāng)にエキサイティングな部分は、さらに多くのことが可能になることです。 ESI の主な用途はテンプレートの導(dǎo)入ですが、ESI でできることはそれだけではありません。以下に例を示します。

文書(shū)內(nèi)にマークアップされたタイムスタンプがあり、表示時(shí)に相対日付として表示したいとします (「2 日前」など)。これを行う方法はたくさんありますが、パフォーマンスとメモリへの影響を最大限に高めるには、ストリーム內(nèi)で検索/置換を?qū)g行するのが最適です。この ESI ライブラリのプログラミングは、実際にこれを行うための優(yōu)れたオプションとして使用できます。

次のような形式で特別に作成された ESI タグを使用して、バックエンド ドキュメントでエンコードされるタイムスタンプを定義できます。

<body>
<esi:include src="./header.html" />
<main>
Content
</main>
</body>

たとえば、次のスニペットは太平洋時(shí)間の 2024 年 1 月 1 日の午前 0 時(shí)を表すことができます。

<header>Welcome to the web site</header>

次に、その URL パターンを検出したときに合成置換ドキュメントを提供するように EsiTransformStream を設(shè)定します。


<header>Welcome to the web site</header>
Content

プロセッサが上記のサンプル スニペットに遭遇すると、次のような結(jié)果が出力されます (実行する日數(shù)に応じて異なります)。

const transformedBody = resp.body.pipeThrough(esiTransformStream);

return new Response(
  transformedBody,
  {
    status: resp.status,
    headers: resp.headers,
  },
);

バックエンド ドキュメントは Fastly によってキャッシュ可能であるため、処理では更新された相対時(shí)間を表示し続けながら、今後のリクエストはキャッシュ ヒットの恩恵を受けることができます。

この実際の例については、次のフィドルを參照してください。

fiddle.fastly.dev

試してみてください!

@fastly/esi が npm で利用できるようになり、あらゆる JavaScript プログラムに追加できるようになりました。もちろん、Fastly Compute プログラムのエッジで使用しますが、実際には、環(huán)境がフェッチ API をサポートしている限り、Compute の外部でも機(jī)能します。完全なソース コードは GitHub で入手できます。

Fastly アカウントを作成する前であっても、上記の Fiddle のいずれかを複製し、獨(dú)自のオリジンでテストすることから始めます。弊社のグローバル ネットワークでサービスを公開(kāi)する準(zhǔn)備ができたら、Compute の無(wú)料トライアルにサインアップして、npm の ESI ライブラリをすぐに使い始めることができます。

コンピューティングを使用すると、エッジはプログラム可能かつモジュール式になります。最適なソリューションを選択して組み合わせたり、獨(dú)自のソリューションを構(gòu)築したりすることもできます。 Compute 用にこのようなモジュールを提供できるのは當(dāng)社だけではありません。誰(shuí)もがエコシステムに貢獻(xiàn)し、そこから得ることができます。そしていつものように、Fastly コミュニティ フォーラムでお會(huì)いして、あなたが何を構(gòu)築しているのか教えてください!

以上がモジュール式の Edge Side には、JavaScript Compute 用のコンポーネントが含まれていますの詳細(xì)內(nèi)容です。詳細(xì)については、PHP 中國(guó)語(yǔ) Web サイトの他の関連記事を參照してください。

このウェブサイトの聲明
この記事の內(nèi)容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰屬します。このサイトは、それに相當(dāng)する法的責(zé)任を負(fù)いません。盜作または侵害の疑いのあるコンテンツを見(jiàn)つけた場(chǎng)合は、admin@php.cn までご連絡(luò)ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫(huà)像を無(wú)料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード寫(xiě)真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

寫(xiě)真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類(lèi)リムーバー

Video Face Swap

Video Face Swap

完全無(wú)料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡(jiǎn)単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無(wú)料のコードエディター

SublimeText3 中國(guó)語(yǔ)版

SublimeText3 中國(guó)語(yǔ)版

中國(guó)語(yǔ)版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強(qiáng)力な PHP 統(tǒng)合開(kāi)発環(huán)境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開(kāi)発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Java vs. JavaScript:混亂を解消します Java vs. JavaScript:混亂を解消します Jun 20, 2025 am 12:27 AM

JavaとJavaScriptは異なるプログラミング言語(yǔ)であり、それぞれ異なるアプリケーションシナリオに適しています。 Javaは大規(guī)模なエンタープライズおよびモバイルアプリケーション開(kāi)発に使用されますが、JavaScriptは主にWebページ開(kāi)発に使用されます。

JavaScriptコメント:短い説明 JavaScriptコメント:短い説明 Jun 19, 2025 am 12:40 AM

JavaScriptcommentsEareEssentialential-formaining、およびGuidingCodeexecution.1)single-linecommentseared forquickexplanations.2)多LinecommentsexplaincomplexlogiCorprovidededocumentation.3)clarifyspartsofcode.bestpractic

JSで日付と時(shí)間を操作する方法は? JSで日付と時(shí)間を操作する方法は? Jul 01, 2025 am 01:27 AM

JavaScriptで日付と時(shí)間を処理する場(chǎng)合は、次の點(diǎn)に注意する必要があります。1。日付オブジェクトを作成するには多くの方法があります。 ISO形式の文字列を使用して、互換性を確保することをお?jiǎng)幛幛筏蓼埂?2。時(shí)間情報(bào)を取得および設(shè)定して、メソッドを設(shè)定でき、月は0から始まることに注意してください。 3.手動(dòng)でのフォーマット日付には文字列が必要であり、サードパーティライブラリも使用できます。 4.ルクソンなどのタイムゾーンをサポートするライブラリを使用することをお?jiǎng)幛幛筏蓼埂¥长欷椁沃匾圣荪ぅ螗趣蛄?xí)得すると、一般的な間違いを効果的に回避できます。

JavaScript vs. Java:開(kāi)発者向けの包括的な比較 JavaScript vs. Java:開(kāi)発者向けの包括的な比較 Jun 20, 2025 am 12:21 AM

javascriptispreferredforwebdevelopment、whilejavaisbetterforlge-scalebackendsystemsandroidapps.1)javascriptexcelsininintingtivewebexperiences withitsdynAmicnature anddommanipulation.2)javaofferstruntypyping-dobject-reientedpeatures

なぜの下部にタグを配置する必要があるのですか? なぜの下部にタグを配置する必要があるのですか? Jul 02, 2025 am 01:22 AM

PLACSTHETTHETTHE BOTTOMOFABLOGPOSTORWEBPAGESERVESPAGESPORCICALPURPOSESESFORSEO、userexperience、andDesign.1.IthelpswithiobyAllowingseNStoAccessKeysword-relevanttagwithtagwithtagwithtagwithemaincontent.2.iTimrovesexperiencebyepingepintepepinedeeping

JavaScript:効率的なコーディングのためのデータ型の調(diào)査 JavaScript:効率的なコーディングのためのデータ型の調(diào)査 Jun 20, 2025 am 12:46 AM

javascripthassevenfundamentaldatypes:number、string、boolean、undefined、null、object、andsymbol.1)numberseadouble-precisionformat、有用であるため、有用性の高いものであるため、but-for-loating-pointarithmetic.2)ストリングリムムット、使用率が有用であること

DOMでのイベントの泡立ちとキャプチャとは何ですか? DOMでのイベントの泡立ちとキャプチャとは何ですか? Jul 02, 2025 am 01:19 AM

イベントキャプチャとバブルは、DOMのイベント伝播の2つの段階です。キャプチャは最上層からターゲット要素までであり、バブルはターゲット要素から上層までです。 1.イベントキャプチャは、AddEventListenerのUseCaptureパラメーターをTrueに設(shè)定することにより実裝されます。 2。イベントバブルはデフォルトの動(dòng)作であり、UseCaptureはfalseに設(shè)定されているか、省略されます。 3。イベントの伝播を使用して、イベントの伝播を防ぐことができます。 4.イベントバブルは、動(dòng)的なコンテンツ処理効率を改善するためにイベント委任をサポートします。 5.キャプチャを使用して、ロギングやエラー処理など、事前にイベントを傍受できます。これらの2つのフェーズを理解することは、タイミングとJavaScriptがユーザー操作にどのように反応するかを正確に制御するのに役立ちます。

JavaとJavaScriptの違いは何ですか? JavaとJavaScriptの違いは何ですか? Jun 17, 2025 am 09:17 AM

JavaとJavaScriptは、異なるプログラミング言語(yǔ)です。 1.Javaは、エンタープライズアプリケーションや大規(guī)模なシステムに適した、靜的に型付けされ、コンパイルされた言語(yǔ)です。 2。JavaScriptは動(dòng)的なタイプと解釈された言語(yǔ)であり、主にWebインタラクションとフロントエンド開(kāi)発に使用されます。

See all articles