ทำไม===
เร็วกว่า==
ใน PHP
=== vs ==
แต่ใน JAVASCRIPT สามารถอ่านได้ที่นี่: stackoverflow.com/questions/359494/…
ทำไม===
เร็วกว่า==
ใน PHP
=== vs ==
แต่ใน JAVASCRIPT สามารถอ่านได้ที่นี่: stackoverflow.com/questions/359494/…
คำตอบ:
เนื่องจากตัวดำเนินการความเท่าเทียมกันถูก==
บังคับหรือแปลงชนิดข้อมูลชั่วคราวเพื่อดูว่ามันเท่ากับตัวถูกดำเนินการอื่นในขณะที่===
(ตัวดำเนินการประจำตัว) ไม่จำเป็นต้องทำการแปลงใด ๆ และทำให้งานน้อยลงซึ่งทำให้เร็วขึ้น
===
ไม่ได้ดำเนินการ Typecasting เพื่อ0 == '0'
ประเมินtrue
แต่0 === '0'
- false
เพื่อ
ก่อนอื่น === ตรวจสอบเพื่อดูว่าทั้งสองอาร์กิวเมนต์เป็นประเภทเดียวกันหรือไม่ดังนั้นหมายเลข 1 และสตริง '1' จึงล้มเหลวในการตรวจสอบประเภทก่อนที่จะทำการเปรียบเทียบใด ๆ ในทางกลับกัน == ไม่ได้ตรวจสอบประเภทก่อนและดำเนินการต่อไปและแปลงอาร์กิวเมนต์ทั้งสองเป็นประเภทเดียวกันแล้วทำการเปรียบเทียบ
ดังนั้น === จึงเร็วกว่าในการตรวจสอบสภาพความล้มเหลว
==
จะตรวจสอบประเภทก่อนเพื่อดูว่าต้องทำการแปลงประเภทใด ความจริงที่===
ไม่ได้ทำการแปลงใด ๆ ในขั้นตอนต่อไปนี้คือสิ่งที่ทำให้เร็วขึ้น
มีสองสิ่งที่ควรพิจารณา:
ถ้าประเภทถูกดำเนินการที่แตกต่างกันแล้ว==
และ===
ผลิตผลลัพธ์ที่แตกต่าง ในกรณีนั้นความเร็วของผู้ปฏิบัติงานไม่สำคัญ สิ่งที่สำคัญคือสิ่งที่ก่อให้เกิดผลลัพธ์ที่ต้องการ
ถ้าประเภทถูกดำเนินการเหมือนกันแล้วคุณสามารถใช้อย่างใดอย่างหนึ่ง==
หรือ===
ทั้งสองจะผลิตผลลัพธ์เดียวกัน ในกรณีนี้ความเร็วของตัวดำเนินการทั้งสองจะเหมือนกันเกือบทั้งหมด นี่เป็นเพราะไม่มีการแปลงประเภทที่ดำเนินการโดยตัวดำเนินการอย่างใดอย่างหนึ่ง
ฉันเปรียบเทียบความเร็วของ:
$a == $b
VS $a === $b
$a
และ$b
เป็นจำนวนเต็มแบบสุ่ม [1, 100]และนี่คือผลลัพธ์:
$a == $b $a === $b
--------- ---------
0.765770 0.762020
0.753041 0.825965
0.770631 0.783696
0.787824 0.781129
0.757506 0.796142
0.773537 0.796734
0.768171 0.767894
0.747850 0.777244
0.836462 0.826406
0.759361 0.773971
--------- ---------
0.772015 0.789120
คุณจะเห็นได้ว่าความเร็วนั้นเกือบจะเหมือนกัน
ฉันไม่รู้จริง ๆ ว่ามันเร็วกว่าอย่างมากหรือไม่ แต่ === ในภาษาส่วนใหญ่เป็นการเปรียบเทียบแบบโดยตรงขณะที่ == จะพยายามพิมพ์การข่มขู่หากจำเป็น / เป็นไปได้ที่จะได้รับการแข่งขัน
== ก่อให้เกิดค่าใช้จ่ายในการแปลงประเภทขนาดใหญ่กว่าก่อนการเปรียบเทียบ === ก่อนตรวจสอบประเภทจากนั้นดำเนินการโดยไม่ต้องทำการแปลงใด ๆ
เพราะ===
ไม่จำเป็นต้องบีบบังคับให้ตัวถูกดำเนินการเป็นประเภทเดียวกันก่อนเปรียบเทียบ
ฉันสงสัยว่าความแตกต่างของความเร็วนั้นสูงมาก ภายใต้สถานการณ์ปกติคุณควรใช้ตัวดำเนินการใดที่เหมาะสมกว่า
โดยสรุป === เร็วกว่าเพราะไม่แปลงชนิดข้อมูลเพื่อดูว่าตัวแปรสองตัวมีค่าเท่ากันหรือไม่ แต่เมื่อคุณต้องการดูว่าตัวแปรสองตัวมีค่าเท่ากันคุณจะใช้ == หากไม่ได้จำแนกว่าตัวแปรประเภทใด หรือ === ถ้าสำคัญก็เป็นประเภทของตัวแปรด้วย
ไม่ควรทำการวัดได้เร็วขึ้นในเวลาดำเนินการโดยตรง (การทดสอบประสิทธิภาพโดยตรงเกือบจะไม่สำคัญในกรณีนี้) ที่กล่าวว่าฉันจะต้องดูการทดสอบที่เกี่ยวข้องกับการทำซ้ำหรือเรียกซ้ำเพื่อดูว่ามีความแตกต่างอย่างมีนัยสำคัญสะสม (เมื่อใช้ในบริบทจริง) เวลาทดสอบและการดีบักที่คุณจะประหยัดเมื่อต้องรับมือกับคดีขอบควรมีความหมายกับคุณเช่นกัน
ในค่า php (c code) คือ "class" ที่ชอบ:
class value
{
$int_;
$float_;
$string_;
$array_;
$object_;
}
เมื่อคุณเปรียบเทียบ$a == $b
และ$a
เป็นint
ประเภทคุณจะมีสิ่งที่ชอบ:
if ($a->int_ == $b->int_ || $a->int_ == (int) $b->float_ || $a->int_ == (int) $b->string_ || ...)
แต่string
'1'
จะไม่โยนรหัส ASCII ก็จะเป็น49
1
เมื่อคุณเปรียบเทียบ$a === $b
และ$a
เป็นint
ประเภทจะมีสิ่งที่ชอบ:
if ($a->int_ == $b->int_)
หากผลการทดสอบถูกต้องแสดงว่าเป็นปัญหาของคอมไพเลอร์
โปรเซสเซอร์จะทำทุกอย่างที่บอกให้ทำในรอบสัญญาณนาฬิกา
หากมีน้อยกว่าที่ต้องทำก็จะทำได้เร็วกว่า
ส่วนที่เพิ่มเข้าไป:
จริง ๆ แล้วถ้าคอมไพเลอร์ได้สร้างโหลดของรหัสเครื่องที่จะประมวลผลแล้วถ้ามันได้เพิ่ม zillions ของสิ่งต่าง ๆ เพื่อรับมือกับชนิดของข้อมูลที่ต้องการเปรียบเทียบแล้วการลบ IF หนึ่ง "รอง" จะไม่เปลี่ยนความเร็วมากนัก เลย
หากใครยังคงอ่านสิ่งนี้อยู่ฉันก็จะสนใจในการอภิปรายเพิ่มเติม
ฟิล