Skip to content
Grok

การทำงานแบบขนาน (Parallelism)

โดยค่าเริ่มต้น Vitest จะรันไฟล์ทดสอบแบบขนาน ขึ้นอยู่กับ pool ที่กำหนด Vitest จะใช้กลไกที่แตกต่างกันในการทำงานแบบขนาน:

  • forks (ค่าเริ่มต้น) และ vmForks รันการทดสอบในโปรเซสลูกที่แตกต่างกัน
  • threads และ vmThreads รันการทดสอบในเธรดเวิร์กเกอร์ที่แตกต่างกัน

ทั้ง "โปรเซสลูก" และ "เธรดเวิร์กเกอร์" ถูกเรียกว่า "workers" คุณสามารถกำหนดค่าจำนวนเวิร์กเกอร์ที่ทำงานด้วยตัวเลือก minWorkers และ maxWorkers หรือกำหนดค่าอย่างละเอียดด้วยการตั้งค่า poolOptions

หากคุณมีการทดสอบจำนวนมาก การรันแบบขนานมักจะเร็วกว่า แต่ก็ขึ้นอยู่กับโปรเจกต์ สภาพแวดล้อม และสถานะการแยก (isolation) ด้วย หากต้องการปิดการทำงานแบบขนานของไฟล์ คุณสามารถตั้งค่า fileParallelism เป็น false หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับการปรับปรุงประสิทธิภาพ โปรดอ่าน คู่มือประสิทธิภาพ

การทำงานแบบขนานของการทดสอบ

ต่างจากไฟล์ทดสอบ Vitest จะรันการทดสอบตามลำดับ ซึ่งหมายความว่าการทดสอบภายในไฟล์ทดสอบเดียวกันจะทำงานตามลำดับที่กำหนดไว้

Vitest รองรับตัวเลือก concurrent เพื่อรันการทดสอบพร้อมกัน หากตั้งค่านี้ Vitest จะจัดกลุ่มการทดสอบแบบขนานในไฟล์เดียวกัน (จำนวนการทดสอบที่ทำงานพร้อมกันขึ้นอยู่กับตัวเลือก maxConcurrency) และรันพวกมันด้วย Promise.all

Vitest ไม่ได้ทำการวิเคราะห์อัจฉริยะและไม่ได้สร้างเวิร์กเกอร์เพิ่มเติมเพื่อรันการทดสอบเหล่านี้ ซึ่งหมายความว่าประสิทธิภาพของการทดสอบจะดีขึ้นเฉพาะเมื่อคุณพึ่งพาการทำงานแบบอะซิงโครนัสเป็นหลัก ตัวอย่างเช่น การทดสอบเหล่านี้จะยังคงทำงานทีละอันแม้ว่าจะระบุตัวเลือก concurrent ก็ตาม เนื่องจากพวกมันเป็นแบบซิงโครนัส:

ts
test.concurrent("การทดสอบแรก", () => {
  expect(1).toBe(1);
});

test.concurrent("การทดสอบที่สอง", () => {
  expect(2).toBe(2);
});

หากคุณต้องการรันการทดสอบทั้งหมดแบบขนาน คุณสามารถตั้งค่า sequence.concurrent เป็น true