Changes between Version 1 and Version 2 of Introducing SquirrelFish Extreme.ja
- Timestamp:
- Sep 19, 2008, 7:34:50 AM (16 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
Introducing SquirrelFish Extreme.ja
v1 v2 1 This page is a Japanese translation of the post on Surfin' Safari blog 2 "Introducing SquirrelFish Extreme". 3 4 ---- 1 [[PageOutline]] 5 2 6 3 = この文書について = … … 10 7 * 推敲歓迎: 誤訳, タイポ, 訳語の不統一, そのほか... 11 8 12 = SquirrelFish Extreme の紹介=9 = SquirrelFish Extreme を紹介します = 13 10 14 11 ちょうど三ヶ月前、私達は SquirrelFish を発表しました。 … … 36 33 出て一年も経たない Safari 3.0 の 10 倍も高速です。 37 34 私達はこうした改善を大変嬉しく思います。 38 しかしこの先の更なる改善 も確信しています。35 しかしこの先の更なる改善を確信してもいます。 39 36 40 37 かなりの数の人々がこの成果に貢献してくれました。 41 38 以下では重要な仕事をした何人かに言及しますが、 42 JavaScript や性能の面で協力してくれた WebKit のコントリビュータ皆に39 JavaScript や性能の面で協力してくれた WebKit コントリビュータの皆に 43 40 感謝したいと思います。 44 41 … … 58 55 59 56 私たちがやったことの一つは、オプコード内での最適化です。 60 JavaScript の操作 にその多くに高い多態性があります。61 様々な場合に によって様々に振舞いを変えるのです。57 JavaScript の操作はその多くが高い多態性を持ちます。 58 様々な場合に応じ様々に振舞いを変えるのです。 62 59 単に一番よくある、最速の場合を先にチェックするだけで、 63 60 JavaScript のプログラムはかなり高速化できるのです。 … … 74 71 他の JavaScript エンジンで採用され良い効き目を出しています。 75 72 76 基本的な考え 型はこうです: 言語設計の上では、JavaScript は極めて動的あ言語です。77 しかし大半のプログラムでは、実際のところ多くのオブジェクトが 78 オブジェクト指向のクラスのよう にもう少し構造のある使われ型をしています。79 たとえば、多くの JavaScript ライブラリは 「x]と「y」というプロパティ のある80 オブジェクトを使う作りになっています。このオブジェクト他のプロパティを持たず、73 基本的な考え方はこうです: 言語設計の上では、JavaScript は極めて動的な言語です。 74 しかし大半のプログラムでは、実際のところ多くのオブジェクトが、 75 オブジェクト指向のクラスのような、もう少し構造のある使われ方をしています。 76 たとえば、多くの JavaScript ライブラリは 「x]と「y」というプロパティをもつオブジェクトを 77 使う作りになっています。このオブジェクト他のプロパティを持たず、 81 78 点を表現するのに使われます。多くのオブジェクトが同じ構造に基いているなら、 82 79 こうした知識を最適化に使うことができます。 … … 84 81 85 82 では、どうやってインチキをすればいいのでしょうか? 86 私達はオブジェクトが同じ構造を持つこと... 順序の同じプロパティがあること...を検出します。83 私達はオブジェクトが同じ構造を持つこと...同じ順序で同じ名前のプロパティがあること...を検出します。 87 84 そしてオブジェクトに構造の識別子 StrucureID を割り付けます。 88 85 プロパティアクセスがおこると、初回はまず普通に(超高速のハッシュテーブルを使い)ハッシュ検索をします。 89 86 そしてプロパティをみつけた場所に StructureID とオフセット値を記録しておきます。 90 87 それ以降のアクセスでは StructureID の一致をチェックします - 91 ふつう同じコード片は同じ構造を持つオブジェクト相手に使われるもの なのです。88 ふつう同じコード片は同じ構造を持つオブジェクト相手に使われるものです。 92 89 チェックに成功したらキャッシュしておいたオフセットを使い、わずか数命令で検索を行うことができます。 93 90 これはハッシュ検索よりずっと高速です。 … … 100 97 101 98 私達の施したインラインキャッシュは、まだはじめの一歩です。 102 更なる高速のためにこのテクニックを改善するアイデアが沢山あります 。99 更なる高速のためにこのテクニックを改善するアイデアが沢山ありますな。 103 100 とはいえ、プロパティアクセスがボトルネックであるような性能テストでは、 104 現状で お劇的な改善を見ることができるでしょう。101 現状でも劇的な改善を見ることができるでしょう。 105 102 106 103 == 3. コンテクトスレッド JIT == … … 118 115 バイトコードを 1 オプコード毎にネイティブコードに変換するというものです。 119 116 複雑なオプコードは言語のランタイムに対する関数呼びだしになります。 120 単純なオプコードや、複雑なオプコードのうち高速に実行できるパスは 121 ネイティブコード列へ直接差し込まれます。まず、オプコード間の制御フローは 122 直線的なコードとなって CPU に差し出されます。したがってディスパッチのオーバーヘッドはなくなります。 117 単純なオプコードや、複雑なオプコードのうち高速に実行できるパスは、 118 ネイティブコード列へ直接差し込まれます。 119 まずオプコード間の制御フローは 120 直線的なコードとなって CPU に差し出されます。 121 したがってディスパッチのオーバーヘッドはなくなります。 123 122 次にもともとオプコードの間にあった多くの分岐はインライン化されます。 124 123 これは CPU の分岐予測器にとって大変予測しやすいコードになるのです。 … … 128 127 ここ数週間でそれをチューニングし性能を磨きあげるのには、何人もが手を貸しています。 129 128 130 私達の 計量 JIT がもつ優れた点の一つは、ネイティブコードの生成に129 私達の軽量 JIT がもつ優れた点の一つは、ネイティブコードの生成に 131 130 わずか 4000 行のコードしか使っていないところです。 132 131 コードの他の部分はクロスプラットフォームのままです。 … … 158 157 一年前、テストに占める正規表現の割合はとても小さなものでした。 159 158 そして各 JS エンジンは正規表現以外の改善を大いに進めました。 160 たとえば個々の SunSpider のテストひとつのの結果 はJavaScriptCore より 5 から 10 倍高速で、159 たとえば個々の SunSpider のテストひとつのの結果が JavaScriptCore より 5 から 10 倍高速で、 161 160 Safari 3.0 版の WebKit より 70 倍速いなんてものもありました。 162 161 しかし今日まで、正規表現の性能はほとんど改善されてこなかったのです。 … … 215 214 216 215 追記2: 217 私達のちいさなマスコットに不満の 型は、下の SquirrelFish をクリックすると216 私達のちいさなマスコットに不満の方は、下の SquirrelFish をクリックすると 218 217 WebKit ナイトリーの SVG アニメーションサポートを見ることができます。 219 218