V8リリースV8

V8は、いくつかのバグを修正するだけでなく、間違いなく改善された性能をもたらした8.0バージョンをリリース。現在プレビューされ、公式バージョンは一緒にリリースされクローム80安定して数週間後になります。

パフォーマンスの改善

見てください、パフォーマンスの向上をメモリフットプリントを削減し、より速くを含め、:

ポインタの圧縮

V8は、すべてのものは、浮動小数点値、文字列、コンパイルされたコードおよびタグ値(タグ付き値)として、プロジェクト全体を含むヒープ、タグはV8又は小さな整数のスタックポインタ点を表し、開発チームは、これらのマーカーの値がヒープを占めることがわかっスペースのほとんど。

システム・ポインタと同じ大きさのタグ値は、32ビットアーキテクチャのために、32ビット幅は、64ビットアーキテクチャでは、64でした。32ビットおよび64ビットバージョンを比較すると、各ラベルの値に使用されるヒープメモリが2倍になります。

ポインタの圧縮:このリリースは、メモリという方法によって低減されます。高いためには、ヒープメモリの40%の平均を保存し、テストした後、低およびヒープメモリリソースにのみ低保存格納する必要から合成することができます。

メモリを削減しながら、通常、それは速度性能を犠牲にしますが、この改善した後、V8とゴミコレクターは、パフォーマンスを向上させるために、実際のウェブサイトを見ることができます。

内蔵高次最適化プログラム

このバージョンでは、ターボファンは、高次の制限のために最適化されたパイプラインは、組み込み関数を防止する最適化制約を排除します。

const charCodeAt = Function.prototype.call.bind(String.prototype.charCodeAt);

charCodeAt(string, 8);

charCodeAtターボファンコールは、一般的なコールにつながるは、ユーザ定義関数を生成し、完全に不透明です。この変更は、今識別することができます実際にはすべて、さらに組み込み関数に在庫ターボファンコールを向上させるために最適化され、その後、次のコードで同じ性能を得るトリガすることができますString.prototype.charCodeAt関数呼び出しを、構築されています。

string.charCodeAt(8);

JavaScriptを

JavaScriptは、ばらつきがあることを特徴と2つの新機能をもたらします:

オプションの連鎖

プロパティアクセスチェーンを書くとき、開発者は多くの場合、中央値が空(nullまたはundefined)であるかどうかを確認するために、これは非常に長い明示的なエラーチェックのチェーンを書くことができなければなりません。

// Error prone-version, could throw.
const nameLength = db.user.name.length;

// Less error-prone, but harder to read.
let nameLength;
if (db && db.user && db.user.name)
  nameLength = db.user.name.length;

Optional Chaining(?.)使开发者可以编写更可靠的属性访问链,以检查中间值是否为空。如果中间值是空值,则整个表达式的计算结果为 undefined。

// Still checks for errors and is much more readable.
const nameLength = db?.user?.name?.length;

同时,除了静态属性访问之外,Optional Chaining 还支持动态属性访问和调用。

null 合并(Nullish Coalescing)

另一个与 Optional Chaining 很接近的特性是 null 判断合并(Nullish Coalescing),由特定的 Nullish Coalescing 操作符 ?? 启用,它是一个新的短路二元运算符。

现在有时会使用逻辑 || 运算符处理默认值,例如:

function Component(props) {
  const enable = props.enabled || true;
  // …
}

运算 a || b,当 a 为非真时结果为 b,如果 props.enabled 本身显式设置为“false”,那么这样的运算还是会得到第二个运算数“true”,也就是 enable = true。

现在使用 null 合并运算符 ??,当 a 为空,也就是 null 或者 undefined 时,a ?? b 的运算结果为 b,否则为 a,这样的默认值处理行为才是符合逻辑的,弥补了前边讲到的问题。

function Component(props) {
  const enable = props.enabled ?? true;
  // …
}

同时,null 合并运算符和 Optional Chaining 是辅助功能,可以很好地协同工作。它们可以进一步处理上述示例中没有任何 props 参数传入的情况。

function Component(props) {
  const enable = props?.enabled ?? true;
  // …
}

此外,API 有一些变化,可以通过以下方式查看:

git log branch-heads/7.9..branch-heads/8.0 include/v8.h

更新说明:

https://v8.dev/blog/v8-release-80

おすすめ

転載: www.oschina.net/news/112197/v8-8-0-released