Visual Studio Code(以下、VS Code)の開発者であるMatt Bierner氏が7月20日、公式ブログの記事「Shrinking VS Code with name mangling」において、同ツールのソースコードのサイズ削減に向けた取り組みを紹介した。VS Codeチームは最近、名前マングリングの手法を用いることで、同梱されるJavaScriptコードのサイズを全体の20%に上る約3.9MB削減することに成功したという。

  • VS Codeに付属するworkbench.jsのコードサイズの変遷 引用:Visual Studio Code Blog

    VS Codeに付属するworkbench.jsのコードサイズの変遷 引用:Visual Studio Code Blog

名前マングリングは、コンパイラや処理系が、関数名や変数名などのシンボルを別の固有の名前にエンコードする手法。もともとはシンボルに対して名前以外の固有の情報を付加して修飾する手法だが、コード本体の実装に影響を与えずにシンボルのみを変更することから、難読化やコード圧縮の手法として用いられることもある。

Bierner氏によると、VS Codeではすでにビルドツールのesbuildなどを利用して簡単なコードサイズの最適化は継続的に行われていたという。しかし、最適化されたコードを精査した結果、esbuildによる自動的な名前マングリングは安全性を最重視したものであり、変更が安全だと確信できない要素が少しでもある場合は実施されないことが分かった。

esbuildでは、プライベートプロパティに対しても保守的な扱いをしていることが分かったという。「_」で始まる変数名は慣例的にプライベートプロパティであることを表すため、削除しても全体に影響しないことが明らかだが、esbuildはこれらのプライベートプロパティも安全のために残す選択をしていた。

VS Codeチームは、TypeScriptを利用してマングリングされたコードを検証する手法を考案した。これによって、esbuildよりも積極的なマングリングを安全に実施することが可能になり、大幅なコードサイズの削減に成功した。

ファイルサイズにするとわずか3.9MBだが、これによってダウンロードサイズが削減できるだけでなく、JavaScriptの実行時間も短縮することが可能になる。コードベースに大規模な変更を加えることなくそれを実現したという点を考慮すれば、非常に大きな成果と言えるだろう。