LoginSignup
3
1

More than 5 years have passed since last update.

javascript node と browser と worker での挙動を比較してみた

Last updated at Posted at 2018-11-07

はじめに

今更感はありますが、まとめてみようと思いました。

グローバルスコープが保持しているオブジェクトの違い

node.js: Object
browser: window
worker : workerGrobalScope

node.jsは、シンプルにオブジェクトです。
browserは、開いているウインドウを意味するインスタンスになっています。
workerのグローバルスコープは意識することが無いと思います。

必要不可欠な記述の差

node.js: サーバーを記述するという書き方。

ライブラリの読み込み

const server = require("http").createServer()

何かが起こったら何かをするという考えでイベントハンドラーを記述する。

server.on("get", (req, res) => {
  res.writeHead(200, {'Content-Type' : 'text/html'});
  res.end("hello world");
})

サーバーなのでtcp udp のポート番号とIPアドレスの指定をして、
通信を待ち受ける。

server.listen(8080)

ここまでがnode.js上での主要な書き方です。

browser: ビルトインオブジェクトが多い

HTMLElementの扱いとイベント処理を記述することがメインです。最近では端末のデバイスにアクセスできる方向もあります。

エレメント

const myArt = document.createElement("article");
myArt.id = "today";
myArt.class = "main article";
myArt.appendChild(new Text("hello world"));
document.body.appendChild(myArt);

イベント処理

myArt.addEventListener("drop", ((e) => e.style.backgroundColor = "#880088"));

以上がbrowserでの主要な書き方です。

worker: browser側でインスタンスを作成

インスタンスからのメッセージを受け取れるように、addEventListenerを記述します。

//browserから、workerを作成。
const worker = new Worker('worker.js');
worker.addEventListener("message", (e) => alert(e.data));
worker.postMessage('Hello World!');
self.addEventListener('message', (e) => {
  console.log(e.data + "from View");
  self.postMessage(e.data + "from worker");
});

worker内では、基本的にすごく遅い計算結果やpromiseの結果を返却したりします。
serviceWorkerの場合は、利用方法が違うようです。

よくまとまっている記事がありましたので、 こちら をどうぞ…

以上、javascriptの言語としての違いというより、実行環境の違いをまとめてみました。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1