タグ

ブックマーク / labs.gmo.jp (3)

  • javascriptは本当にシングルスレッドで実行されているけれど起こるsetTimeout/prompt現象 - bits and bytes

    前回の FirefoxのsetTimeoutの実装 - bits and bytes を書いたときには、はてなブックマークのコメントでご指摘いただいているsetTimeoutとpromptを組み合わせるとpromptが終了する前にタイムアウトハンドラが呼び出される現象を知りませんでした。この現象については [JavaScript]JavaScriptはほんとにシングルスレッドで実行されているのか? に詳しく書かれています。 FirefoxのsetTimeoutの実装 - bits and bytes だと、この現象を説明できないので、どうなっているかはっきりさせるためさらに調べてみました。 setTimeout/prompt現象とは かんたんにこの現象について説明しておきます。FirefoxやIEやOperaでは setTimeout( function () { timeout_hand

  • FirefoxのsetTimeoutの実装 - bits and bytes

    Firefoxのソースコードを追っているうちに、たまたま1年遅れで IT戦記 - JavaScript を学ぶ際に一番重要なのに、誤解されがちな setTimeout 系の概念 の裏側がどうなっているかがわかったので、その話を。 タイマーの管理方法 そもそもjavascriptからsetTimeoutを呼ぶと、どういう仕組みで指定した時間後に渡した関数が呼び出されるようになっているのでしょう。Linuxであればsleepのように一定時間後にawakeするという処理は、タイマーリストによって管理されています。カーネルの中にN jiffies(LinuxのOS内時間の単位はjiffyと呼ぶそうです)経過後に実行することリストがあって、カーネルが4msごとに毎回タイマーリストをチェックしてやることがあったときにはそれを実行しています。 FirefoxもLinuxと同じようにタイマーリストみたいな

  • IEでjavascriptのエラーをデバッグする方法 - bits and bytes

    FirefoxであればFirebugで簡単に問題の場所をみつけられますが、IEでjavascriptのエラーが出ると、素っ気ないうえに意味不明な日語のエラーメッセージが出てきてお手上げなので、エラーが出ている場所の特定すら困難です。 そんなときでもOfficeについているスクリプトエディタ(前はスクリプトデバッガという名前だった気が....)を使うと、Visual Studioのデバッガとおんなじインターフェイスのデバッガを使ってjavascriptのエラーを出している場所をすぐに見つけることができます。Firebugと比べると極めて重たいですが、関数呼び出しをバックトレースすることもできますし、各スコープでの変数の値を調べることもできるので、これを使わない手はありません。 が、いつもどうやってインストールするのかを忘れてしまうのでメモ代わりに書いておきます。 コントロールバネルのプロ

  • 1