คุณลักษณะการเธรดเดี่ยวของเอ็นจิ้น JavaScript ทำให้เป็นไปได้ที่จะเป็นเธรดพิเศษเป็นเวลานานเมื่อจัดการกับการสำรวจวงวนขนาดใหญ่ส่งผลให้เกิดเหตุการณ์อื่น ๆ (เช่นการดำเนินงานของผู้ใช้) ไม่สามารถตอบสนองได้ในเวลาและในกรณีที่รุนแรงอาจทำให้เกิดความล่าช้าหรือแม้กระทั่งการเสียชีวิตปลอม เพื่อแก้ปัญหาข้างต้นกลไกที่เป็นไปได้คือการแยกลูปขนาดใหญ่ออกเป็นชิ้นส่วนลูปขนาดเล็กหลายชิ้นเพื่อดำเนินการชิ้นส่วนเพื่อให้เอ็นจิ้น JavaScript มีโอกาสที่จะแทรกและดำเนินการสิ่งอื่น ๆ ระหว่างเซ็กเมนต์ดังนั้นจึงปรับปรุงประสบการณ์การปฏิบัติงานได้อย่างมีประสิทธิภาพ
ansync.js
การคัดลอกรหัสมีดังนี้:
ฟังก์ชั่น Ansync (TotalCount, SegmentCount, WorkCallback, ReturnCallback)
-
var num_of_item_for_each_segment = segmentCount;
var num_of_segment = math.ceil (TotalCount / num_of_item_for_each_segment);
var count_of_segment = 0;
ตัวจับเวลา var;
var start, end;
this.process = function (ขอบเขตหมดเวลา)
-
ถ้า (ขอบเขต! = ไม่ได้กำหนด)
-
WorkCallback = WorkCallback.bind (ขอบเขต);
returnCallback = returnCallback? returncallback.bind (ขอบเขต): ไม่ได้กำหนด;
-
if (count_of_segment == num_of_segment)
-
ClearTimeout (ตัวจับเวลา);
if (returnCallback! = ไม่ได้กำหนด)
returncallback ();
-
อื่น
-
start = count_of_segment * num_of_item_for_each_segment;
end = math.min (TotalCount, (count_of_segment + 1) * num_of_item_for_each_segment);
if (num_of_segment == 1) // ไม่จำเป็นต้องสร้างตัวจับเวลา
-
WorkCallback (เริ่มต้นจบ);
count_of_segment = 1;
this.process ();
-
อื่น
-
timer = settimeout (ฟังก์ชั่น ansynctimeout () {
if (workCallback (start, end)) // เสร็จสิ้นกระบวนการถ้าฟังก์ชั่นส่งคืนจริง
-
count_of_segment = num_of_segment;
-
อื่น
-
count_of_segment ++;
-
this.scope.process ();
} .bind ({ขอบเขต: this}), หมดเวลา == ไม่ได้กำหนด? ansync.timeout: หมดเวลา);
-
-
-
-
ansync.timeout = 5;
วิธีนี้ง่ายมาก แต่ก็ใช้ได้จริงมาก โปรดอ้างอิงหากคุณมีข้อกำหนดโครงการเดียวกัน