หมายเหตุ: บทความนี้คัดลอกมาจากหนังสือ "ความลับของ JavaScript Ninja" โดย John Resig ฉันแปลเพื่อการเรียนรู้ของทุกคนเท่านั้น โปรดแก้ไขฉันหากมีข้อบกพร่องในการแปล
บทความนี้จะอธิบายตัวจับเวลาเป็นหลักจากประเด็นต่อไปนี้:
ตัวจับเวลาเป็นสิ่งที่เราไม่ค่อยเข้าใจและมักถูกนำไปใช้ในทางที่ผิด จริงๆ แล้ว มันสามารถช่วยเราได้มากในการพัฒนาแอพพลิเคชั่นที่ซับซ้อน ตัวจับเวลาให้ความสามารถในการหน่วงเวลาการประมวลผลโค้ดแบบอะซิงโครนัสโดยธรรมชาติแล้ว JavaScript เป็นแบบเธรดเดียว (เฉพาะส่วนหนึ่งของโค้ด js เท่านั้นที่สามารถทำงานได้ภายในช่วงเวลาหนึ่ง) ตัวจับเวลาทำให้เรามีวิธีหลีกเลี่ยงวิธีการจำกัดนี้ อีกหนึ่งวิธีในการรันโค้ด
สิ่งที่น่าสนใจคือตรงกันข้ามกับความเชื่อที่ยอมรับกันโดยทั่วไป ตัวจับเวลาไม่ได้เป็นส่วนหนึ่งของภาษา JavaScript แต่เป็นส่วนหนึ่งของวิธีการและวัตถุที่เบราว์เซอร์แนะนำ ซึ่งหมายความว่าหากคุณเลือกที่จะรันในสภาพแวดล้อมที่ไม่ใช่เบราว์เซอร์ อาจเป็นไปได้ว่าจะไม่มีตัวจับเวลา และคุณจะต้องปรับใช้เวอร์ชันของคุณเองโดยใช้ฟังก์ชันเฉพาะ (เช่น Rhino threads)
1. ตัวจับเวลาทำงานอย่างไร
โดยพื้นฐานแล้ว สิ่งสำคัญคือต้องเข้าใจวิธีการทำงานของตัวจับเวลา บ่อยครั้งที่พฤติกรรมของตัวจับเวลานั้นไม่เป็นไปตามสัญชาตญาณเพราะมันอยู่ในเธรดที่แยกจากกัน เรามาเริ่มด้วยการทดสอบฟังก์ชันสามอย่างกัน ซึ่งแต่ละฟังก์ชันเรามีโอกาสที่จะสร้างและควบคุมตัวจับเวลา
เพื่อให้เข้าใจถึงวิธีการทำงานของตัวจับเวลาภายใน มีแนวคิดสำคัญที่ต้องพูดคุยกัน: ไม่รับประกันความล่าช้า เนื่องจาก JavaScript ทั้งหมดในเบราว์เซอร์ทำงานในเธรดเดียว เหตุการณ์แบบอะซิงโครนัส (เช่น การคลิกเมาส์ ตัวจับเวลา) จะทำงานเมื่อมีสถานะเปิดระหว่างการดำเนินการเท่านั้น ตัวอย่างต่อไปนี้แสดงให้เห็นถึงปัญหานี้ได้ดี:
มีข้อมูลมากมายที่ต้องแยกแยะในไดอะแกรมนี้ การทำความเข้าใจอย่างถ่องแท้จะทำให้คุณมีแนวคิดที่ดีขึ้นเกี่ยวกับการดำเนินการ js แบบอะซิงโครนัส ไดอะแกรมเป็นแบบมิติเดียว ในทิศทางแนวตั้งคือเวลา (นาฬิกาแขวน) วัดเป็นมิลลิวินาที กล่องสีน้ำเงินแสดงถึงสัดส่วนของการดำเนินการ js ตัวอย่างเช่น บล็อกจาวาสคริปต์แรกใช้เวลาประมาณ 18 วินาทีในการรัน การคลิกเมาส์จะใช้เวลาประมาณ 11 วินาที และต่อๆ ไป