วันพฤหัสบดีที่ 6 สิงหาคม พ.ศ. 2558

laravel ทั้ง phalcon และ nodejs

ผมเขียนมาทั้งหมดแล้ว ทั้ง laravel ทั้ง phalcon และ nodejs มีคนถามมา อะไรเร็วกว่ากัน ไหนๆ ก็เขียนมายาวเลยเอามาแปะให้อ่านกันเพิ่ม
ก่อนอื่น laravel คือ framework ส่วน nodejs คือภาษา เอามาเทียบกันไม่ได้ ถ้าจะถามเทียบกับ ต้องถามว่า php กับ nodejs ต่างกันยังไง
ดังนั้นผมจะตอบในคำถามนี้แทน php กับ nodejs ต่างกันยังไง ก่อนอื่นทั้งสองตัวต่างกันมาก nodejs จะไวกว่ามาก เพราะเป็นภาษากลุ่ม non-blocking มันสามารถทำงานแบบ async ได้ ซึ่งไม่ต้องรอการทำงาน แนวการเขียนจะต่างจาก php ไปสินเชิง เพราะ nodejs ต้องเขียนเชิง event/callback driven ของพวกนี้จะไม่รู้ความต่างถ้าคนเขียนนั้นๆ ไม่เคยศึกษาเรื่อง design pattern มาเยอะพอ ดังนั้นบอกเลย แนวการเขียนต่างกันมาก เพราะ nodejs มันคือ javascript
ต่อมาข้างบนมีคนพูดบอก phalcon สู้ nodejs ได้ในเรื่องความไว บอกเลยว่า phalcon มันก็ php framework ที่เปลี่ยนโค้ดตัวเองเป็น php extension ก่อนอื่นมันช้ากว่า php native เพราะยังไงมันก็เป็น framework ที่ทำงานทับขึ้นมา ไม่มีทางไวกว่า native เพียวๆ
พิมพ์มาถึงตรงนี้จะมีคำถามล่ะ แล้วตอนนี้ควรใช้อะไร อย่างงานผมล่าสุดใช้ phalcon ก่อนหน้าคือ laravel 5 และ 4 แต่ไม่มีสักอันที่ผมเขียนขึ้น production ด้วย nodejs เพราะ?
1. หาคนเขียนดีๆ ยาก javascript เป็นภาษาที่ละเอียดอ่อน ทดลอง console.log(0.1+0.2);
จะได้ผลลัพท์เป็น 0.30000000000000004 เป็นทั้งบน browser และ nodejs เรื่องพวกนี้หลายคนไม่รู้ เผลอไปเขียนเรื่องเงินๆ ทองๆ มีตาย (อ่านเพิ่มhttp://floating-point-gui.de/basic/)
2. javascript ไม่สามารถรักษา design pattern ดีๆ ไว้ด้วย เพราะด้วยความที่ยังเป็น OOP แบบลูกพี่ลูกคน แน่นอนเขียนงานเสร็จได้ แต่โปรแกรมที่ได้มักไม่รอดจาก penetration testing ไม่ได้ ต่อให้รอดได้ด้วยการเขียนแบบรัดกุม โค้ดนี้จะไม่มีคนอื่น maintenance ได้เลยนอกจากคนเขียน (มีแต่พระเจ้าเท่านั้นที่รู้)
3. nodejs เป็น engine ที่ทำการ scale out ระบบลำบาก ตัวมันทำงานแบบ single core ตลอดจนกว่าจะเขียน cluster เอง ไม่งั้นต่อให้เครื่องมี cpu 16 core มันก็ใช้ core เดียวเสมอ (หลายคนเลือกไป go lang แทนด้วยเหตุผลนี้)
ส่วนข้อดีล่ะ
1. แนวคิดของ nodejs คือการทำภาษามา execute ทำให้เราเขียนโปรแกรมด้วยแนวคิดที่ไม่เหมือน php ได้ เช่น ทำ variable caching บน memory ได้แล้ว เพราะ process ไม่ถูก terminate ตอนจบ request แต่ถูก reuse ได้
เราจึงสามารถทำงานบางอย่างเช่น เข้าเว็บนับ view ก็ให้อัพเดตลงตัวแปรไว้ แล้วทุกๆ 5 นาที ค่อยยิงไปเขียน db ทีเดียว เป็นต้น
2. ด้วย nature ของ javascript อย่างที่พูดไปข้างต้น มันเร็วมาก และรับ concurrent ได้สูงด้วย
3. เราสามารถทำบริการพิเศษเช่น websocket ได้แล้วด้วยเหตุผลตามข้อ 1
และยังมีเรื่องข้อควรติ แต่มีทางแก้ไข
เนื่องจาก nodejs ถูกออกแบบมาเป็น execution ที่รองรับการเรียก http ได้ถูกตรง ไม่จำเป็นต้องมี webserver มาคั่น แต่ nodejs กลับไม่สามารถเป็น full-stack server ได้ เพราะการส่ง static content ทำได้ช้ากว่า nginx ซะอีก และ nodejs สามารถเขียนให้รองรับหลายโดเมนได้ (นึกถึง vhost ใน apache) แต่ก็ลำบากจนคิดว่าเอา nginx มาครอบยังสบายกว่า
ผมบอกเลย ไม่มีภาษาไหนดีสุด อย่าง golang ที่ผมมีพิมพ์ไป เรื่องการ handle error ก็ห่วย ดังนั้นศึกษาให้เยอะแล้วเลือกใช้ให้ถูกครับ ของแรงๆ ถ้ารับมือได้ก็ใช้เลยครับ
//โจ้

ไม่มีความคิดเห็น:

แสดงความคิดเห็น