Skip to content

Category: Software Development

Node.js | ข้อควรระวังการใช้งาน Async/Await กับ forEach()

หลายคนเข้าใจว่า function ใดๆ ที่รับ callback function เป็น parameter จะทำงานแบบ async เสมอ ซึ่งเป็นความเข้าใจที่ผิด (ผมก็เคยเข้าใจแบบนั้น) แต่บาง function ก็ทำงานแบบ synchrous นะครับ เช่น  forEach()  ที่เป็น built-in function ของ collection ใน JavaScript ก็ทำงานแบบ synchronous เช่นกัน ดู spec ที่นี่

สมมุติว่าผมต้องการ ใช้ async/await กับ forEach() ผมก็สามารถใช้งาน async กับ callback function ที่ส่งเข้าไป เพื่อให้ใช้ await ได้เช่นกัน ดูตัวอย่างโค้ดนี้ครับ

Leave a Comment

Node.js | ลองใช้งาน Async/Await กับ Node 7

Node 7 ออกแล้วนะครับ ตอนนี้รองรับ Es6 features ถึง 98% แล้ว ที่นักพัฒนาดูจะให้ความสนใจกันเป็นพิเศษคือสามารถใช้งาน async/await ซึ่งเป็น synctax  ของ Es7 ได้โดยไม่ต้องติดตั้งตัว transpile อย่าง Babel เพิ่มเติม

แต่ …. ยังไม่ได้เปิดใช้งานเป็นค่า default ถ้าอยากใช้ async/await ต้องใส่ option --harmony-async-await  ตอนรัน 

Leave a Comment

บันทึกการใช้งาน Socket.io v1 และประเด็นที่น่าสนใจ

ใครที่ใช้ Node.js ในการทำ real-time application น่าจะรู้จัก WebSocket และ Socket.io กันเป็นอย่างดี ตอนนี้ Socket.io เดินทางมาถึง version 1 แล้ว (ล่าสุดที่ผมเขียนโพสต์นี้คือ 1.5.0) ซึ่งก็มีหลายอย่างเปลี่ยนไปจากรุ่น 0.9 ค่อนข้างมาก หลายโปรเจกต์ที่ผมเคยเขียนไว้ด้วย version 0.9 ตอนนี้ก็ outdated ไปแล้วไม่สามารถใช้งาน version 1 ได้ แต่ก็มีบางงานที่ใช้ version 1 แล้ว พบประเด็นที่น่าสนใจเลยอยากบันทึกไว้สักหน่อย

Leave a Comment

ทำ Ranking/Leaderboard ด้วย Redis #2

โพสต์ที่แล้ว “ทำ Ranking/Leaderboard ด้วย Redis #1” แล้วผมทำ ranking แบบอันดับซ้ำกันและข้ามอันดับได้ คราวนี้ลองมาทำอีกแบบคืออันดับซ้ำกันและไม่มีการข้ามอันดับดูบ้าง  ranking ที่เราคาดหวังจะเป็นแบบนี้

Leave a Comment

ทำ Ranking/Leaderboard ด้วย Redis #1

โจทย์ของผมคือผมต้องการ

  1. Ranking ที่อัปเดตแบบ real-time
  2. ไม่ query จาก database โดยตรงและ query บ่อยๆ
  3. Rank หรืออันดับสามารถซ้ำได้

จากข้อ 3 อันดับซ้ำกันได้มี 2 แบบ ตัวอย่างเช่น

แบบที่ 1 non-skipped ranking

แบบที่ 2 skipped ranking

1 Comment

MongoDB | find() ด้วย Regular Expression แบบไหน ใช้/ไม่ใช้ index

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

คำสั่ง find() ของ MongoDB นั้นรองรับการ query ด้วย Regular Expression โดยสามารถเขียน syntax แบบ PCRE (Perl Compatible Regular Expression) ตัวอย่างเช่น

Leave a Comment

ทดลองใช้ Redis cache ข้อความยาวๆ เพื่อดูการใช้ memory

Update: หลังจากตามอ่านเรื่อง memory optimization ของ Redis แล้วพบว่า default config <datatype>-max-ziplist-entries และ <datatype>-max-ziplist-value ซึ่งในกรณีนี้คือ hash-max-ziplist-entries และ hash-max-ziplist-value ไม่เหมาะสมกับข้อความที่ใช้ในการทดลอง เพราะ Redis จะ encode ข้อมูลก็ต่อเมื่อขนาดหรือจำนวนข้อมูลน้อยกว่า hash-max-ziplist-entries และ hash-max-ziplist-value ที่ เรา set ไว้ โดย default จะเป็น 512 และ 64 ตามลำดับ

Redis เป็น in-memory key-value storage ที่นิยมใส่เข้ามาใน software stack เพื่อ cache ข้อมูล ในเว็บ official ของ Redis เองแนะนำว่ากรณีที่เราใช้ set เก็บข้อมูลจะใช้ memory เยอะ ยิ่งขนาดข้อมูลยาวก็ยิ่งใช้เยอะ เลยแนะนำให้ใช้ hset จะดีกว่าเพราะข้อมูลจะถูก encode ใน memory ดีกว่า ทำให้ใช้ memory น้อยกว่า โดย time complexity ยังเป็น O(1) เท่าเดิม

Leave a Comment