ECMAScript 規定: ドル記号は機械的に生成されるコード中のみの使用を意図される
$ を魔法の言葉的に扱うのもあまり好きになれない。機能が統一されてるならまだしも揺らぎがあるので、全体としてみないと判断できないし。
2010-09-06 05:49:45@uupaa それは興味深いお話です。そういえば、jQueryはイベントハンドラから一度はグローバルオブジェクトを経由しなければならないのが気になってはいました。
2010-09-06 05:52:39uupaa.jsとjQueryではイベント周りの設計ポリシーが大きく異なります。jQueryはeventオブジェクトをラップしてクロスブラウザに仕立てた擬似eventオブジェクトを返す。uupaa.jsはeventオブジェクトに便利なプロパティを追加する、必要なことだけ。まだある
2010-09-06 05:53:49uupaa.jsのイベントハンドラはDOM標準のhandleEventメソッドに対するイベント配信も可能なので、クラスインスタンスに対してもイベントを配信できます。
2010-09-06 05:56:45jQueryは何でもイベントでやるけれど、DOMのイベントはそもそも単純な通信に使うには余計な物が多すぎる(キーとか発生元とかバブルアップとか)。uupaa.jsはクラスインスタンス間でメッセージングが使えるため、メッセージの配信が可能。オレオレイベントも使えるが、使う必要はない
2010-09-06 05:59:40uupaa.jsではメッセージングを利用して未知の相手とやりとりが可能なので、未知のプラグイン同士で協調動作を設計することが可能。メッセージングは、相手を指定して、グループを指定して、ブロードキャストが可能で、同期/非同期通信が可能。ITRONのメッセージボックスの感覚で使える
2010-09-06 06:02:41jQueryはDOMContentLoadedのサポートだけだが、uupaa.jsはDOMReady,WindowReady,AudioReady,StorageReady,CanvasReady,SVGReady,オレオレReady などのイベントの待機やイベントの発火が可能
2010-09-06 06:05:43@uupaa むー、jQueryのコードは読んだ経験があるので見当がつくんですが、uupaa.js は…後で読もう。速度はイベント周りの工夫でしょうか?
2010-09-06 06:07:46@think49 そうですね。eventまわりはmousemoveのレスポンス改善を第一目標に設計しているためjQueryと一桁動作速度が違ってる気がします。またjQueryはクロージャを多用してコードを短くみせていますが、イベント周りもクロージャで多重ラップしており、速度が…
2010-09-06 06:14:49uupaa.js の bind(uu.event)は http://bit.ly/aIydjC で jQuery1.4.2だと 2361行付近ですね
2010-09-06 06:19:17@uupaa jQueryはコメントやヘルプには気を遣ってますが、洗練されたコードではない印象がありますね。互換性重視というべきか…。
2010-09-06 06:23:49速度周りといえば、jQueryで気になったのは jQuery($) を多用することが前提になっていることです。スコープチェーンではグローバル変数は避けるべきですが、イベントハンドラでは使わざるを得ず…。
2010-09-06 06:24:49jQueryのコードが短く見えているのは(最近はそ6000行もあって当初からかなり増量しているけど)、クロージャで何重にもラップして処理を断片化しているからです。コードの短さに設計が最適化されており、高速性についての配慮はさほど読み取れません
2010-09-06 06:24:49@think49 互換性重視の部分と速度重視の部分は作風を使い分けて記述すべきですが、jQueryは互換性とコードの短さを重視した結果、速度が犠牲になっています。uupaa.js は作者がワガママなのでどっちもやってます。
2010-09-06 06:30:20@uupaa touchでJavaScript書いてみようなんて考えたこともありましたが、入力があまりにも面倒だったのと期待するテキストエディタがなかったので諦めましたw
2010-09-06 06:30:52IEのCSSExpressionのやばさを思い出してください。あれはマウスが1px動くと関数が呼ばれモッサリします。mousemoveやtouchmoveも基本同じです。速度が重要な場所でfor in回したり内部関数を沢山呼んだりクロージャでラップしているのがjQueryです
2010-09-06 06:35:18@uupaa 確かに両者は分けて考えるものですが、ネイティブ関数を使った方が速くて確実っていうのもあると思うんです。jQueryは最も低機能なブラウザに合わせてコードを書いているように思えます。
2010-09-06 06:36:51@think49 うん。PCだとCPUもMEMも電源も余りまくってるので古いブラウザの救済も「どーぞどーぞ」なんですが。PCでの動作を前提に設計されているライブラリをモバイルデバイスでも… ってのは大変だろうなぁ~ って思います
2010-09-06 06:40:56@uupaa jQueryではイベントが発生する度に余計な処理が走っている、ということですね。バブリンクする範囲が大きいと大変なことになりそうです…。
2010-09-06 06:47:01