Cloudflare、Mozilla、Facebook、Bloomberg のエンジニア
テスト用
BinaryAST はすでに利用可能です
JavaScript を処理する場合、コードの読み込みと解析のフェーズにかなりの時間がかかります。 多くの人気サイトでダウンロードされる JavaScript の量が 10 MB 近くであることを考慮すると (たとえば、LinkedIn - 7.2 MB、Facebook - 7.1 MB、Gmail - 3.9 MB)、JavaScript の初期処理で大幅な遅延が発生します。 コードのロード時に AST をオンザフライで完全に構築できないため、ブラウザ側の解析ステージも遅くなります (ブラウザは、関数の終わりなど、コード ブロックのロードが完了するまで待機して、データを取得する必要があります)現在の要素を解析するには情報が不足しています)。
彼らは、コードを最小化および圧縮した形式で配布し、ブラウザによって生成されたバイトコードをキャッシュすることによって、問題を部分的に解決しようとしています。 最近のサイトではコードが頻繁に更新されるため、キャッシュでは問題が部分的にしか解決されません。 WebAssembly は解決策になる可能性がありますが、コードに明示的に入力する必要があり、既存の JavaScript コードの処理の高速化にはあまり適していません。
もう XNUMX つのオプションは、JavaScript スクリプトの代わりに既製のコンパイル済みバイトコードを提供することですが、サードパーティのバイトコードは検証が難しく、その直接処理は Web の階層化につながる可能性があり、追加のセキュリティ リスクが発生し、また、ユニバーサルバイトコード形式が必要です。
BinaryAST を使用すると、新しいバイトコードを作成したり JavaScript 言語を変更したりせずに、現在のコード開発および配信モデルに適合させることができます。 BinaryAST 形式のデータのサイズは、圧縮されて縮小された JavaScript コードに匹敵し、ソース テキストの解析フェーズが不要になるため、処理速度が大幅に向上します。 さらに、この形式では、BinaryAST がロードされるときに、すべてのデータが完了するのを待たずにバイトコードにコンパイルできます。 さらに、サーバー側で解析すると、返された BinaryAST 表現から未使用の関数や不要なコードを除外できます。これにより、ブラウザ側で解析すると、不要なトラフィックの解析と送信の両方で時間が無駄になります。
BinaryAST の機能は、元のバージョンとまったく同じではないが、意味的に同等であり、同じ名前の変数と関数を含む、読み取り可能な JavaScript を復元する機能でもあります (BinaryAST は名前を保存しますが、ファイル内の位置に関する情報は保存しません)。コード、フォーマット、コメントなど)。 コインの裏返しとして、新しい攻撃ベクトルの出現がありますが、開発者によれば、それらはバイトコード配布などの代替手段を使用する場合よりもはるかに小さく、制御しやすいとのことです。
facebook.com コードのテストでは、JavaScript の解析が CPU リソースの 10 ~ 15% を消費し、解析にはバイトコードの生成や JIT の初期コード生成よりも時間がかかることがわかりました。 SpiderMonkey エンジンでは、AST を完全に構築するのに 500 ~ 800 ミリ秒かかりますが、BinaryAST の使用により、この数値が 70 ~ 90% 削減されました。
一般に、ほとんどの Web Fireworks では、BinaryAST を使用すると、最適化なしのモードでは JavaScript の解析時間が 3 ~ 10% 短縮され、未使用の関数を無視するモードが有効な場合は 90 ~ 97% 短縮されます。
1.2 MB の JavaScript テスト セットを実行する場合、BinaryAST を使用すると、デスクトップ システム (Intel i338) では起動時間が 314 ミリ秒から 7 ミリ秒に、モバイル デバイス (HTC One M2019) では 1455 ミリ秒から 8 ミリ秒に高速化できました。
出所: オープンネット.ru