• node หรือ node.js มันคืออะไรนะ แล้วมันดียังไง

    ผมจะถือว่า ทุกท่านยังไม่รู้ และ ไม่เข้าใจ เรื่องของ node.js มาก่อนนะครับ เปรียบเสมือนกับ แก้วที่ว่างเปล่า และผมจะทำการเติมน้ำ ในแก้วของท่านให้เอง คราวนี้มาด้วยเรื่องของ node.js ครับ

    mean

     

    node.js เนี่ย ผมไม่รู้จะนิยามมันยังไง เพราะว่า มันไม่ใช่ภาษาใหม่ และมันไม่ใช่ตัว compiler ใหม่ ที่ถ้าเอาไปเทียบกับ PHP เราก็จะเข้าใจตรงกันว่า PHP มันคือ ภาษา computer นะ แต่ node.js เนี่ย เวลาเราจะเขียนมัน syntax ที่เราใช้มันคือ ภาษา JavaScript เหมือนที่เราใช้เขียนหน้าเว็บนี่แหล่ะ ผมก็เลยบอกว่า มันไม่ใช่ภาษาใหม่ ส่วนที่บอกว่า มันไม่ใช่ compiler ตัวใหม่ ก็เพราะว่า node.js มันใช้ compiler ของ google JavaScript engine V8

    implementing-a-javascript-engine-18-638

    สรุป มันคือ อะไรไม่รู้ เรียกมันว่า node.js หรือ เรียกกันสั้นๆว่า node แล้วกัน แต่ถ้าให้ผมอธิบายตามความเข้าใจแบบพอมองเห็นภาพ มันคือ environment ครับ หรือ สภาพแวดล้อม ที่ช่วยให้เราทำงานได้ง่าย และเร็ว พร้อมตัวช่วยต่างๆ ที่เหมาะสมนั่นเอง

    node.js ต่างจาก PHP อย่างไร

    ผมว่า นี่ต้องเป็นคำถามสุดฮิต ไม่ถามไม่ได้ เพราะขนาดตัวผมเอง ยังต้องถามเหมือนกัน คำตอบ ของความแตกต่าง ระหว่าง php กับ node.js ที่ไม่นับเรื่อง ภาษาที่ใช้เขียน  (php เขียนด้วย php, node.js เขียนด้วย JavaScript) ก็คือ วิธีการทำงานของมัน php กับ node.js ทำงานแตกต่างกันโดยสิ้นเชิง

    php-vs-node

    อย่างที่เรารู้กันอยู่แล้ว ว่า PHP เวลาทำงาน มันจะเริ่มทำงานตั้งแต่บรรทัดแรกของไฟล์ .php ไปทีละบรรทัด ไปเรื่อยๆ จนถึงบรรทัดสุดท้าย สมมุติว่า บรรทัด ส่วนเริ่มต้นของไฟล์ .php ทำงาน นาน 1 วินาที (เช่น ไปเปิดไฟล์ที่มีขนาดใหญ่ขึ้นมาอ่าน) และส่วนอื่นทำงาน 0.5 วินาที ผลที่ได้ ก็คือ หน้า php นั้น จะใช้เวลาประมวลผล 1.5 วินาทีถึงจะเสร็จ แต่กับ node.js ถ้าเราสั่งให้มันทำงานเหมือนกัน ผลที่ได้จะออกมาประหลาด ก็คือ มันจะรัน บรรทัดแรก ไปทีละบรรทัดเหมือนกัน แต่ว่า ถ้าการทำงานบางอย่างที่ต้องใช้เวลา (เช่น การเปิดอ่านไฟล์ขนาดใหญ่) มันก็จะเริ่มทำงานสิ่งนั้น แล้วข้ามไปทำสิ่งใหม่ต่อเลย โดยที่สิ่งที่พึ่งทำผ่านไปยังไม่เสร็จเลย ด้วยซ้ำ ตรงนี้ สำคัญมาก มันคือ key ของ node.js เลยนะครับ ถ้าไม่เข้าใจ อนุญาตให้อ่านใหม่ซ้ำๆครับ ฮา คือ ยกตัวอย่างว่า เปิดไฟล์ text ขนาดใหญ่ขึ้นมาอ่าน แล้ว บรรทัดต่อไป สั่งให้เอา text ที่ได้ มาแสดงผล ผลลัพท์ที่เราได้ จะเป็น text แบบขาดหาย(ไม่สมบูรณ์ทั้งไฟล์) เพราะว่ามันยังเปิดอ่านไฟล์ไม่เสร็จมันก็ข้ามไปแสดงผลต่อเลย นี่คือสิ่งที่มันทำครับ

    แต่อย่าพึ่งตกใจไป เพราะว่า นี่คือข้อดีของมันเลยนะครับ (มันจะดียังไงเนี่ย ทำงานไม่เสร็จ ข้ามไปทำงานอื่นต่อแล้ว) ขอให้อ่านต่อไปจนจบครับ

    ลองนึกภาพดังนี้นะครับ จะได้เข้าใจเลย

    php เปรียบเหมือน พนักงาน 1 คน ที่จะต้องทำงานไป ทีละบรรทัด โดยมีเงื่อนไขบังคับว่า ถ้างานที่ทำอยู่ยังไม่เสร็จ ห้ามทำงานชิ้นต่อไป พนักงาน php เลยต้องทำงานไปเรื่อยๆ ทีละชิ้น จนเสร็จ ทีละชิ้น จนเสร็จ จนเสร็จหมดทุกชิ้น (ทุกบรรทัด) ถึงจบ

    node.js เปรียบเหมือน เจ้านาย 1 คน ที่มีลูกน้องไม่จำกัดจำนวน เจ้านายก็จะออกไปเดินสำรวจงาน ทีละชิ้น(ทีละบรรทัด) ว่ามีอะไร ทำยังไง แล้วสั่งให้ลูกน้องไปทำ พอตัวเองสั่งเสร็จปุ้บ โดยไม่รับรู้เลย ว่างานที่สั่งไปเสร็จหรือยัง ก็ไปดูงานต่อไปเลย (บรรทัดต่อไป) ว่าต้องทำอะไรยังไง แล้วก็สั่งลูกน้องคนใหม่ ให้ทำงานต่อไป นี่เลยการเป็นเหตุผลที่ ทำไม งานแรกยังไม่ทันเสร็จ ก็ไปทำงานที่สองแล้ว เพราะว่า node.js ไม่ทำงานเอง ตัวเองเป็นเจ้านายชี้นิ้วสั่งอย่างเดียว

    แต่ถ้าสงสัยว่า ถ้าสั่งให้ node.js ทำงานโดยจะบังคับให้ทำงานเสร็จทีละงาน เพราะต้องเอาผลลัพท์ของงานแรกมาใช้ในงานที่สอง แบบนี้ได้หรือเปล่า คำตอบคือได้ครับ ก็คือ เมื่อประมวลผลเสร็จ ให้มี callback ครับ  เจ้า callback นี่แหล่ะ จะเป็นตัวกระตุ้นงานที่สองให้ทำงานต่อจากงานแรก พร้อมทั้งใส่ผลที่ได้จากงานแรกลงไปด้วยเลย

    node.js เหนือกว่า php อย่างไร

    ต่อเนื่องจากตัวอย่างข้างบน ลองนึกถึงบริษัทไหนก็ได้ มีบริษัทไหนบ้าง ที่กล้าจ้างลูกน้องเงินเดือนเยอะกว่าหัวหน้า? เพราะการมีหัวหน้าสำคัญกว่าแน่นอน (แต่ก็ขาดลูกน้องไม่ได้นะ)

    ถ้าจะเอางานจริงมายกตัวอย่างก็คือ ถ้าสมมุติว่า เรามีงานประมวลผล graph ที่ต้องคำนวน นาน 1 นาที กว่าเราจะเอาผลมาแสดงได้ หากเราใช้ php เราจะพบว่าเราเปิด 100คนพร้อมกัน ก็เริ่มออกอาการจะไม่ไหวแล้ว แต่หากเราใช้ node.js เปิด 100 คนพร้อมกัน แต่มันยังรับคนที่ 101 ได้สบาย เพราะอย่างที่บอก node.js ไม่ได้ทำเอง รับงานมาแล้วก็ส่งให้ลูกน้องทำ นั่นเลยเป็นเหตุผลที่ทำให้ node.js เร็วกว่านั่นเอง

     

     

    ขอบคุณ

    http://meewebfree.com/site/nodejs/440-what-is-about-nodejs

    Comments

    comments

Comments are closed.