JavaScript Web Workers

วันนี้ได้ mail จากลูกค้าเจ้านึง เขียนประมาณว่า “กูอยากใช้ Shared Web Workers (SWW) มึงช่วยทำไงก็ได้ให้ JavaScript API มึง support SWW ที หรือไม่งั้นมึงบอก design, protocol มา เดี๋ยวกูเขียน API ใหม่เอง (แต่มึงต้อง test, fix bug แล้ว support code ที่กูเขียนนะ – สัด)” ผมก็เลยต้องมานั่งหาว่าไอ้ Web Workers หรือ Shared Web Worker มันคือะไร เพราะไม่เคยได้ยินมาก่อน entry นี้จะเขียนถึง Web Workers ก่อนละกัน

Web Workers (Web Workers @Wikipedia) เป็น feature ของ HTML 5 ที่ทำให้สามารถรัน JavaScript แบบ multithread ได้ครับ

คือปกติ JavaScript มันเป็น single thread มันจะรันคำสั่งตาม queue ของมันเสมอ ไม่ว่าจะเป็นการ display, validate, ต่อ ajax, websocket หรือทำ function ต่างๆ ที่เราเขียน ทุกอย่างอยู่บน thread เดียวกันหมด ดังนั้นเวลามี function อะไรใน queue รันหนักๆ มันจะกระทบให้ทั้ง page ช้าไปหมดจนบางที browser จะขึ้น pop up มาถามว่า page กำลัง script อะไรบางอย่างทำให้มันช้าจน freeze นะ จะ kill page นี้ทิ้งไหม

เขาก็เลยคิด Web Workers ขึ้นมาเพื่อแตกงานอะไรที่หนักๆ ไปอีก thread นึงเลย จากที่ค้นๆ มาเขาจะยกตัวอย่างเป็นคำนวนค่า Pi ที่ต้องวน loop หนักๆ หรืออะไรที่ต้องคุยกับ server เยอะๆ แยกเป็น thread worker ไปแล้วให้ thread หลักรับผลการทำงานจาก thread ลูก (Worker) แบบ asynchronous ไปซะ

Concept หลักๆ ของการเขียน Web Workers คือ

ตัวแม่ (ชื่อ main.html ละกัน)

//new Worker object
var wk=new Worker("worker.js");
//ใช้ addEventListener เพื่อรับ message จาก Woker --> self.postMessage('worker got : '+data);
wk.addEventListener("message",function(oEvent){
	document.getElementById('display').textContent = oEvent.data;
	//จะ print 'worker got : Hello'
},false);

//start Worker และส่ง message ให้ Worker ด้วย postMessage
wk.postMessage('Hello'); 

worker.js

//ใช้ addEventListener เพื่อรับ message จาก Main --> wk.postMessage('Hello'); 
self.addEventListener('message',function(e){
	var data=e.data;
	//ใช้ postMessage เพื่อส่งกลับให้ Main
	self.postMessage('worker got : '+data);
},false); 

Continue reading “JavaScript Web Workers”

A Good Day to Die Hard

ผมนั่งดู A Good Day to Die Hard บนเครื่องบินระหว่างทางกลับมาไทย (พากษ์ไทยด้วยยย) จะเรียกมันสั้นๆ ในรีวิวนี้ว่า Die Hard 5 ละกัน

ใน Die Hard 5 นี้ John McClane ต้องไปช่วยลูกชาย (จำได้ไหมว่าเขาก็มีลูกชาย) ที่ถูกจับอยู่ที่รัสเซีย แน่นอนว่า John McClane อยู่ไหน ความบรรลัยอยู่ที่นั่นเสมอ 😀

หนังเรื่องนี้ถ้ามันไม่ได้ชื่อ Die Hard มันก็เป็นหนัง Action ระเบิดภูเขา เผากระท่อมเกรด B ที่พอจะดูได้เพลินๆ ทางเคเบิ้ลทีวีหรือว่าเช่ามาดูรอบเดียวเลิกครับ แต่เพราะมันแบกชื่อ Die Hard ไว้ ผมคงต้องบอกว่ามันเป็น Die Hard ภาคที่ห่วยที่สุดใน 5 ภาคเลย (มิน่า ตอนฉายโรงถึงได้เงียบๆ)

Die Hard 5 ไม่มีสิ่งที่เป็นเอกลักษณ์ของ Die Hard เลยสักอย่างครับ เอกลักษณ์ของ Die Hard ที่ผมรู้สึกคือผู้ร้ายเทพๆ กับแผนการที่สมบูรณ์แบบ 99% แต่ซวยตรงเสือกมี John McClane เดินมาผ่านแบบตกกระไดพลอยโจนแล้วยังต้องสู้แบบหลังชนฝาเพราะผู้ร้ายเหนือกว่าทุกอย่าง ซึ่งภาค 5 มันไม่มีไอ้ที่ว่ามาสักอย่างเลย!! ผู้ร้ายดูโง่ๆ จัดการง่ายๆ แผนการเดาง่ายๆ หักมุมงั้นๆ

สรุป Die Hard 5 ห่วยครับ มันไม่สมควรจะได้รับชื่อว่า Die Hard เลยด้วยซ้ำ

คนใจดำ

วันนี้นั่งรถเมล์กลับบ้าน ระหว่างทางมีป้าคนนึงที่นั่งอยู่ข้างๆ ที่ผมยืนอยู่แกพยายามจะหันมาสบตา หันมายิ้มให้บ่อยๆ จนสักพักผมเลยยิ้มตอบกลับ

ป้า: (หน้าตายิ้มหวาน) ซื้อขนมยายหน่อยมั้ย นมอัดเม็ด 20 บาท
ผม: (ยิ้ม หัวเราะแหะๆ) อ่า ไม่อ่ะครับ
ป้า: (หน้าตายิ้มหวาน) ซื้อหน่อยนะ 20 เม็ด 20 บาทเอง
ผม: (ยิ้ม หัวเราะแหะๆ) อ่า ไม่อ่ะครับ
ป้า: (หน้าตายิ้มหวาน) ซื้อโค๊กมั้ย 2 ขวด 20 บาท (พอดีเห็น Big Cola อยู่ถุงที่แกถืออยู่)
ผม: (ยิ้ม หัวเราะแหะๆ) อ่า ไม่อ่ะครับ
ป้า: (หน้าตาบุญไม่รับ) คนใจดำ …..

แล้วป้า (หรือยายวะ) แกก็บ่นอะไรมุบมิบๆ ของแกไป แล้วก็พยายามสบตาคนนั้นคนนี้ในรถเมล์ต่อไป ….

ไอ้สัด ไมกูขำวะ