Mac OS Xのもっさり感を解消するチューニングまとめ

1年前に手に入れたMacBook Pro(OS 10.5.6、メモリ4G)ですが、最近やけに動作がもっさりしてきました。特にpallarelsとアプリを少し多めに立ち上げると遅くなったまま。アプリの切り替えもままならなくて、最後は強制終了するしかない、ってことが多々ありました。

このままだと「Macって使えないじゃん」という話になりかねません。そこで、Webに落ちているチューニング方法の中から特に効果がありそうなものを実行してみました。結果、体感速度が相当改善し快適になり「Mac最高ですね」という状態に戻れました。特にアプリの切り替えがさくさく行えます。もっさり感でお困りの方は(自己責任で)お試し下さいませ。

(1)AppleJack
ディスクの修復などいろいろメンテナンスしてくれます。詳細はt0moriBlog 究極のメンテソフト? AppleJack

  1. AppleJack 1.5をダウンロードしてインストール
  2. 再起動して、起動時に「コマンド+S」で「シングルユーザーモード(ターミナルのような画面)」に入る
  3. 「autojack AUTO」と入力してenter。10分ほど待ちます。

(2)スワップファイルを抑制
404 Blog Not Found Mac OS X Leopard - dynamic_pager を骨抜きにを使ってスワップファイルを64Mに押さえるようにします。
物理メモリがたくさんないと逆効果かもしれません。

(3)noatimeを設定してファイルアクセス時の最終アクセス時間を書き込まないようにする
blog@browncat.org Macの動作が遅くなる。スワップとかnoatimeとかをいじってみた

「/etc/rc.local」に以下を書き込みます。再起動が必要です。

#!/bin/sh
 
mount -u -o noatime /

(4)Libera Memoryの導入

メモリの解放ソフトLibera Memoryを使って、「ちょっと遅いな=物理メモリ使いきりそう」というタイミングでメモリを解放します。Libera Memoryなら10秒ほどでメモリが解放されるので気軽に利用することができます。

特に(2)が効果が高かったのではないかと思われます。他にも良いチューニング方法がありましたら、ぜひ教えてください。

追記その1:しばらく使ってみましたが、物理メモリを全て消費するとほとんど何もできなくなる現象が発生しています。メモリに余裕があるうちは快適なんですが。。。
追記その2:「(4)Libera Memoryの導入」を追記。気をつければ「追記その1」の現象はほとんど起きなくなりました。この状況でしばらく利用してみます。

Flash Text Engineでボールドとか斜体とか

試してみました。

FTEでフォントを指定する際は以前のFlashで使用してたFontクラスではなくFontDescriptionクラスを使用します。FontDescriptionのコンストラクタやプロパティで「fontPosture」「fontWeight」を指定することで、ボールドや斜体を指定できます。

ボールドや斜体が適用されるかどうかはフォントやプラットフォームによって挙動が異なりました。

  • Windows:MSゴシックやメイリオをはじめほとんどのフォントでボールドや斜体が有効でした。
  • Mac OSX:Osaka、ヒラギノなどほとんどの日本語フォントでボールドや斜体が無効です。メイリオは有効でした。Arialなど基本的な欧文フォントはボールドや斜体が有効でした。

Mac版はもしかするとFTEのバグかもしれません。欧文圏ではあまり問題ないと思いますが、FTEで日本語を扱う場合、Mac対応をどうするか?が問題になりそうです。


フォントのプレビューは以下のコードで確認しました。

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
        layout="vertical"
        verticalAlign="top"
        backgroundColor="white"
        >

<mx:Script>
  <![CDATA[
    import mx.events.ListEvent;
    import mx.controls.Alert;
    import flash.text.engine.FontWeight;
    import flash.text.engine.FontPosture;
    import flash.text.engine.TextBlock;
    import flash.text.engine.TextLine;
    import flash.text.engine.TextElement;
    import flash.text.engine.FontDescription;
    import flash.text.engine.ElementFormat;

function updateSampleFont(event:mx.events.ListEvent ):void {
  try {
   updateTextLine(normalFont, comboBox.selectedItem.fontName, FontPosture.NORMAL, FontWeight.NORMAL, "Normal font ノーマルフォントです。");
   updateTextLine(boldFont, comboBox.selectedItem.fontName, FontPosture.NORMAL, FontWeight.BOLD, "Bold font ボールドフォントです。");
   updateTextLine(italicFont, comboBox.selectedItem.fontName, FontPosture.ITALIC, FontWeight.NORMAL, "Italic font イタリックフォントです。");
   updateTextLine(boldItalicFont, comboBox.selectedItem.fontName, FontPosture.ITALIC, FontWeight.BOLD, "Bold Italic font ボールドイタリックフォントです。");
  } catch (e) {
    Alert.show("" + e);
  }
}

function updateTextLine(parent:UIComponent, fontName:String, posture:String, weight:String, text:String):void {
    try {
      parent.removeChildAt(0);
    } catch (e) {
    }
    var font:FontDescription = new FontDescription(fontName, weight, posture);
    var format:ElementFormat = new ElementFormat(font);
    format.fontSize = 50;
    var str:String = text;
    var textElement:TextElement = new TextElement(str, format);
    var textBlock:TextBlock = new TextBlock();
    textBlock.content = textElement;
    var textLine:TextLine = textBlock.createTextLine(null, 600);
    textLine.rotation = 0;
    parent.addChild(textLine);
    textLine.x = 0;        
    textLine.y = 50;
}
  ]]>
</mx:Script>

    <mx:ArrayCollection id="arrColl"
            source="{Font.enumerateFonts(true)}">
        <mx:sort>
            <mx:Sort>
                <mx:fields>
                    <mx:SortField name="fontName" />
                </mx:fields>
            </mx:Sort>
        </mx:sort>
    </mx:ArrayCollection>

    <mx:List id="comboBox"
            dataProvider="{arrColl}"
            labelField="fontName"
            fontSize="20"
            rowCount="5"
            change="updateSampleFont(event)" width="400">
        <mx:itemRenderer>
            <mx:Component>
                <mx:Label fontFamily="{data.fontName}"
                        toolTip="{data.fontName}" />
            </mx:Component>
        </mx:itemRenderer>
    </mx:List>
    <mx:VBox>
      <mx:UIComponent id="normalFont" height="100"></mx:UIComponent>
      <mx:UIComponent id="boldFont" height="100"></mx:UIComponent>
      <mx:UIComponent id="italicFont" height="100"></mx:UIComponent>
      <mx:UIComponent id="boldItalicFont" height="100"></mx:UIComponent>
    </mx:VBox>
</mx:Application>