タグ

ブックマーク / reinyannyan.hatenadiary.org (3)

  • JavaScript でプロファイリング (シンプル版) - (new Hatena).blog()

    Game of Life のアルゴリズムの問題点を探ろうと思い、以前作ったプロファイラにかけて調べることにしました。 が、このプロファイラは prototype.js (を自分用に改変したもの) を対象にした内容だったため、ライブラリを使わずに書いた Game of Life では使えません。 ということで、完全にライブラリ非依存な形に書き直してみました: var Profiler = { times: {}, scope: this, // == window watch: function() { for (var i = 0; i < arguments.length; i++) this.profile(arguments[i]); }, profile: function(klass) { this.times[klass] = {}; var proto = eval(["th

    JavaScript でプロファイリング (シンプル版) - (new Hatena).blog()
  • JavaScript でプロファイリング - (new Hatena).blog()

    追記 [20061103]: ライブラリ非依存なバージョンも書いてみました。id:reinyannyan:20061103:p1 でご覧下さい。 最近自分で書いた JS プログラムが驚くほど重かったので、どこに原因があるか調べたいと思いました。 その方法として、怪しいと思う箇所に (あるいは思わない箇所にも) 手作業でタイマーを仕掛けて、部分部分の実行時間を計測するのも手だと思うんですが、クラスのどのメソッドでどのくらい時間が掛かっているのかが自動的に分かる、というのが理想的かなと思いました。 (以下、prototype.js 的な (OO 的な) コーディングを対象とした話になります) まず思いついたのは、プロファイルしたいクラス (function オブジェクト) を受け取って、メソッドを動的に書き換えるという方法です: for (var m in klass.prototype) {

    JavaScript でプロファイリング - (new Hatena).blog()
  • String#succ - (new Hatena).blog()

    g:subtech:id:secondlife:20060530:1148996760 経由で p (1..n).inject(s) {|x,| x.succ}という表現を見てちょっと衝撃を受けました。 "n" は数値、"s" は文字列で、n 回分文字列を succ する (C 言語系の "++" みたいなもの) 方法を表したものです。 例えば n が 10 で s が "a" ならば "k" がプリントされるわけです。 この表現が生まれた経緯については上のリンク先を見ていただくとして、私個人的に驚いたのは、「オブジェクトに対してメソッドを繰り返し適用する」ことと、「その結果を得る」ことを、「範囲#inject」の一文だけで済ませている、という点です。 つまり、(私のように) まだあまり inject に慣れていない思考回路の人ならこうしていたと思うんですね (in JavaScript)

    String#succ - (new Hatena).blog()
  • 1