blockly > Events > filter

ฟังก์ชัน Events.filter()

กรองเหตุการณ์ที่รอดำเนินการโดยการผสานรายการที่ซ้ำกัน นำเหตุการณ์ Null ออก และจัดเรียงเหตุการณ์ BlockChange ใหม่

ประวัติของฟังก์ชันนี้

ฟังก์ชันนี้เดิมเพิ่มไว้ในคอมมิต cf257ea5 โดยมีจุดประสงค์เพื่อลดจํานวนเหตุการณ์ทั้งหมดที่ส่งออกไปอย่างมาก ในช่วงแรก เหตุการณ์นี้มีผลกับเหตุการณ์ BlockMove เท่านั้น แต่ต่อมาก็มีการเพิ่มเหตุการณ์อื่นๆ

เพิ่มโค้ดเพื่อจัดเรียงเหตุการณ์ BlockChange ที่เพิ่มในคอมมิต 5578458 ใหม่ด้วยเหตุผลที่ไม่แน่ชัด แต่น่าจะเป็นส่วนหนึ่งของความพยายามที่ประสบความสำเร็จเพียงบางส่วนในการแก้ไขปัญหาการจัดเรียงเหตุการณ์ระหว่างการเปลี่ยนรูปแบบบล็อก โค้ดนี้ควรเพิ่มไว้ที่ด้านบนของฟังก์ชันก่อนการผสานและการนำค่า Null ออก แต่เพิ่มไว้ที่ด้านล่างด้วยเหตุผลที่ตอนนี้ลืมไปแล้ว ดูการสืบสวนข้อบกพร่องเหล่านี้เพื่อพูดคุยเกี่ยวกับปัญหาพื้นฐานและความล้มเหลวบางอย่างที่เกิดขึ้นเนื่องจากการแก้ไขที่ไม่สมบูรณ์/ไม่ถูกต้อง

https://github.com/google/blockly/issues/8225#issuecomment-2195751783 https://github.com/google/blockly/issues/2037#issuecomment-2209696351

ต่อมาใน PR #1205 การติดตั้งใช้งาน O(n^2) เดิมถูกแทนที่ด้วยการติดตั้งใช้งานแบบเวลาเชิงเส้น แม้ว่าจะมีการแก้ไขเพิ่มเติมในภายหลัง

ในเดือนสิงหาคม 2024 เราได้ทําการเปลี่ยนแปลงที่สำคัญหลายอย่างเพื่อลดความซับซ้อน ดังนี้

ก่อนหน้านี้ฟังก์ชันนี้เรียกจาก Workspace.prototype.undo แต่การเปลี่ยนแปลงเหตุการณ์โดยฟังก์ชันนี้เป็นสาเหตุของปัญหา #7026 (โปรดทราบว่าเหตุการณ์จะรวมกันแตกต่างกันเมื่อเรียงลำดับย้อนกลับกับเรียงลำดับไปข้างหน้า) การแก้ไขที่เลือกไว้ตั้งแต่แรกสำหรับปัญหานี้คือการเพิ่มโค้ด (ใน PR #7069) ลงใน fireNow เพื่อกรอง .undoStack_ และ .redoStack_ ของเวิร์กスペースที่เพิ่งมีส่วนร่วมในการส่งเหตุการณ์ในขั้นตอนหลังการประมวลผล ดูเหมือนว่าวิธีนี้จะแก้ไขปัญหาได้ แต่เพิ่มความซับซ้อนมากขึ้นและทำให้พิจารณาวิธีการประมวลผลเหตุการณ์สำหรับการเลิกทำ/ทำซ้ำได้ยาก ดังนั้นจึงนำทั้งการเรียกจากเลิกทำและโค้ดหลังการประมวลผลออก และกำหนดให้ forward=true เป็นค่าเริ่มต้น ขณะที่เลิกใช้งานการเรียกฟังก์ชันด้วย forward=false

ในขณะเดียวกัน เราได้แทนที่โค้ดที่มีข้อบกพร่องในการเรียงลําดับเหตุการณ์ BlockChange ใหม่ด้วยฟังก์ชันการทำงานเดียวกันเวอร์ชันที่ข้อบกพร่องน้อยลงในฟังก์ชันใหม่ชื่อ enqueueEvent ซึ่งเรียกใช้จาก fireInternal เพื่อให้มั่นใจว่าเหตุการณ์จะอยู่ในลําดับที่ถูกต้องเมื่อเรียกใช้ตัวกรอง

นอกจากนี้ เรายังได้แก้ไขโค้ดการผสานเหตุการณ์เพื่อให้ผสานเฉพาะเหตุการณ์ที่อยู่ติดกันเท่านั้น วิธีนี้ช่วยให้การติดตั้งใช้งานง่ายขึ้น ในขณะเดียวกันก็ช่วยให้มั่นใจว่าการผสานเหตุการณ์จะไม่ทําให้ระบบจัดเรียงเหตุการณ์ใหม่

ลายเซ็น:

export declare function filter(queue: Abstract[]): Abstract[];

พารามิเตอร์

พารามิเตอร์ ประเภท คำอธิบาย
คิว บทคัดย่อ[] อาร์เรย์ของเหตุการณ์

การคืนสินค้า:

บทคัดย่อ[]

อาร์เรย์ของเหตุการณ์ที่กรอง