JavaScriptの違いとフロントエンド


TL機能がランタイムのために利用可能であるならば、Kangax' compat-table
それで、あなたはJavaScript経験の年を得ました、そして、現在、あなたはバックエンドでこれらの技術を使いたいです?大部分のJavaScriptベースのバックエンドがNode.jsを使用するので、あなたは幸運です、あなたはおそらくあなたのフロントエンドコードを束ねるのに用いられるツールから知っています.
しかし、たとえあなたがノードを使用したとしても.JS、多分それがもたらす違いを調べる良い考えです.Denoで、JSランタイムブロックに新しい子供もいます!
この記事では、バックエンド用のJavaScriptを書くとき、フロントエンドDEVSが期待する違いについて行きます.

ECMAScriptバージョン



最初の違いはJSランタイムのECMAScriptバージョンにあります.ECMAScriptはランタイムが必要とするJS機能を定義する標準です.ECMAScriptバージョンは後方互換性がありますが、EE 2019機能を持っているバージョンES 2015をサポートするランタイムを持つことはできません.
const z = x?.y ?? 10;
            ^

SyntaxError: Unexpected token '.'

The process here is as follows: A technical committee takes proposals for language features, they talk about it and refine it, and while that happens, the runtime creators implement the features to see if they work. If they are deemed suitable, they will be included in the next version of the standard.


フロントエンドでは、我々のクライアントのサポートするバージョンを見つけるために我々のサーバー上の統計情報を見なければならない.バックエンドでは、通常、私たちの実行時を選択する利点があります.
通常、あなたのランタイムによってサポートされているバージョンに“コンパイルダウン”することができますが、任意のツールなしで実行されるコードを書くのは素晴らしいです.ノードを見てください.JSのバージョン、およびそれがサポート機能をチェックします.
ここで重要な注意:ほとんどのランタイムは、ECMAScriptバージョンのすべての機能をサポートしていないので、ちょうどバージョンを見ていないが、機能.例えば、尾呼び出し最適化はES 2015機能です、しかし、それはSafariで支持されるだけです.それでも、他のブラウザは多くの他のES 2015機能をサポートします.
もちろん、これはすべてのruntime、deno、nodeについても同じです.JSと様々なブラウザ.

ブラウザAPI



次のポイントは、ランタイムのブラウザAPIサポートです.ECMAScriptバージョンはいくつかのAPIを定義しますが、それらのすべてではありません.最も明白な例はDOM APIです.非ブラウザのランタイムのようなノード.JSとDenoはDOMをサポートしていません.なぜなら、UIをレンダリングすることができないからです.
const y = window.decodeURI(x);
          ^

ReferenceError: window is not defined
ノードの違い.JSとDenoは、denoができるだけ多くのブラウザーAPIを使用しようとするということです.この違いは、HTTPパッケージをノードで使用する必要があることを意味します.JSはリクエストを送信しますが、DENOでfetch APIを直接使用できます.
DENOで利用可能なブラウザAPIのリストは、docsにあります.
ノードでサポートされているブラウザAPIのリストがある場合.さん、コメントしてください!

アクセス制御



ブラウザを使用する場合は、ブラウザAPIが何を許可するかに限られています.最近では、ハードウェアのアクセスを許可される前に、ユーザの多くが質問をします.HTTPネットワーク接続を使用することができますし、デフォルトで他のドメイン上のサーバーにアクセスすることはできません.全体的にブラウザは厳しい愛人です.
// Browser
document
  .getElementById(fileInputElementId)
  .addEventListener("change", ({target}) => {
    const [file] = target.files;
    const reader = new FileReader();
    reader.onload = processContent;
    reader.readAsText(file);
  });

// Node.js
fs.readFile("config.json", processContent);
バックエンドではアクセス制御が異なります.どんなハードウェアにでもアクセスできるパッケージが存在するか、またはそのようなパッケージを自分で実装することができます.あなたは、オペレーティングシステムの許可によって制限されます.あなたのサーバーとは異なるドメインにUDPを送信したいですか?いいえ問題!
まあ、少なくともそれはノードのためにtrueです.jsDENOはここで異なるルートになり、command line parameters経由でランタイムパーミッションを与える必要があります.ファイルを書くことを許可しない場合や、ファイルを書く必要があるパッケージを使うなら、denoはあなたに言います.

モジュールシステム



多くのブラウザベンダーは、ECMA委員会の助けを借りて、何年も後にモジュールシステムに最終的に落ち着いた.今JavaScript内の任意のハッキングなしでJavaScriptを読み込むことが可能です.すべての主要なブラウザーはES modulesをサポートします、そして、あなたがあなたのスクリプト・タグをtype="module"で定義するならば、あなたは離れてインポートすることができます.
// ES module import
import value from "library";

// CommonJS module import
const value = require("library");
バックエンドでは、主にノード用のものが異なります.JSは、それが承認される標準の年を待つことができなかったので.ノード.JSは独自のモジュールシステムを定義した.現在のノード.JSのバージョンは、実験的なESモジュールのサポートを持って、それは物事を安定させるためにしばらくかかりますし、すべてのCommonJSモジュールもあまりにも変換する必要があります.
DENOは非ブラウザJSランタイムへの新鮮なアプローチであるので、それはその問題を持っていませんでした.Denoは、ボックスのESモジュールをサポートし、ESモジュールJSファイルを指すURLをインポートすることができます、それがダウンロードされ、キャッシュされます.

庶民 概要


JavaScriptは他のどの言語よりもアクセス可能なスタック全体を作り、バックエンドを構築することは決して容易になりませんでした.
フロントエンドからバックエンドで使用できないパッケージを作ることができますが、これらのギャップは、新しいバージョンごとに小さくなっています.両方のノード.JSとDenoはますますブラウザのランタイムと収束しようとします.
Cloudflareのようないくつかの「サービスとしての機能」プロバイダも、彼ら自身の方法を行って、ものがより多くのブラウザーを感じさせるために、彼らのランタイムとして を支持します.