มีประสิทธิภาพเพิ่มขึ้นเมื่อเพิ่มความเฉพาะเจาะจงในเหตุการณ์ที่ได้รับมอบหมายที่ผูกกับ .on()
หรือไม่
เราจะทดสอบสิ่งนี้ได้อย่างไร?
ตัวอย่างเช่น คำสั่งที่สองมีประสิทธิภาพมากกว่าคำสั่งแรก:
$('.foo').on('mouseenter', ':has(.other)', function (e) {
console.log(e);
});
$('.bar').on('mouseenter', 'button:has(.other)', function (e) {
console.log(e);
});
$('.foo').on('mouseenter', ':has(.other)', function (e) {
console.log(e);
});
$('.bar').on('mouseenter', 'button:has(.other)', function (e) {
console.log(e);
});
.foo, .bar {
margin: 2em auto;
text-align: center;
}
<div class="foo">
<button type="button">Hello
<span class="other">World</span>
</button>
</div>
<div class="bar">
<button type="button">Hello
<span class="other">World</span>
</button>
</div>
ข้อกังวลหลักของฉันคือการฟังเหตุการณ์ mouseenter
ด้วยการมอบหมายจะทำให้ประสิทธิภาพลดลง และมีวิธีทดสอบประสิทธิภาพในตัวจัดการเหตุการณ์ประเภทนี้หรือไม่
อัปเดต
ฉันควรชี้แจงว่าฉันไม่ต้องการเข้าใจผลการปฏิบัติงานของการใช้การมอบหมายโดยทั่วไป ฉันหวังว่าจะเข้าใจความหมายของประสิทธิภาพของการใช้การมอบหมายด้วย mouseenter
ในระหว่างการโต้ตอบของผู้ใช้ (เนื่องจากเมาส์ของผู้ใช้เข้าสู่องค์ประกอบทั้งที่ได้รับมอบหมายและไม่ได้รับมอบหมายภายในองค์ประกอบที่ถูกผูกไว้) และหากมีประสิทธิภาพเพิ่มขึ้นโดยใช้ตัวเลือกที่เฉพาะเจาะจงมากขึ้นสำหรับการมอบหมาย .
ความโน้มเอียงของฉันคือการถือว่าไม่มีเพราะทุกเหตุการณ์จะต้องฟองขึ้นไปที่องค์ประกอบที่ถูกผูกไว้ก่อนที่จะถูกตรวจสอบกับตัวเลือกที่ได้รับมอบหมาย
แต่มีวิธีทดสอบสิ่งนี้หรือไม่?
mouseenter
และหากมีประสิทธิภาพเพิ่มขึ้นโดยใช้ตัวเลือกที่เฉพาะเจาะจงมากขึ้นสำหรับการมอบหมาย ความโน้มเอียงของฉันคือการถือว่าไม่มีเพราะทุกเหตุการณ์จะต้องฟองขึ้นไปที่องค์ประกอบที่ถูกผูกไว้ก่อนที่จะถูกตรวจสอบกับตัวเลือกที่ได้รับมอบหมาย แต่มีวิธีทดสอบสิ่งนี้หรือไม่? - person gfullam   schedule 13.02.2015:has
ในการเรียกclosest
(เหมือนกับที่on
ทำเบื้องหลัง) จะมีประสิทธิภาพ เลวร้าย ฉันจะทดสอบหาbutton
ในตัวเลือกแล้วใช้เมธอด.has()
ในการโทรกลับ - person lonesomeday   schedule 13.02.2015:has
selector ไม่ได้อยู่ในของคุณ สตริงตัวเลือก มันเป็นตัวเลือก jQuery ไม่ใช่เบราว์เซอร์ดั้งเดิมและช้ามาก คุณกำลังใช้มันกับทุกองค์ประกอบในแผนผัง หากคุณทำการทดสอบอื่น ให้พูดว่าbutton
จากนั้นใช้.has
ฟังก์ชัน เพื่อทดสอบองค์ประกอบนั้น องค์ประกอบนั้นจะมี ประสิทธิภาพที่ดีขึ้นมากเนื่องจากสามารถใช้ความสามารถภายในของเบราว์เซอร์ได้ดีขึ้น - person lonesomeday   schedule 13.02.2015:has
เพราะคุณไม่สามารถโยง.has
กับตัวเลือกที่ได้รับมอบหมายได้ - สามารถทำได้ เชื่อมโยงกับองค์ประกอบ DOM ที่มีอยู่เท่านั้น และในขณะที่เชื่อมโยง องค์ประกอบนั้นจะไม่อยู่ที่นั่น เนื่องจากการใช้:has
ของฉัน ฉันจึงกังวลเกี่ยวกับการค้นหาประสิทธิภาพอื่นๆ ที่เพิ่มขึ้น สิ่งสำคัญสำหรับฉันคือต้องทำความเข้าใจว่าเกิดอะไรขึ้นและจะทดสอบประสิทธิภาพในสถานการณ์นี้อย่างไร - person gfullam   schedule 13.02.2015:has
ออกจากตัวเลือกและทำการทดสอบในการเรียกกลับเหตุการณ์ มันจะมีประสิทธิภาพดีขึ้นมาก ดูสองตัวอย่างนี้: มีฟังก์ชันการทำงานที่เทียบเท่ากัน แต่ตัวอย่างแรกมีประสิทธิภาพที่ดีกว่ามาก - person lonesomeday   schedule 13.02.2015:has
ในตัวเลือกนั้นบ่อยกว่า (ในการทดสอบซ้ำ) มีประสิทธิภาพมากกว่าการใช้.has
ในตัวจัดการ นอกจากนี้ยังแสดงให้เห็นว่าความจำเพาะที่เพิ่มขึ้น เช่นเดียวกับในbutton:has
ในตัวเลือก ทำให้ประสิทธิภาพได้รับการปรับปรุงอย่างต่อเนื่อง ดู: jsperf.com/has-filter-in-delegated-event-selector< /ก> - person gfullam   schedule 03.05.2015