2013-03-24 11 views
7

たとえば、タイマーで何らかのアクションを実行するjavascriptコードを実行していて、このコードがWebブラウザのタブ1とタブ2のWebページに埋め込まれている場合、クライアントコードは同時に実行できます?または、JavaScriptのクライアントコードは常に1つのブラウザスレッドでのみ実行されますか?JavaScript/Webブラウザのスレッドモデル

また、親フレームと子フレームを持つフレームセットがある場合は、この状況でJa​​vaScriptコードを同時に実行できますか?

標準指定モデルはありますか、それともブラウザに依存していますか?

私の主なターゲット環境はIE9なので、そこで何が起こるかを知ることに興味があります。

EDIT 私はスレッドのサポートやjavascriptでスレッドを行う方法を探していません。私は個人的に必要性を見ません。また、人生はより複雑になります。私はちょうど私がそれについて心配する必要があるかどうかを知りたいのであれば、どのブラウザーでそうしているのか知りたい。

+0

2つのタブは完全に無関係です。のための標準はありません。たとえば、Chromeでは、それぞれを異なる*プロセス*で実行することさえできますが、Operaはすべてを1つのスレッドでのみ実行することが知られています。 – Bergi

答えて

5

単一のJavaScript「オブジェクトスペース」(ブラウザ内の単一ページまたはnode.js内のインタプリタインスタンス)に対して、最大でも1つのスレッドが実行されています。実際には、JavaScriptのコンテキストでスレッドについて話すことは意味がありません。 JS実行モデルは、イベントループとコールバックに基づいています。

異なるフレームは、互いのDOM(拡張子は任意のオブジェクト)にアクセスできるため、同時に実行することはできません。これはスレッディングが安全でないことになります。

Webワーカーの場合、ワーカー境界を越えたデータ構造に直接アクセスすることはできません。そのため、スレッド化は観測できず、安全に行うことができます。ここでの唯一の通信はメッセージの受け渡しによるものです。

+0

なぜフレームはメッセージだけを使って通信すると思いますか? 2ページ(SOPによって制限されていない)は、他のページの要素と直接対話できます。 – Bergi

+0

@Bergi right!それに応じて私の答えを変えました。これは実際には、異なるフレームを同時に実行できないことを示しています。 – usr

関連する問題