PHP की ===
तुलना ==
में तेज़ क्यों है ?
=== vs ==
, लेकिन JAVASCRIPT में, यहाँ पढ़ सकते हैं: stackoverflow.com/questions/359494/…
PHP की ===
तुलना ==
में तेज़ क्यों है ?
=== vs ==
, लेकिन JAVASCRIPT में, यहाँ पढ़ सकते हैं: stackoverflow.com/questions/359494/…
जवाबों:
क्योंकि समानता ऑपरेटर ==
किसी अन्य ===
ऑपरेटर के बराबर है या नहीं, यह देखने के लिए डेटा प्रकार अस्थायी रूप से कनवर्ट करता है, या कनवर्ट करता है, जबकि (पहचान ऑपरेटर) को किसी भी परिवर्तित करने की आवश्यकता नहीं है और इस तरह कम काम किया जाता है, जो इसे तेज़ बनाता है।
पहले, === यह देखने के लिए जाँच करता है कि क्या दो तर्क एक ही प्रकार के हैं - इसलिए नंबर 1 और स्ट्रिंग '1' टाइप चेक पर विफल रहता है इससे पहले कि कोई तुलना की जाए। दूसरी ओर, == पहले प्रकार की जाँच नहीं करता है और आगे बढ़ता है और दोनों तर्कों को एक ही प्रकार में परिवर्तित करता है और फिर तुलना करता है।
इसलिए, === एक विफल स्थिति की जाँच करने में तेज है
==
किसी भी प्रकार के रूपांतरण की आवश्यकता है, यह देखने के लिए पहले प्रकार की जांच करता है। यह तथ्य कि ===
निम्नलिखित चरण में कोई रूपांतरण नहीं होता है, जो इसे तेज बनाता है।
विचार करने के लिए दो चीजें हैं:
यदि ऑपरेंड प्रकार अलग-अलग होते हैं ==
और विभिन्न परिणाम===
उत्पन्न करते हैं । उस मामले में ऑपरेटरों की गति कोई फर्क नहीं पड़ता; क्या मायने रखता है जो एक वांछित परिणाम पैदा करता है।
यदि ऑपरेंड प्रकार समान हैं तो आप ==
या तो उपयोग कर सकते हैं या ===
दोनों एक ही परिणाम का उत्पादन करेंगे । उस स्थिति में दोनों ऑपरेटरों की गति लगभग समान है। इसका कारण यह है कि ऑपरेटरों द्वारा किसी भी प्रकार का रूपांतरण नहीं किया जाता है।
मैंने इसकी गति की तुलना की:
$a == $b
बनाम $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 कोड) मान में एक "वर्ग" है जैसे:
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
प्रकार, वहाँ तरह someting हो जाएगा:
if ($a->int_ == $b->int_)
यदि परीक्षण के परिणाम सही हैं, तो यह एक संकलक मुद्दा होना चाहिए,
प्रोसेसर एक घड़ी चक्र पर जो कुछ भी करने के लिए कहा गया है वह करेगा
अगर यह करना कम है तो यह करना जल्दी होगा
इसके अलावा:
वास्तव में अच्छी तरह से अगर संकलक को संसाधित करने के लिए पहले से ही मशीन कोड का भार पैदा हो गया है, तो अगर यह पहले से ही सामग्री के किस प्रकार के साथ तुलना करने के लिए सामानों के युग्मों को जोड़ दिया है, तो एक "मामूली" को हटाने से गति में बदलाव नहीं होगा बिल्कुल भी।
अगर कोई अभी भी इसे पढ़ता है तो मैं अधिक चर्चा में दिलचस्प हूं।
फिल