Appleが「Safari Technology Preview」をスタートした。最新、というより"カッティング・エッジ"のSafariと付き合うこのプロダクトを、連載の場を借りてレビューしてみよう。

WebKitブラウザとの違い

この「Safari Technology Preview」は、一般ユーザが利用できる形にまとめたSafariの開発途上版(以下、Preview版)。最新のWebテクノロジーと新機能を取り込むだけでなく、独立したブラウザとして開発者やパワーユーザに提供することで、より多くのフィードバックを得ようという目的だ。

従来もWebKitプロジェクトが独立動作可能なブラウザを提供してきたが(通称「WebKitブラウザ」)、このPreview版は「Safariとしての機能」を備えている。具体的には、リーディングリストや共有リスト、iCloudタブといったiCloudとの連携機能を利用できるところが、WebKitブラウザとの大きな違いだ。

Mac App Store経由でのアップデートに対応し、最新の状態で継続利用できることもポイント。間隔は数週間と、毎夜更新(Nightly Build)されるWebKitに比べればカッティング・エッジ感はやや乏しいが、動作の安定度はより高い。ただし、メニューや環境設定パネルは多言語対応が未完で表示は英語のみとなる。

Safari通常版(左)とPreview版(右)のAbout画面。アイコンの色が異なる

独立したアプリケーションとして動作するため、並行して起動しておき切り替えることも可能だ

アクセス履歴は、通常版Safariと分けて管理される。正確には、初回起動時に通常版のものがインポートされ、その後Preview版で閲覧したURLが通常版とは別に蓄積されるという流れだ。なお、iCloudを有効にしている場合、ブックマークはまったく同じでつねに同期された状態となる。

iOSデバイスとの連携だが、iCloudタブやリーディングリスト、共有リストといったiCloudを利用する連携サービスは変わらず動作する。操作時点で表示しているタブを直接開くことができる「ハンドオフ」は、Universal Linksの仕様によるものか、OS X(Preview版)からiOSデバイスへの引き継ぎはできるものの反対はできないため、正式版Safariを完全に代替するには至らない。

メニューや環境設定パネルは多言語対応していないため英語のみの表示となる

初回の起動以降、アクセス履歴は通常版と分けて管理される

見どころはJITコンパイラの新バックエンド「B3」

Preview版の技術的な見どころは、やはり「B3」こと「Bare Bones Backend」だろう。これまでJavaScript Coreでは、C++ベースのJITコンパイラ「FTL JIT」のバックエンドとしてLLVMを採用していたが、Cライクな言語で開発されたB3に置き換えられた。LLVMと同等以上の最適化性能を有しながらも、コンパイル時間を大幅に短縮したところがポイントだ。

WebKit開発チームの公式ブログには、WebKit/r195946でJavaScriptベンチマーク「JetStream」を実行、B3とLLVMのコンパイル時間を比較したグラフが掲載されている。それによれば、B3がLLVMより約4.7倍高速という結果が出ている。

この「B3」を試せる環境は、現在のところOS Xのみだ。前出の公式ブログによれば、ARM64環境でもすべてのテストはパスしているものの、パフォーマンス最適化にはいましばらく時間がかかるそう。B3への移行が完了したあとは、FTL JITからLLVMのコードを取り除くとのことだ。

MacBook Air(11-inch、Mid 2013)/OS X El Capitan 10.11.4でPreview版と通常版それぞれを起動し、JetStreamをテストした結果は下表に示すとおり。特にスループット(単位時間あたりの処理性能/データ転送速度)が大幅に改善されており、コンパイル時間の短縮がプラスに作用していることがうかがえる。

Webアプリのパフォーマンス差を検証すべくiCloud.comのWEBサイトへアクセスしてみたところ、アプリの起動やデータの読み込みにやや軽快さが増したようにも思える。JetStreamにおけるレイテンシ改善幅はともかくとして、スループット改善の効果が現れているのだろうか。

テストはCore i5 1.3GHz搭載のMacBook Airというローパワーなマシンを利用したが、WebKitプロジェクトの公式ブログによれば、Mac Proなどハイパワーマシンに比べてB3のメリットを受けやすいらしい。最適化されていない(遅い)コードを実行するたびに時間を費やし、メモリアクセスに悪影響をおよぼし、ときにはメインスレッドと同じCPUコアでJITコンパイラのスレッドが実行されてしまうため、ハイパワー機ではメリットが薄まるのだという。Preview版を試す場合は、旧型機を利用してみよう。

JavaScriptベンチマーク「JetStream」のテスト結果
Preview版(v9.1.1) 通常版(v9.1)
Latency 96.309 89.454
Throughput 204.64 173.64
Geometric Mean 147.33 130.05

JetStreamのベンチマーク結果(左:通常版、右:Preview版)