諸事情ありまして、今回は一部内容を変更したうえで再掲載しお届けします。記事の主旨はほとんど変わりませんので、どうかご了承ください。

さて、今回は「Safari」について。現行バージョンの3.0.4は、Mac OS X 10.4.11とともに11月中旬にリリース (その後リリースされたLeopardのSafariもバージョンは同じ)、オープンソースモデルで開発が進められる「WebKit」の最新版との機能差も拡がっている。そこで今回は、WebKitの最新ビルド (WebKit-SVN-r30053) を利用し、次バージョンのSafariを想像しようという主旨で話を進めてみたい。

次のSafariはこうなる!

WebKitの最新ビルドから次のSafariを想像する

SafariのエンジンであるWebKitは、オープンソースモデルということもあり休むことなく改良および機能の追加が行われている。すべてが次のSafariに採用されるかどうかは不明だが、これまでの流れからいっても、確度は高い。

第1の注目箇所は、パフォーマンスの改善。後述するが、JavaScriptの処理系に大きな影響を与える変更が加えられているので、(Webサイトによっては)体感できるほどの速度差を確認できる。ベンチマークの結果を見ても、性能の違いは明らかだ。この点については、後ほど詳しく説明する。

ダウンローダブルフォントのサポートも、大きな変更点の1つ。CSS2の@font-face規則に対応、Webサイト上にあるTrueTypeなどのスケーラブルフォントを直接レンダリングできるようになった。この技術が普及すれば、特定の環境にしかないフォントを画像化する作業(わざわざMS明朝を画像化しているサイト、ありますよね?)が不要になるだけに、特にWebデザイナーには注目の機能といえる。

以下の画像は、Safari 3.0.4とWebKit最新ビルドを利用し、こちらのWebサイトにあるサンプルでダウンローダブルフォントが機能するかどうか試した結果だ。画像を見れば、WebKit最新ビルドではダウンローダブルフォントを問題なく表示できているが、Safari 3.0.4はローカルのフォントに置換されてしまい期待の表示を得られないことがわかるはず。

ダウンローダブルフォントを試したところ、Safari 3.0.4(左)は×、WebKitの最新ビルド(右)は○だった

HTML5のクライアントサイドストレージ機能

現行のHTMLは、World Wide Web Consortium(W3C)によりバージョン4.0が勧告されたのが1997年12月、仕様変更されたのが1998年4月。「HTML5」はその後継規格であり、先月下旬にW3Cが草案を公開、2010年に正式なW3C勧告の仕様となる見込みだ。

もっとも、HTML5はこれから開発が始まるわけではなく、一部の機能は実装が始まっている。HTML5のベースとなる仕様は、多くのWebブラウザベンダー / コミュニティが参加する任意団体「WHATWG」によりある程度まで策定されていたため、すでに実装が進んでいる機能もあるのだ。開発中のWebKitにも、そのHTML5関連の新機能が一部取り入れられている。

その1つが、ブラウザー側でSQLを使いデータを蓄積 / 検索する「クライアントサイドストレージ機能」。WebKitの最新開発動向を伝えるブログ「Surfin' Safari」では、昨年10月に実装が報告されていた機能で、WebKitの最新ビルドにも反映されている。

この機能を利用したデモが、WebKitのサイトに用意されている。[New Note]ボタンをクリックするたびにスティッキーズ風のウィジェットがウインドウ内に現れ、自由にメモを入力できるというものだが、内容はデータベースに保管され、次回同じサイトにアクセスしたとき再び表示される。単なるテキストエディタ以外にも、いろいろ応用できそうな機能といえる。

スティッキーズに書き込んだ内容は、次回アクセスしたとき自動的に表示される

JavaScriptが速い!

次バージョンのSafariにも採用されるであろうWebKit最新ビルドの目玉機能は、JavaScriptのパフォーマンス向上。これは昨年12月にSurfin' Safariで発表されていたgetElementsByClassName関数(クラス名を元にエレメントを取得するための関数)のネイティブ実装を含めた、JavaScript処理系の高速化によるものだ。

その証拠が、JavaScriptベンチマーク「SunSpider」のスコア。結果は下表のとおりで、WebKit最新ビルドのほうがダブルスコア以上の差をつけて高速、ということがわかる。

ちなみにそのgetElementsByClassName関数、従来はprptotype.jsなどのライブラリを使用するかプログラマが自力で対処してきたが、扱うエレメント数が増えると動作が重くなるという問題を抱えていた。Webアプリケーションで高頻度に使用される関数なだけに、手放しで喜んでいいだろう。

表: SunSpider 0.9の結果 (MacBook Pro 2.33GHz / 2GB RAM / OS X 10.5.1で確認。単位はms)

Safari 3.0.4 WebKit r30053
3d 1263.6 402.0
access 1821.6 496.0
bitops 1619.8 466.8
controlflow 210.2 92.2
crypto 742.6 237.8
date 478.0 278.2
math 1122.8 467.8
regexp 347.4 199.0
string 1255.0 655.2
TOTAL 8861.0 3295.0

SunSpider 0.9の結果をグラフ化したもの