Drift Diary XV

Mavericks Safariを以前のサクサク軽快Safariに戻す方法

Posted by drikin on 2013年12月 8日 08:53

_SDI0117.jpg

出張初日から飛ばしすぎて連日鼻血は出るし、なんか既にスタミナが空な感じなんですが、ブログリハビリ中でようやく更新ペースが戻ってきたので勢いを落とさないように軽めのエントリー。(と思って書き始めたらむしろ長いエントリーになったw)

Screen Shot 2013-12-06 at 10.13.16 AM

一枚目の写真は本文には全く関係なくて、注目していただきたいのは↑の写真。

問題

不覚にも昨日まで気づかなかったんですが、気づいたらMavericksのSafari 7ってタブ毎にプロセスを生成するGoogle Chromeスタイルにアーキテクチャが変わってたんですね。

もともと、Safariが採用しているWebKitというエンジンはシングルプロセスモデルで、それだと1つのタブがクラッシュしただけでアプリ巻き込んでしまうのが安定性として問題ってことで、Google Chromeは独自にWebKitを拡張して、タブごとにプロセスを生成するモデルにいち早く切り替えました。本家WebKitもWebKit2を開発。Safari 5.1でようやくUIとレンダリングのプロセス切り離しに成功しました。Google Chromeとはアプローチは違うものの、タブがクラッシュしてもSafari自体は生き残れるようになったんですが、MavericksのSafari 7ではタブ毎にプロセスを立ち上げるまさにGoogle Chromeモデルに切り替えたんですね。

オリジナルのWebKit2のプロセスモデルとGoogle Chromeのプロセスモデルと、どっちにも長所短所があって、どちらが正しいとか断言するのは難しいんですが、個人的には旧WebKit2のぽプロセスモデルはバランスが良くて悪くないなと思ってたのでちょっと残念。

だって、タブ開くたびにものすごいメモリー消費していくんですよ。去年Google ChromeからSafariに戻った大きな理由の1つはChromeメモリ食い過ぎってことだったのに、Safariも同じ穴のムジナになっちゃったよ。

MacBook Pro RetinaになってからSafariのタブ開くのが妙に重くなったなぁとか思ってたんですが、MBPRの問題ではなくて、このアーキテクチャ変更が問題だったようです。

いくらMarvericksで圧縮メモリー機能を搭載して、実メモリの1.5倍程度はメモリーが有効に使えるようになったとはいえ、タブ毎に軽く100MBくらいメモリー取られると10タブで1GBですよ。さすがにちょっと富豪すぎ。

別にいまどきそうそうコンテンツがクラッシュする頻度も少なくなったし、仮にクラッシュして、全タブ巻き込んでリロードが走っても読み込みが早いので、むしろメモリーがクリーンになって良かったくらいに思ってたので、前のアーキテクチャのほうが好きだったなぁ。

もちろん将来的にもっともっとメモリーやCPUがリッチになっていけば、タブ毎にプロセス作るなんて無視できるコストになると思うけど、現状は明らかに重くなってるもん。

対策

ってことで、前置きが長くなりましたがここからが対策です。

上級マックユーザーにはおなじみだと思いますが、ターミナルを開いて↓のコマンドを実行して、一旦Safariを再起動すると、Safarino再起動後にデバッグメニューが出現します。

defaults write com.apple.Safari IncludeInternalDebugMenu 1

Screen Shot 2013-12-06 at 10.34.37 AM

↑このメニューの1つめにあるDisable Per-Tab Web Processesっていうメニューのチェックを有効にすると旧来のWebKit2プロセスモデルに戻すことができます。

これでキビキビ動くSafariが帰ってきました。

Screen Shot 2013-12-06 at 10.33.26 AM

実際に2枚目のスクリーンショットと同じタブを開いた状態でのメモリー使用量を測定してみると500MB弱に。

タブ毎にプロセスを立ち上げてた時はタブ毎のメモリー使用量の合計が軽く1GB超えてたので、メモリー使用量が半分以上削減した結果に!

ちなみに戻すときは

defaults write com.apple.Safari IncludeInternalDebugMenu 0

で内部デバッグメニューが非表示になります。ちなみに変えた設定は戻してから↑のコマンドを実行しないと、メニューが非表示になるだけです。

まとめ

ってことで、とりあえず個人的には一段落。新規タブの作成とかモッサリしたなと思ってた動作が以前のSafari並に快適になった気がします。少なくともメモリー使用量は確実に減ってるので、現状は多くの環境で恩恵があると思います。

前述したようにもっとハードウェアのリソースが潤沢になってくればタブ毎にプロセスを立ち上げるモデルのほうがメリットが強くなってくるし、新しい実装のほうが進化を続けていくのは当然のことなので、将来的にこのような設定は不要になるとは思いますが、「まだデフォルトで有効にしなくても良かったんじゃない?」という気もします。ちはいえここらへんの攻めっぷりはさすがにAppleクオリティーと納得w

しかしブラウザ業界もまだまだ落ち着かないですねぇ。来年はBlinkとかももっと本格化してきてまた荒れるのかなぁ。

このエントリーをはてなブックマークに追加
comments powered by Disqus