Hatena::ブログ(Diary)

latest log このページをアンテナに追加 RSSフィード

2011-03-18

IE9 日本語版 非公式ダウンロード

追記: 2011-04-26 00:00 より日本語版が正式にリリースされるとのこと

Internet Explorer(R) 9 日本語版の提供日について

2011 年 4 月 6 日

 日本マイクロソフトは、このたびの震災に伴い、重要な通信インフラとなっているネットワーク回線への負荷軽減への配慮などから、 3 月 15 日(火)午後 1 時(日本時間)に予定されていた最新ブラウザInternet Explorer(R) 9 日本語版の製品版提供の延期をしておりましたが、このたび新たな提供日を 4 月 26 日(火)午前 0 時(日本時間)と決定しましたのでご案内申し上げます。なお、ネットワーク回線への負荷軽減のため、同日はダウンロード提供のみで、当初同日実施を予定していたベータ版・製品候補版ユーザー向けの自動更新については後日段階的に実施する予定です。

via We are sorry, the page you requested cannot be found


震災の影響で、IE9 日本語版の正式リリースは残念ながら延期されていますが、ファイルは既に存在するとのこと。

IE9 を入れると IE8 環境が無くなってしまいますが、IE8 互換モードで十分にカバーできるため、インストールできる人は躊躇せず入れてしまうべきです。

# 私は Windows7 32bit, 64bit, Windows Vista 32bit の計3台の環境を IE8 から IE9 にしました

# Vista Ready PC(3〜4年ものの非力なPC)でも、IE9 はちゃんとキビキビと動いてくれていました

IE9 が出たから、二つ前のバージョンの IE7IE6 にはお引き取り願わないとね!

IE9 はリリース後のわずか一日でブラウザシェアの0.8%をモギリ取ったようです(in 北米)

http://gs.statcounter.com/#browser_version-na-daily-20110315-20110316-bar

f:id:uupaa:20110318172820p:image

no title といい勝負なんではないでしょうか。

2011-02-11

IE9RC で document が const になり再定義が不可能になった

IE9RC の挙動を調べています。

IE9RC では @amachang さんの

/*@cc_on var doc = document; eval('var document = doc'); @*/

が封印されてる

http://twitter.com/#!/uupaa/status/35942322231320576

残念ながら、 @amachang さんの発案した方法がIE9で封印されてしまったようです。

IE9RC Release note http://msdn.microsoft.com/en-US/ie/ff468705.aspx

window.document が const になったため、再代入するとエラーになります。

http://jsdo.it/uupaa/Wq0w で試せます。

回避案

(function(document) {
  // ローカルスコープ
  doc.createElement("div");
})(document);

こんな感じにするといいかもしれません。ローカルスコープ内では document にアクセスすると、同じような効果が得られます。

ついでにナビ子記法の導入もおすすめです → http://handsout.jp/slide/1883

ナビ子記法のスライドに書いていない事

あまりメリットを書きすぎると胡散臭いだろうなと思い、スライドには書いてないことがあったりします。

ナビ子記法ならさらに高速化
var lib = {}:
(function(doc) {
  // スコープ内部
  lib.api1 = libapi1; // function
  lib.api2 = libapi2; // function
  lib.api3 = libapi3; // function
})(docuemnt);

スコープ内部では、 lib.api1() として関数を呼び出さずに libapi1() として呼び出すと lib.xxx() 呼び出しに伴うコスト(ドット演算子の名前解決コスト)をカットできます。

ナビ子記法なら、コード圧縮率も向上

さらにコードの圧縮時(Minify)に、lib.api1() といったコードは x.api1() と8文字以下には圧縮できませんが、libapi1() と記述していると x() や xx() のように3〜4文字に圧縮されます。

lib.api1() は圧縮しても、せいぜい x.api1() にしかならない
libapi1() を圧縮すると、 x() や xx() に圧縮される
ナビ子記法ならECMAScriptJScriptの解釈の違いも発生しなくなる

IE6IE8JScriptでは名前付きの匿名関数のスコープの扱いが ECMAScript-262 5th Edition や他のブラウザの実装とは異なるため、JScriptべったりなコードを書くとトラブルが発生する場合があります。

var fn = function fnName() {};

if (typeof fnName === "function") {
    alert( "maybe legacy JScript(IE6, IE7, IE8)" );
    if (fn !== fnName) {
        alert( "??" );
    }
} else {
    alert( "ECMAScript standard" );
}

IE6IE8 において typeof fn は "function" ですが、ECMAScript 準拠であれば typeof fn は "undefined" になります。


ナビ子記法は、一石七鳥ぐらいある気がするけど

あんまりメリットばかりPUSHすると胡散臭くなるから自重モード

おまけ

uupaa.js では、uu.ready からコールバックされた時の第二引数が document オブジェクトなので、

uu.ready(function(uu, doc) {
  alert( doc.documentMode );
});

最初からナビ子記法のメリットをおいしくいただけます。

おまけのおまけ

第一引数には uupaa.js のルートオブジェクト(uu)が渡されるのですが、これを uu ではなく $ で受け取ると、ちょっとしたデジャブ感を楽しむ事ができます。

uu.ready(function($, doc) {
  $(".hoge").click(function() {
    
  });
});

#ちょっとだけですが

2010-09-22

msgpack.js bench mark

MessagePackJavaScript 実装を GitHub に上げました。

テストは一通り終わっています(test/codec.htm)。ライセンスはまだ決めていませんがご利用はご自由にどうぞ。

HOW TO USE

var mix = { any: "type" };

// MessagePackフォーマットの ByteArray にエンコード
var ary = msgpack.pack(mix);   // null, Boolean, Number, String, Array, Hash を受け取り ByteArray に変換

// MessagePackフォーマットの ByteArray をデコード
var jsobj = msgpack.unpack(ary); // ByteArray を受け取り元の形に復元

// JavaScript オブジェクトを MessagePack フォーマットのバイナリデータに変換しアップロード
msgpack.upload("http://.../msg.pack", { data: mix }, function(data, option, resp) {
    if (resp.ok) {
        alert("uploaded");
    }
});

// サーバ上のMessagePackフォーマットのバイナリファイルをダウンロードし JavaScript オブジェクトにデコード
msgpack.download("http://.../msg.pack", {}, function(data, option, resp) {
    if (resp.ok) {
        alert("download");
        uu.puff(data);
    }
});

ベンチマーク

bench.htm - Load 10000 score

BrowserJSON.stringify + JSON.parsemsgpack.pack + msgpack.unpack
IE 8 140ms 1623ms
IE 9 beta 72ms 107ms
Firefox 3.6.10 70ms 354ms
Firefox 4.0 beta6 55ms 317ms
Opera 10.62 61ms 134ms
Google Chrome 6.0.472.62 beta 152ms 102ms
iPhone 3GS + iOS4.1 353ms 2540ms

IE8ではネイティブな JSON が圧倒的に高速でしたが、IE9βでは JIT のおかげでいい勝負になっています。

2010-09-05

IE8の開発者ツールのデバッグできなくなるバグをyoutubeに上げました

http://www.youtube.com/watch?v=OXzqRacGR18

# 残念ながら画質は iPhone → youtube 画質です

# 野外で取っているので、音声ぼそぼそでごめんなさい

IE8の開発者ツールが抱えたままの困ったバグ(古いjsが読み込まれ続ける, 同じファイルが多重ロードされブレークポイントが貼れない, 通常実行とステップ実行で結果が異なる)は、IE9pp4でも改善されてないみたいなんですよ。中の人が気づいてないとかありえないんだけど

via http://twitter.com/uupaa/status/23043362479

IE8 や IE9pp4 をインストールしたマシンで、

  • ローカルでファイルを修正する
  • デバッグのON/OFF を何度か行う
  • ページをリロードする

と発現します。

対処方法は、ブラウザの再起動です。

私の環境ではほぼ毎回この現象が発生するので「IE8の開発者ツールは一度かぎりの使い捨てのデバッガ。デバッグしてしまったらブラウザを再起動するもの」という認識です。

# 使い方が悪いのかもしれませんが

このバグにはIE8登場時から非常に困っていて、いつか修正されるものだと思っていたのですが、IE9ppでも一向に修正される気配がありません。

お願いですから、新機能実装にばかり目を向けないで、こういう開発者に対するケアやバグの修正にこそ力を注いでほしいのですが。

追記

ブレークポイントが上手く貼れなくなると、こういった表示もみられるようになります。ありえないアドレスですね。

f:id:uupaa:20100907185929p:image

2010-06-01