高速化

fn.call(何か) ベンチ

気になったのでとってみたけどあまり意味が無いベンチになりました。fn.call(null) って速いのね。 Browser fn.call(null) fn.call(this) fn.call(window) (function(){fn()} Fx3.6 1162 5911 3630 6432 IE8 937 1010 1073 2338 IE6 2833 2447 2578 5093 GC6…

MessagePack + WebWorkers

追記 @os0X さんと @edvakf さんからアドバイスをいただいたので、本文とコードを修正しました。 postMessageが文字列に限定されているのは旧仕様で、Firefoxや最近のWebKit(Chrome5とか)はオブジェクトをやり取りできると思います via @os0X http://twitter…

自作 MessagePack のベンチ取ってみた

http://pigs.sourceforge.jp/blog/20100606/msgpack.htm IE6 28秒ぐらい IE8 10秒ぐらい Chrome6 8.5秒ぐらい Firefox3.6.3 9秒ぐらい Opera10.50 不明 約1MBのデータだと、体感的に IE8 と Firefox3.6, Google Chrome 6 で大差ない感じになってる気がします…

Canvas on Flashでアニメーション

Flashバックエンドの実装とbugfixもいい感じに進んでます。残すは clip() globalCompositeOperation ShadowAPI TextAPI PixelAPI toDataURL(), getImageData() な感じです。 アニメーションデモ 今までは派手目なデモの紹介を控えてきましたが、そろそろ頃合…

canvasをより速く(Flashもサポート)-Take4

このエントリは canvasをより速く(Flashもサポート) - latest log や canvasをより速く(Flashもサポート)-Take3 - latest log の続きです。今日も、Flashモードのレンダリングをちょっと速くしました。 送信部分の高速化 修正前 var _stack = []; var _lockS…

canvasをより速く(Flashもサポート)-Take3

latest log の続きですFlashモードのレンダリング速度をさらに改善しました。fpsが半分ぐらいに落ち込む問題も解決できたようです。 なにをしたか ExternalInterface のjs側のコードを要約し CallFunction() だけにする事で、最適化していた(つもりだった)の…

canvasをより速く(Flashもサポート)-Take2

latest log の続きですFlashモードのレンダリングを速くしてみました。boostも出来ます。boostすると、25fps → 60fps ぐらいに加速します。 AutoDetect Silverlight → Flash → VML 順にバックエンドを探索 Flash 優先 Flash → Silverlight → VML 順にバック…

canvasをより速く(Flashもサポート)

追記 2010-02-13: Flash モードを最新に差し替えました。boostも出来ます。 Flash 優先 Flash → Silverlight → VML 順にバックエンドを探索 本文 uupaa.js には uuCanvas.js のコードが入ってましたが、色々と書き直して、またちょっと速くなりました。 また…

Firefoxのin演算子がモッサリなので何とかしてみた

今日は「Firefox3.5+で、配列に対してin演算子を使うと、Firefox3に比べ5〜10倍モッサリする」という困った現象を、何とかする方法をご紹介します。 Firefox3 33 Firefox3.6 157 Firefox3.7a1pre 96 <body onload="bench()"><script> function bench() { var pure = [0, 1, 2, 3, 4, 5, 6, 7</body>…

Safari4 で switch〜case を速くする

Safari4 の switch 〜 case 文は、型を統一することで実行速度が大きく変化します。これを switch (a) { case "a": case 1: } こうしましょう。 switch (a) { case "a": case "1": // 1 → "1": } これだけで、2倍速です。 http://pigs.sourceforge.jp/blog/2…

+new Date を Date.now() に差し替えると200〜400% 高速化も

CSS を利用したアニメーションでは、必ず現在時刻を取得するコードが入ります。 var now = +new Date; ECMAScript-262 5th では Date.now() が新しく追加されました。 Date.now() は +new Date と同じ機能(現在時刻を数値で返す)を持ちながら、new の必要が…

ストレスの無いCSSアニメーションを

今日は、CSSアニメーション機能を担当する uu.tween.js のリライトをしていました。uu.tween.js を組み込むと、CSS の色, サイズ, 位置を利用したアニメーションが可能になります。これ自体はよくある機能なのですが、他のライブラリにない特徴として、CSSプ…

速くてコンパクトな JavaScript 用の sprintf の実装

[javascript][sprintf] で検索してたどり着く方が多いようなので、uupaa-0.7.js から切り出して張ってみます。 /*!{id:"uupaa.js",ver:0.7,license:"MIT",author:"uupaa.js@gmail.com"}*/ window.sprintf || (function() { var _BITS = { i: 0x8011, d: 0x80…

uupaa.js のサクサク

uupaa.js の速度的な配慮についてまとめた資料を更新しました。 http://handsout.jp/slide/1894

window.getComputedStyle for IE6+ (その2)

ちょっと手直しして、 メインロジックはそのまま コード量を 12% DOWN minify + zip で 1.1kB option = 0x0 の速度を 20% 〜 35% UP IE8 1.375ms ⇒ 1.094ms IE6 1.875ms ⇒ 1.218ms option = 0x0 で列挙するプロパティを ホワイトリスト式 ⇒ ブラックリスト式…

window.getComputedStyle for IE6+

IE6, IE7, IE8 用の window.getComputedStyle の実装(uu.cstyle.js)です。 uupaa.js 0.7 core の一部として開発していますが、これ自体はライブラリに依存していないため単体でも動きます。 uu.cstyle.js /*!{id:"uu.cstyle.js",license:"MIT",author:"uupaa…

レンダリング速度向上のためにやったこと

uupaa.js / uuCanvas.js / uuAltCSS.js コードリード用のエントリです。uuCanvas.js のコードを眺めてて、 // CanvasRenderingContext2D.prototype.fill function fill(wire, path) { var fg = ""; // fragment : : this._elm.insertAdjacentHTML("BeforeEnd…

もっと速くするために(文字列変換コストの抑止 + String.prototype 化による影響)

element.style.xxx にアクセスするには、"css-prop" ではなく "cssProp" の形でアクセスする必要があります。このとき行われる変換は camelize と呼ばれ、JavaScriptライブラリの多くは以下のような実装を行っているようです。 # camelize = らくだのこぶの…

もっと速くするために(Array.forEach は控えめに)

追記 「forEach より for のほうが速いよ」って書くときに、一言「でも forEach を使わないとハマるコードもあるよ」と付け加えておいたほうがいいんでないの forとforEach - JavaScriptで遊ぶよ - g:javascript ごめんなさい、いつも端折ってます。…と。そ…

もっと速くするために(トップレベルオブジェクトの省略)

昨日の続きです。ブラウザで動作する JavaScript では、トップレベルオブジェクト(window)を省略できます。これにより、window.setTimeout や window.document と書くかわりに setTimeout や document と書いても動作します。今日は、省略すると速くなるのか…

もっと速くするために(スコープ解決コストと正規表現オブジェクトの置き場所)

正規表現オブジェクトをどのように配置すれば効率的なのか調べました。 配置パターン A. ループ内にべた書き function job(expr, n) { var i = 0, match; for (var i = 0; i < n; ++i) { match = /regexp1/.exec(expr); match = /regexp2/.exec(expr); } } B…

理由がない限り、Array.join("") による文字列連結は使わないほうがいいみたい

JavaScript の勉強を開始したときに「文字列の連結には Array.join() を使え」といった記事を見た覚えがあります(ソース失念したけど、 Operaの技術文書だった気がする ⇒ IE の技術文書だったかも)。一年ほど信じてて、念のためベンチとってみたら「うそやー…