01 | 2009/02 |  03

  1. 無料サーバー

User forum-FC2BLOG-Info-Edit Template-Post-Edit-Upload-LogOut

CSSやJavascript自習の苦闘史を綴っていきたい。恐縮ですがJavascriptを有効にしてご覧ください。
2005年12月から社会問題も掲載!


jQueryに学ぶ Javascript の基礎(6) func.apply(obj , array) upon Ver1.3.2──jQuery解読(39)

このエントリイは、 jQueryに学ぶJavascriptの基礎(5) 論理演算子の使い方──jQuery解読(23) の続編です。(5)を書いたのが 2007/12/16 ですから、1 年以上間が空いてしまいました。その点からすれば「続編」と言うよりも「再開編」と言うべきかもしれません。

配列のメソッドである push() に apply() メソッドを適用する

apply() メソッドは Javascript 初心者には取っつきにくい関数です。それが別の関数を対象に適用され、しかも this キーワードが登場し、更に引数を配列で与えなければならない───このように約束事の多い仕様となっているためでしょう。

一般的に遭遇する fn.apply ( this, [ array ] ) という書式は、最初はなかなか理解しがたいものです。これは this.fn ( [array] ) とほぼ同意義なのだと説明されると、その場では分かったような気になりますが、半可通のママでは実際に使いこなすことは出来ません。

私もこの"主客転倒しているかのような" apply() メソッドには、ずっと悩まされ続けてきました。

そもそも apply()は「関数オブジェクトの組み込みメソッドであり、かつ特定の引数を取る」ことを理解すれば、決して複雑怪奇な関数ではないのですが、そのような理解に至るには時間が掛かるのではないでしょうか。(自省の弁)

さて、jQuery ではこのメソッドがあちこちで多用されています。

特に init() メソッドの return 値算出に setArray() メソッドが重要な役割を果たしていますが、この setArray() メソッドの実態は、組み込みクラスのプロトタイプメソッドである push() に適用された apply() メソッドに他なりません。

▲ToTop

対象オブジェクト obj に、配列 「 のような 」 プロパティを付与する

jQuery では push メソッドに apply メソッドを適用することによって、インスタンスオブジェクトに 「 配列のような (array like) 」 プロパティを与えています。そしてその array like なプロパティ値こそ、jQuery ( selector ) によって抽出されたところの、ユーザーが取得しようとしている DOM Elements に他なりません。

以下には今回の学習記録として、具体的な例によって apply() メソッドの効用を明らかにします。

まず、視認性を高めるために、オブジェクトのプロパティを抽出する以下のような汎用ユーティリティを作っておきます。

 // オブジェクトのプロパティ名とプロパティ値を一覧するための関数
 var getProp =function(obj){
    var ret=[];
    for (var prop in obj) ret.push(prop + " : " +obj[prop]);
     return ret.join() ;
 };
一般的な抽象オブジェクトを対象にした例

下の例 1 は、空のオブジェクト obj に push.apply(obj,[array]) を適用した場合です。適用後の obj は 名称が 0 から始まる連番プロパティと length プロパティによって構成され、length 値は第 2 引数の配列数となります。確かに配列のような プロパティが obj オブジェクトに付与されることが分かります。

 /*++++++ apply() 例 1 ++++++*/
 // 空オブジェクトを作成
 var obj={};
 // push 関数に apply(obj,[array])メソッドを適用する
 Array.prototype.push.apply(obj,["test",100,["test",500],400] );
 // 適用結果を一覧する
 getProp(obj) // 結果 "0 : test, 1 : 100, 2 : test,500, 3 : 400, length : 4"

例 2 は、 obj のプロパティ名に、push.apply(obj,[array]) で付与される array like なプロパティ名と重複する名称が既に存在する場合を検証してみました。この場合には obj プロパティが上書きされ、obj.length 値 は objプロパティの総数ではなく、push.apply() の第 2 引数である配列の要素数になることが分かります。

 /*++++++ apply() 例 2 ++++++*/
 // 空ではないオブジェクトを作成
 var obj={0:"test",1:"test1",2:"test2",3:"test3",4:"test4",5:"test5"};
 // このオブジェクトに push.apply(obj,[array]) メソッドを適用する
 Array.prototype.push.apply(obj,[100,200,300] );
 // 適用結果を一覧する
 getProp(obj) // 結果 "0 : 100, 1 : 200, 2 : 300, 3 : test3, 4 : test4, 5 : test5, length : 3"

例 3 は、obj のプロパティ名に 0 から始まる連番名がない場合の検証です。この場合には obj の既存プロパティは変化せず、第 2 引数 [array] の要素が array like なプロパティに姿を変えて追加されます。しかし、obj.length 値は obj プロパティの総数ではなく、あくまでも push.apply() の第 2 引数の配列の要素数となることが分かります。

 /*++++++ apply() 例 3 ++++++*/
 // 空ではないオブジェクトを作成
 var obj={"a":"test","b":"test1","c":"test2","d":"test3","e":"test4","f":"test5"};
 // このオブジェクトに push.apply(obj,[array]) メソッドを適用する
 Array.prototype.push.apply(obj,[100,200,300] );
 // 適用結果を一覧する
 getProp(obj) // 結果 "a : test, b : test1, c : test2, d : test3, e : test4, f : test5, 0 : 100, 1 : 200, 2 : 300, length : 3"

例 4 は、push.apply(obj,[array]) メソッド適用前に、obj.length を指定する意味について考えるために作成したものです。結論を言えば、array like なプロパティ名は obj.lenght で指定した値から始まる連番になります。しかしここでも、obj.length 値は obj プロパティの総数ではなく、あくまでも push.apply() の第 2 引数の配列の要素数となることが分かります。

 /*++++++ apply() 例 4 ++++++*/
 // 空ではないオブジェクトを作成
 var obj={"a":"test","b":"test1","c":"test2","d":"test3","e":"test4","f":"test5"};
 // 適用前にobj.length値を指定
 obj.length = 15;
 // obj オブジェクトに push.apply(obj,[array]) メソッドを適用する
 Array.prototype.push.apply(obj,[100,200,300] );
 // 適用結果を一覧する
 getProp(obj) // 結果 "a : test, b : test1, c : test2, d : test3, e : test4, f : test5, 15 : 100, 16 : 200, 17 : 300, length : 3"

以上から、Array.prototype.push(obj,[array])メソッドについて次のことが分かりました。

  • 同一プロパティ名は上書きされる。
  • obj に付加される array like なプロパティの名称は、前もって obj.length 値を指定した場合にはその値から始まる連番となる。(指定しない場合には obj.length = 0 を指定したことになる。)
  • obj.length 値はどのような場合であっても、obj の総プロパティ数には無関係に、第 2 引数で指定した配列の要素数となる。

▲ToTop

jQuery における push - apply 適用例(行数は Ver 1.3.2 による)

兎にも角にも setArray インスタンスメソッドにその端的な例を見ることが出来ます。

139: // Force the current matched set of elements to become
140: // the specified array of elements (destroying the stack in the process)
141: // You should use pushStack() in order to do this, but maintain the stack
142: setArray: function( elems ) {
143:  // Resetting the length to 0, then using the native Array push
144:  // is a super-fast way to populate an object with array-like properties
145:  this.length = 0;
146:  Array.prototype.push.apply( this, elems );
147:
148:  return this;
149: },

■コメント文を意訳すれば...
(ユーザー指定条件に)マッチした要素群を特別な配列に変換する。(スタックはその
過程で破棄されるので、スタックを活用するためには pushStack() メソッドを使わねば
ならない。 length を 0 に設定すれば、push メソッドを使って、超高速にオブジェクトを
配列のようなプロパティに変換することが出来る。

146 行の apply メソッド適用により、this すなわちインスタンスオブジェクトのプロパティに elems が配列のようなプロパティとして組み込まれることになります。

setArray() テスト

以上をより具体的に理解するために、Local 環境下に、<p> が 10 個存在する Web サイトを作成し、その中で jQuery ("p") .setArray ( ["a","b","c","d","e"] ) メソッドの適用結果を色々な形で求めてみました。

以下の出力結果は Firebug のコンソールに表示された内容です。
入力 : $("p").setArray(["a","b","c","d","e"]).get()
出力 : a,b,c,d,e
入力 : getProp( $("p").setArray( ["a","b","c","d","e"] ).get() )
出力 : "0 : a, 1 : b, 2 : c, 3 : d, 4 : e"
入力 : getProp( $("p").setArray(["a","b","c","d","e"]) )
出力 :
   length : 5,
   prevObject : [object Object],
   context : [object HTMLDocument], 
   selector : p, 
   0 : a, 
   1 : b, 
   2 : c, 
   3 : d, 
   4 : e, 
   5 : [object HTMLParagraphElement], 
   6 : [object HTMLParagraphElement], 
   7 : [object HTMLParagraphElement], 
   8 : [object HTMLParagraphElement], 
   9 : [object HTMLParagraphElement], 
   // 以下はプロトタイプオブジェクトを参照するプロパティ
   init : function (selector, context) { ・・・・(以下略)
参考
入力 : getProp( $("p") )
出力 :
   length :10,
   prevObject : [object Object],
   context : [object HTMLDocument], 
   selector : p, 
   0 : [object HTMLParagraphElement], 
   1 : [object HTMLParagraphElement], 
   2 : [object HTMLParagraphElement], 
   3 : [object HTMLParagraphElement], 
   4 : [object HTMLParagraphElement], 
   5 : [object HTMLParagraphElement], 
   6 : [object HTMLParagraphElement], 
   7 : [object HTMLParagraphElement], 
   8 : [object HTMLParagraphElement], 
   9 : [object HTMLParagraphElement], 
   // 以下はプロトタイプオブジェクトから継承されるプロパティ
   init : function (selector, context) { ・・・・(以下略)

此処で分かることは、以下の諸点です。

  • setArray(array) メソッドは、$("p") インスタンスオブジェクトのプロパティを、プロパティ名 0 から順に、引数とした array 配列の各要素で置換しています。
    実際の setArray メソッドの引数は elems( elems はその要素を DOM Elements とする配列 ) ですから、DOM Elements が順番にオブジェクトのプロパティに追加されることが分かります。
  • 因みに対象オブジェクトのプロパティ名 n よりも多い要素数 m を有する配列を引数にして、同じメソッドを履行してみたところ、0 から n-1 迄のプロパティが置換され、n から m-1 迄のプロパティが追加生成されました。
  • setArray() メソッド適用によりそのプロパティが一部上書きされてしまったところの、当該メソッド適用前の $("p") オブジェクトは、別途定義されている prevObject() メソッドによって、prevObject : [object Object] に格納されています。
  • 序でに触れておけば、get() メソッドはその実行対象となった jQuery インスタンスオブジェクトのプロパティの内、プロトタイプオブジェクトを参照しないプロパティの中で、その名前が 0 から始まる連番となっているプロパティ値だけを抽出する役割を担っています。
    なお、このメソッドではプロパティ名は抽出されません。

▲ToTop

Firebug 1.3.x のバグについて

1.3.x ではステップイン中にコード表示画面が固まってしまう!

そうなのです。スクリプトコードの進行過程をステップイン等で追跡していると、左ペインのコード表示が突如 20 行までとなってしまい、21 行より先が表示されなくなってしまうのです。何回も試してみましたが、確実に再現されてしまいました。

バージョンダウンさせ 1.3.1 や 1.3 でも試してみましたが、同様の現象が発生してしまい一向に問題は解消されません。そこで、日本語サイトを対象にこのバグ報告を探しましたが、皆目見つかりません。

なお、Firebug 1.3.x 系には他にも 先のエントリイ でも触れたバグもあり、そのことはこちら( mapserver2007@避難所:Firebugがバグる - livedoor Blog(ブログ) )にも触れられています。

1.2.1 にダウングレードする

そこでやむなく、半年前にリリースされた 1.2.1 に入れ替えてみたところ、やっとこの現象が起こらなくなりました。

1.2.1 では、サイトを開く時点で必ず、「Permission denied to call method Location.toString」なるエラーメッセージが登場してしまうバグがありますし、細かなバグは他にも多数あるはずです。だからこそ 1.3.x 系が登場してきたのでしょう。

それでもなお、基本的な使い勝手上で起こる決定的なバグよりは遙かにマシです。

兎にも角にも、バグ調査のためのツールそれ自体がバグっているのでは困ります!

秀逸な秀丸マクロ 2つ

行番号を振ってくれる秀逸マクロ

スクリプトコードに関する記述を行う場合、どうしてもコードそのものを引用表示する必要に迫られ、その際には行番号を振って説明に寄与する必要がある。

しかし、まさか一行ずつ番号を手打ちするなど、折角コンピュータを使っているのに余りに愚かしい。当然自動的に番号を振ってくれるソフトがあるはずだ。

ということで秀丸マクロの中から適当なものを探してみた。

いくつもそれらしいものは存在しており、それぞれ試してみたものの、なかなか使い勝手の良いものは見つからなかった。

試行錯誤すること半日、やっと見つけた秀逸なマクロは、「 総合連番マクロ NumberingX.mac Ver.3.00 」( 秀まるおのホームページ(サイトー企画)-総合連番マクロ Ver.3.00 )である。

その素晴らしさは何と言っても設定を GUI で行えることにあるが、既に振ってある番号を変更する機能を持っていることも、他にはない素晴らしさだ。

例えば、シリーズでチャレンジしている jQuery 解読では、jquery.js コードの部分的引用が頻出するが、jquery.js のバージョンアップに伴って当然コードの行数も変化する。このため引用しているコードの行番号をまとめて変更したい需要が頻繁に生ずるのである。

この総合連番マクロは既に何度も使用しているが、群を抜いて使いやすい。

正規表現による複数行置換を行える Quarta

秀丸の正規表現による検索/置換機能は素晴らしいものだが、論理行の 1 行しか置換対象にできない恨みがある。以前からこの「 複数行一括置換」需要があったが、つい最近それを可能とするマクロの存在を知った。

それは「 Quarta 」といい、窓の杜( 窓の杜 - 【REVIEW】「秀丸エディタ」で複数行の検索・置換を可能にするマクロ「Quarta」 )でも紹介されている。

本家サイトはこちら( Wisteria - 秀丸マクロ - Quarta )だが、使ってみて非常に軽快に使えるので大変満足している。

Firebug1.3.2 で使用するファイルの文字エンコードについて

問題解明に何と丸々2日を要してしまった。

jQuery 解読には Firebug は必須ツールです。これがなければ解読は一歩も前には進めません。故に、その使い勝手や使い方には通じていたつもりでした。

ところが1年ほど前には全く問題がなかったのに、ここ数日ローカルファイルを Firebug でチェックしていて大きな壁に突き当たってしまったのです。

自作のスクリプトが Firebug のスクリプトウィンドウに全く表示されないのです。これではブレークポイントを作れませんし、従って jquery.js の挙動を解明することが全く出来ません。

久しぶりの Javascript との格闘なので、もしかしてコードが間違っているのではないか、と何度も firefox のエラーコンソールでチェックしてみました。しかしコード上には全くミスがないにも拘わらず、Firebug のスクリプト画面ではエラー表示されてしまうのです。

何が原因なのか全く分からないまま悶々としつつ、時間だけが過ぎ去り、ネットにヘルプを求めたものの、Firebug のバグに関する記述は幾つか見つかったのですが、全く別の問題ばかりです。かなり探したのですがネット上ではついに解決策は見あたりません。

ということは私の基本的なミスに起因すると考えるしかない、と判断せざるを得ず、仕方なく対象となっているローカルファイルを適当に分割し、部分毎にコンテンツをとっかえひっかえしてみて、ついに原因解明に到達したのです。

▲ToTop

原因は文字コード指定にあった

Fc2 ブログは文字エンコードに euc-jp を使用しています。だからローカルファイルもそのエンコードで作成し、またそのように HTML文 の meta タグ内に指定してきました。そして、その指定でも Firebug 1.0 では全く問題なくスクリプト画面が表示されていました。

ところが、Ver1.3x になってから厳格に判断するようになったようでしょう。この文字エンコード指定が災いして euc-jp エンコードで記述した Javascript ファイルを表示することが出来ないのでした。( 但し興味深いことに Javascript 文の作動はきちんと行ってくれていました。「 作動すれど表示されない 」 状態になっていたのでした。 )

丸々二日間の格闘を経て、こうしてやっと地獄の苦しみ(苦笑)から脱却できたのでした。

--------------------------------------------------------

こちらのサイト( mapserver2007@避難所:Firebugがバグる - livedoor Blog(ブログ) )にこの問題に関する記述があります。

jQueryの挙動を解析する(26) jQuery 定義コードの再解析 on Ver1.3.2──jQuery解読(38)

このエントリイは、jQuery() の挙動を解読する(24) jQuery 1.2.2 における jQuery 定義コードを分析する──jQuery解読(36) の続編です。続編と言うよりも改訂編と言うべきかもしれません。上記エントリイには未解明な問題もあり、改めてこのエントリイで詳述することにしました。

jQuery定義と酷似する構造の簡易なコードを作成して解析する

jQuery の定義コードへの理解を深めるために、それに類似した短いコードを作成して解析してみました。

 jQuery 定義コードを解読するための簡単な類似コード
 1: (function(){
 2:     // block-A
 3:     var R  = window.R = function(a,b){
 4:         return new R.prototype.init(a,b);
 5:     } 
 6:     // block-B
 7:     R.prototype = {
 8:         init:function(){
 9:             this.x = arguments[0];
10:             this.y = arguments[1];
11:             this.z = this.x + this.y;
12:             return this;
13:         },
14:         area:function(){
15:             return this.x * this.y;
16:         },
17:         periphery:function(e,f){
18:             return 2* (e + f);
19:         }
20:     }
21:     // block-C
22:     R.prototype.init.prototype = R.prototype;
23: })();
上のコードの簡単な説明
  • jQuery オブジェクトに相当するそれとして R を定義し、( 2~5 行)
  • jQuery 定義コードと同様に そのプロトタイプオブジェクトの init メソッド(つまり R.prototype.init(a,b) )をコンストラクタとします。init メソッドの引数は本質的にどうでも良いことですが、数を変えるのも面倒なので jQuery 同様に2つ用意しました。( 2~5 行 )
  • R.prototype はそのプロパティに init() の他に、2つの関数オブジェクトを定義し、併せて3つのプロパティ(全て関数)を持つようにしました。( 6~20 行)
  • jQuery のコードに準じて init.prototype が R.prototype を参照するように設定しました。( 21~23 行)
  • jQuery 同様に全体を無名関数で包含し、かつ即実行するようにしました。( 1 と 23行 )
  • ここに R() はコンストラクタに関する Javascript の仕様から R.prototype.init.prototype のプロパティを継承します。
  • そして init.prototype は R.prototype を参照するよう定義付けられているので、結局 R() は R.prototype オブジェクトのプロパティを継承することになります。

こうして R() は次のようなプロパティを持つオブジェクトとなります。

要点は init コンストラクタ関数によって設定されたプロパティ(x,y,z)と共に、R.prototype のプロパティ(init、area 及び periphery の3つのメソッド)を継承している点です。

R() = {
 // x,y,z は init コンストラクタによって設定された。
 // x プロパティは 9 行の this.x で定義されているが、
 // R() に引数を付けなかったので値は未定義となっている。
 x : undefined,
 y : undefined, // 10行で定義されたが同上から未定義となっている。
 z : NaN, // 11行の this.z で定義されたが x,y 値が未定義なので NaN となる。

 // 以下は 22 行の R.prototype.init.prototype = R.prototype によって設定され
 // たもの。init コンストラクタのインスタンスである R() は Javascript の仕様から
 // init.prototype のプロパティを継承することになり、この init.prototype が 
 // R.prototype を参照するため、結局 R() は R.prototype オブジェクトのプロパティ
 // をそっくり継承することになる。
 init : function (x, y) { // init メソッドは insObj を初期化する働きをする
  // this は コンストラクタの仕様から insObj を参照する。
  this.x = x; this.y = y; this.z = this.x + this.y; return this;
 },
 // 14~16行で追加されている area プロパティ
 area : function () { return this.x * this.y; },
 // 17~19行で追加されているプロパティ
 periphery : function (c, d) { return 2 * (c + d); }
}
さて、以上のコード進行過程を解析してみます。
  1. 無名関数が実行されると R.prototype プロパティ共々関数が定義されます。無名関数が行うことはそれだけです。
  2. その後ユーザーにより R() が実行されると、説明の都合上当該インスタンスを insObj と名付ければ、(1) インスタンスオブジェクトが生成され、(2) this がこれを参照し、(3) R.prototype.init.apply( insObj, [a,b] ) が実行されます。
  3. そして最後に、3~4 行のコードによりこのインスタンスが呼び出し元に返されます。つまり、
       R(a,b) = this = insObj
    となります。

▲ToTop

上のコードを使ったインスタンスの例

以上で jQuery 定義コードの根幹部分を解読できたと思いますが、以下の幾つかの例示によって上記コードへの理解を深める一助にします。

なお、以下の getProp(obj) 関数によりオブジェクトのプロパティを取得します。

    var getProp = function(obj){
        var ret = [];
        for (var prop in obj) ret.push(prop + " : " +obj[prop]);
        return ret.join("\n") ;
    };
getProp(R(2,3))
/*  x : 2  y : 3  z : 5  init : function (x, y) {   this.x = x; this.y = y; this.z = this.x + this.y;  }  area : function () { return this.x * this.y; }  periphery : function (c, d) { return 2 * (c + d); } */
R("selector","content"); // {x:selector,y:content,z:selectorcontent}
R(2,3).init() // NaN
R(2,3).init(4,5) // {x:4, y:5, z=9}
R(2,3).area() // 6
R(2,3).area(4,5) // 6
R().area(2,3) // NaN
R(2,3).periphery(5,6); // 22
R().periphery(5,6); // 22

インクルードされる jQuery.js の読み込み過程で jQuery はどのようにプロパティを獲得するか

構造が jQuery に類似した上記コードの解析により、jQuery の定義コードの根幹部分は理解できましたが、そもそも知りたいことは、jQuery.js がブラウザに読み込まれる過程で、jQuery オブジェクトはどのように構成されるのか、という点なのです。

上記の類似コードの解析により、jQuery.prototype オブジェクトの全てのプロパティが、jQuery(selector,content) インスタンスのプロパティになることが分かりました。

ここに、jQuery.prototype オブジェクト( jQuery.fn オブジェクトに同じ ) は 35 行から 530 行(基本部分)、554~602 行( extend )、1351~1397 行( extend )、2778~2871 行( Event 関係の extend )、3105~3190 行( Ajax 関係の extend )、3662~3817 行( Animation 関係の extend )、4038~4084 行( offset )、4124~4162 行( position )と繰り返し登場します。

こうして、jQuery インスタンスには膨大なプロパティが登録されますが、この膨大なプロパティこそが、jQuery インスタンスプロパティとインスタンスメソッド及び jQuery クラスメソッドを駆使した、単一の記述「jQuery」による様々な window オブジェクトの操作を可能にしているわけです。

さて、これらの膨大な prototype オブジェクトからのプロパティの継承は、全て jQuery インスタンス生成時に行われます。他方、jQuery.extend(){ prop1:fn1(){}, prop2:fn2(){},・・・ } メソッドが jquery.js インクルード時に「実行」され、これにより jquery.js 読み込み完了時点で膨大な数のクラスメソッド( jQuery.prop1, jQuery.prop2, ・・・ )が jQuery オブジェクトに登録され、直ぐに活用できる状態になります。

そこで、extend() メソッドの解明をエントリイを改めて行うこととします。

jQuery が 1.3.1 に、そして FireFox は 3.0.6 へ

jQuery が 1.3.1 へバージョンアップ

2008/5/24 に 1.2.6 が公開されてから 8 ヶ月を経て、恒例の誕生月におけるメジャーバージョンアップ版 1.3 が 2009/1/14 に公開され、その 1 週間後の 1/21 にバグフィックスを施した 1.3.1 が公開された。

2006/8/26 に Ver 1.0、2007/1/14 に Ver 1.1、2008/1/15 に Ver 1.2.2、そして2009/1/14 に Ver 1.3───ほぼ 1 年毎に jQuery は 0.1 ずつバージョン番号を上げている。

今年もそうなるだろうと思っていたら案の定、誕生日の 1/14 に 1.3 がいわば強引にリリースされ、追いかけるようにバグフィックス版である 1.3.1 が公開されたのである。

さて、最も必要な情報は変更点である。既に多くのサイトで報じられているが、私にとって気になった変更点を列挙すると以下の通りだ。

  • CSS セレクタ Sizzle の搭載……より高速なCSSセレクタだそうだ。
  • Live イベント……類似要素へのイベント登録を代表する1つの要素にバインドするだけで済ますことが出来るようだ。
  • offset処理の高速化……これはページの表示やコンテンツ移動の高速化に大きく寄与すると思う。
  • HTMLへの要素追加の高速化

Firefox が 3.0.6 へアップ

3.0 はこれで 6 回目のマイナーバージョンアップだ。ベータ2 迄到達している 3.1 版の登場も間近だと思われるが、未対応アドオンがたくさんあると思われるので、当面は 3.0 版を使い続けることになる。

3.1 では Javascript が更に高速になり、あの chrome を越えるそうなので、早く登場して欲しいと切望している中での、暫定的対応と言えよう。

▲ToTop

IE8 RC版導入

IE8 のリリース候補版がダウンロード開始 2009/01/27

米マイクロソフトのIE開発チームは1月26日、次期 Web ブラウザのリリース候補版となる「Internet Explorer 8 Release Candidate」(IE8 RC)のダウンロード提供を開始したと発表した。───IE8のリリース候補版がダウンロード開始 - @IT

上記エントリイで紹介されているように、先週月曜日に IE 8 RC 版が提供開始された。

概要紹介はこちらのサイト( 次期ブラウザー「IE8」製品候補版を高速レビュー:ラボラトリー )にある。

早速インストールしたが、まだベータ2 との機能上の相違は未確認だ。

しかし、これまでベータ 2 で おかしかった Javascript の動作が正常となったことは喜ばしいことだ。

このブログでは ajax 通信を利用して、任意エントリイの「以前、最新及び以降」の各10エントリイタイトルリストを取得しているのだが、これが IE8 になってからうまく作動しなかったのだ。

他のブラウザ(Firefox、Opera、safari 及び Google Chrome)では問題なく作動するのに、IE8 だけ、ajax通信の進行が途中で止まってしまっていたのだ。

▲ToTop

果たして IE8 正式版はいつ? またブラウザ戦争の行方は?

今年に入って Windows 7 のベータ版ダウンロードが開始されたことは記憶に新しい。(1/8~2/10)

IE8 は Windows 7 の正式発表と同時に正式発表か?──との情報もあるようだが、急速にテンポアップしてきた感のある Windows 7 の登場と歩調を合わせることになるとすれば、来年初めくらいには正式版が登場するのかもしれない。

しかし、その正式版登場がいつになろうとも chrome 登場によって途端に激化しつつあるブラウザ戦争の勝利者になれるかどうか、予断を許さないだろう。

何故ならば、Google Maps やオンラインオフィスソフトの提供によって一躍脚光を浴びているJavascript インタプリタの実行速度において、勝敗は既についているからである。

すなわち、chrome や firefox の Javascript 実行速度は IE8 のそれを遙かに凌駕しており、その速度差が逆転するとはどうしても考えられないからである。

実際IE 8 RC 版になってもその実行速度は相変わらず chrome や firefox の足元にも及ばないからだ。

それにも拘わらず、未だにIEは 6 7 8 のそれぞれのバージョンが広く利用されており、それらをトータルした市場占有率は日本では相変わらず 7 割台を確保している。極めて遅いがシェアの高いブラウザIE───その牙城が突き崩されるほどのプレゼンスを chrome または firefox は示せないでいることも確かだ

それでも尚、激化しつつあるブラウザ戦争にここ数年間は目を離せないことは言うまでもない。

例えば、こんな記事もある。既にIEが Firefox に逆転されている!

▲ToTop

 90%近いシェアを握っているインターネットエクスプローラの描画エンジンを利用したタブbrowser。沢山のタブbrowserがあるが、多機能、カスタマイズフリー、スクリプト利用等で一日の長がある。Gekkoエンジンへの対応も行われ、IEからの自立独立の方向に向かっている。2005年7月にはIE7が登場する見通しの中で、今後の発展が望まれる。

 多様なCSS作成支援機能を備えた、タグ入力式 HTML&CSS作成支援エディタ。スキンデザインもすっきりしている。テキストエディター上で作成するよりも確実で安全にタグ打ちが出来る。
文字コードを選べないのが欠点。

 StyleNote同様のタグ入力式 HTML&CSS 作成支援エディタ。長年使用してきたが現在StyleNoteに乗り換えつつある。

 クリップボード履歴情報を活用する為のソフト。画像まで履歴を取ってくれるのが嬉しい。このソフトを使わない日は絶対ない程に重宝し、愛用している。

 起動中のウィンドウの「コピーできない」説明文などの文字列を取得し、コピー可能な文字データにするツール。何かと便利。

 ストリーミングデータを保存することが出来るソフト。動画利用には不可欠なソフトだ。

 無料ながらレイヤー機能を有し、スクリプトによる拡張も可能な、sleipnir作者が提供している優れもの画像編集ソフト。

 画面キャプチャソフトと言えばこれに勝るものなし、ではないだろうか? 様々な取得方法を有しており、ブログ作成にもHomepage作成に不可欠だ。Jtrimと並んでWoodyBellsの作品。

 複数ファイルの同時編集は出来ないが、透過pngも作れる画像編集ソフト。
(以下当該サイトから抜粋)初心者にも簡単に操作が出来るフォトレタッチソフトです。多くの加工機能で画像に様々な効果を与えることができます。非常に軽快に動作するため、ストレスなく操作できます。

 Animation Gifファイルを作れる無料ソフト。

 キャプチャソフト。画面内にサイト全体が表示しきれない場合でも、これを使えば全体をキャプチャすることが出来る。

 画像処理。画像のフォーマット変換のみならず、色数やサイズ、圧縮率の変更まで一括処理できてしまう『BatchGOO!』は、大量の画像をまとめて処理したいときに大変便利なソフト。BMP, TIFF, JPEG, PCX, PNG の相互変換をはじめ、色数・サイズ・解像度の統一、JPEG圧縮率の調節など、ホームページ用の画像や携帯電話用の壁紙を揃えるのに抜群の相性を見せる。(Vectorの当該ソフト紹介頁より抜粋引用)

 名前から直ぐに想像が付くように画像のサイズを測るためのソフトだ。Homepage作成には欠かせない。2カラム、3カラムのレイアウトを行う場合に大変重宝する。

 ランチャーソフトは沢山あるが、中でもこれが一押しだ。2年以上使ってきたがその操作性には毎日満足している。これを使い始めてからデスクトップには一切のアイコンを表示することをやめてしまった。

 AdobeReader7によって、起動時間が長すぎるという長年のユーザーの不満はある程度解消した。そのためこの高速化ソフトは存在価値が低下してしまったかもしれない。AdobeReader6迄はこのソフトによる起動高速化で恩恵を受けてきた。

 IE専用が難点だが、様々なサイト内でIDやパスワードを入力するのに重宝するソフト。コンテキストメニューから簡単に起動できるのがGood! sleipnir等のIEの描画エンジンを利用しているブラウザでも使える。

 利用しているパソコンの諸元値を取得するには、このソフトがベストだ。インストール済みソフトの一覧が取得できるのも嬉しい。

 WMPは機能が豊富なだけ重い。RealPlayerも同様だ。そこでMedia Player Classicを使いたい。動作が軽快なだけではなく、対応しているファイル形式もすこぶる多く、これひとつで、wmvもrmも表示できてしまうのだから凄い! 数多あるMedia Playerの王様と言えるだろう。

 自宅でPCを起動しているときには必ず起動しているメディアプレーヤー。何かと過剰なWinampよりも、起動も速くスキンはシンプルだ。

 DivX, Xvid, Mov, Vob, Mpeg, Mpeg4, avi, wmv, dv, などの動画をDVD-Video形式に変換できるフリーソフト。クリックするとDVD関連ソフト紹介サイト=「DVDなToolたち」なるHomepageが開きます。