ホームページ  >  記事  >  ウェブフロントエンド  >  非同期が 10 倍高速になることに加えて、JavaScript は他に何をもたらしますか?

非同期が 10 倍高速になることに加えて、JavaScript は他に何をもたらしますか?

青灯夜游
青灯夜游転載
2020-06-28 13:51:082289ブラウズ

今日の JavaScript はユビキタスです。従来の方法で JavaScript を使用すると、開発者はさまざまな Web ブラウザで Web アプリケーションを作成できます。Node.js を通じて、コマンド ライン ツールやサーバー アプリケーションを開発できます。デスクトップの分野では、クロスプラットフォームです。デスクトップ アプリケーションは、JavaScript および HTML や CSS などの Web テクノロジに基づく Electron フレームワークを通じて構築でき、React Native を使用してクロスプラットフォームのモバイル アプリケーションを開発でき、さらに JavaScript は IoT デバイス上でも実行できます。

Ecma TC39 は、ECMAScript エコシステムの開発を管理します。これは、現在の JavaScript 言語の背後にある標準です。Google V8 チームは、JavaScript 関連の標準化作業に積極的に参加しています。

V8 は Google のオープン ソース JavaScript エンジン (WebAssembly エンジンでもあります) で、Chrome、Node.js、Electron などのプラットフォームはすべて V8 に基づいています。同時に、Chrome に加えて、Opera や次期 Microsoft Edge など、Chromium をベースとする一連の Web ブラウザも、最下位は V8 をベースとしています。

推奨学習: 「JavaScript ビデオ チュートリアル

数日前の Google I/O 2019 で、V8 チームの Mathias Bynens 氏とSathya Gunasekaran が JavaScript の最新の開発進捗状況を共有しました。

非同期が 10 倍高速になることに加えて、JavaScript は他に何をもたらしますか?
V8 チームは、最新の JavaScript と WebAssembly の高いパフォーマンスをリードすることが自分たちの使命であると述べています。共有者がパフォーマンスを説明するために「現実世界」を使用し、いわゆる「現実世界のパフォーマンス」は、純粋にベンチマーク データのためのパフォーマンスとは対照的です。Google は、達成したいのは、あまり「アウト」ではなく、現実の生活で実際に達成できる高いパフォーマンス効果であることを強調しています。 -世界の"。

彼らはいくつかの例を挙げました。 Chrome 61 以降、V8 チームは 生の JavaScript 解析速度 を 2 倍にしており、これらの数値は実際の Web サイトでテストされています。同時に、メインスレッドから解析およびコンパイル作業の 40% を削除することに成功し、Web ページの起動がよりスムーズになりました。

非同期が 10 倍高速になることに加えて、JavaScript は他に何をもたらしますか?

Chrome に加えて、Node.js にも速度の向上が明確に反映されています。Node.js 7 と比較して、Node.js 12 では async の速度が向上しています。 10 倍、Promise.all は 12 倍高速です。

非同期が 10 倍高速になることに加えて、JavaScript は他に何をもたらしますか?

解析速度と実行時のパフォーマンスの向上に加えて、メモリ使用量も削減されました。Chrome 70 から Chrome 76 では、実際の実行時の メモリ消費量は減少しました。 Android 上の Web アプリケーションが削減されました。20%

非同期が 10 倍高速になることに加えて、JavaScript は他に何をもたらしますか?

# 次に、講演者は JavaScript の新機能をいくつか共有し、多くの内容を取り上げました。ここでは、より興味深い機能のいくつかを簡単に紹介します。

# 方言の口語的な時間フレーズの表示を使用する API

これは、多くの新しい Intl.* API の 1 つであり、視聴者によってよく議論されている機能でもあります。 * は国際化機能を指します。

私たちが日常生活で時間を参照するとき、「先週」、「先月」、「42 秒前」と言います。新しい Intl.RelativeTimeFormat() 関数を使用すると、プログラムは特定の時間を使用できます。この言語は、「1 週間前」、「1 か月前」、「42 秒前」という単純な表現の代わりに、これらのフレーズを返します。

スピーカーはこの機能を英語とタミル語でデモンストレーションしました。その効果は次のとおりです:

非同期が 10 倍高速になることに加えて、JavaScript は他に何をもたらしますか?

現在この機能は次のとおりです。秒、分、時間、日、週、月、季節の​​フレーズ表現がサポートされており、複数の言語がサポートされているため (中国語サポートが利用可能かどうかは不明)、開発者は相対時間フレーズの専用リストを維持する必要がなくなりました。 非同期が 10 倍高速になることに加えて、JavaScript は他に何をもたらしますか?

globalThis

Node.js であろうと Web ブラウザであろうと、さまざまなプラットフォームに適した JavaScript を作成したい場合は、対応するコードが必要です。 Webブラウザなどのグローバルな「this」に適応させるには「window」を使って判断する必要がありますが、「window」が利用できない場合には「self」を使って確認する必要もあります。Nodeでは、 「グローバル」で判断しますが、独立したJavaScriptシェル環境の場合はまた状況が変わります。

環境要因は非常に複雑で、さまざまなプラットフォーム環境には複雑な適応プロセスが必要であり、開発者にとっては非常に苦痛となるため、V8 チームは「globalThis」機能を追加しました。環境に依存せず、グローバルな「これ」に簡単にアクセスできます。 非同期が 10 倍高速になることに加えて、JavaScript は他に何をもたらしますか?

現在、Chrome、FireFox、Safari、Node.js はすべてこの機能をサポートしています。また、「this」へのグローバル アクセスを必要とするポリフィルやその他のライブラリにも適用できます。この観点から、この機能は比較的大きな改善です。

WeakRef

通常、JavaScript におけるオブジェクト参照は、そのオブジェクトが参照されている限り、そのオブジェクトは GC にならないことを意味します。オブジェクトが参照されなくなると、オブジェクトがまだ参照された構造内にあるかどうかに関係なく、GC メカニズムはオブジェクトによって占有されているメモリを自動的に再利用します。

現在、JavaScript には WeakMap と WeakSet という 2 つの弱参照メソッドがあります。オブジェクトが WeakMap または WeakSet に追加されている限り、条件がトリガーされたときに GC はそのオブジェクトによって占有されているメモリをリサイクルできます。

WeakRef は、オブジェクトのライフサイクルへのウィンドウを提供するより高度な API であり、WeakMap がオブジェクト タイプをキーとしてのみサポートするシナリオを解決できます。

講演者はキャッシュされた画像を例に挙げましたが、Map は画像のキーと値をロックし、画像名と画像データは常に参照されるため GC されないようにします。一方、弱参照 WeakMap はここでは機能しません。これは、イメージ名が文字列型であり、WeakMap ではそのキーがオブジェクト型のみであると規定されているためです。

WeakRef は、画像オブジェクトを直接キャッシュすることでこの問題を解決します。画像名をキーとして使用し、WeakRef の弱参照を値としてキャッシュに保存します。しかし、これは別の問題を引き起こします。イメージ名が Key であるため、マップはこれらのイメージ名の文字列を保持したままになります。理想的には、これらの文字列も GC 処理されます。

非同期が 10 倍高速になることに加えて、JavaScript は他に何をもたらしますか?

WeakRef の解決策は、新しい API「FinalizationGroup()」を導入し、コールバック関数を登録し、GC 実行時に前述の「残差」をキャッシュから削除することです。トリガーされます。イメージ名文字列」。

非同期が 10 倍高速になることに加えて、JavaScript は他に何をもたらしますか?

これらの点に加えて、新しい JavaScript 言語機能には次のような機能も含まれています。

  • クラス フィールドを直接指定できます。クラス コンストラクターに変数を記述せずに変数を初期化します。

  • プライベート セッターとゲッター

  • String .matchAll は複数の通常の一致を実行できます

  • 数字の読みやすさを向上させ、数字を書くときに区切り文字として「_」を使用できるようになりました

  • 新しい大きな数値型 BigInt

  • いくつかの Intl.* API を新たに追加しました。つまり、国際化用に使用します。数値表示のローカライズされた書式設定用の Intl.NumberFormat、時間のローカライズされた表示用の Intl.RelativeTimeFormat() および Intl.DateTimeFormat() などの API

  • # トップ-level await、async を記述する必要はありません

  • 新しい Promise 関数 Promise.allSettled() および Promise.any()

具体的な内容については、スピーチのビデオをご覧ください:

https://www.youtube.com/watch?v=c0oy0vQKEZE

以上が非同期が 10 倍高速になることに加えて、JavaScript は他に何をもたらしますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はoschina.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。