পিএইচপি-তে কেন === দ্রুত ==?


168

পিএইচপি ===তুলনায় দ্রুত কেন ==?


40
এটি খুব দ্রুত গতিতে, কিন্তু এটা হয় উল্লেখযোগ্যভাবে দ্রুততর?
পিসকোভর

19
পিএইচপি মধ্যে দ্রুত কি সম্পর্কে দয়া করে পড়বেন না। JOIN গুলি ব্যবহার না করে কীভাবে একক এসকিউএল কোয়েরিতে আকর্ষণীয় ডেটা পাবেন সে সম্পর্কে পড়ুন।
কামিল জাজট

15
কার কাছে এটি একই বিষয় আগ্রহী হতে পারে === vs ==, কিন্তু জাভাস্ক্রিপ্ট মধ্যে, এখানে পড়তে পারেন: stackoverflow.com/questions/359494/...
মার্কো Demaio

5
@ পিসকোভর, এটাই প্রশ্ন নয়
পেসারিয়ার

6
@ পেসারিয়র: ফেয়ার পয়েন্ট - এ কারণেই আমি কেবল এটি সম্পর্কে মন্তব্য করেছি। এটি প্রশ্নের উত্তর দেয় না, তবে এটিতে দৃষ্টিভঙ্গি সরবরাহ করে।
পিসকোভর

উত্তর:


200

কারণ সাম্যতা অপারেটর ==কোরেস করে, বা রূপান্তরিত হয়, ডাটা অপারেটিংয়ের জন্য অস্থায়ীভাবে টাইপ করে এটি অন্য অপারেন্ডের সমান কিনা তা দেখতে, যেখানে ===(পরিচয় অপারেটর) কোনও রূপান্তর করার প্রয়োজন নেই এবং এইভাবে কম কাজ করা হয় যা এটি দ্রুততর করে তোলে।


আমি মনে করি আপনার মতামত পিএইচপি ম্যানুয়াল যা বলে তার বিপরীতে। তারা বলে যে $ a == $ b is a এর সমান if বি এর ক্ষেত্রে সত্য, যেখানে $ a === $ b UE a এর সমান হলে সত্য, এবং সেগুলি একই ধরণের।
বখতিওর

92
তাহলে কীভাবে এর বিপরীত?
মধ্যস্থতা ওমুরিলিভ

2
আমি বিশ্বাস করি এটি আসলে যে 2 অপারেশনগুলি জটিল ধরণের জন্য মেমরির একই ক্ষেত্রের দিকে ইঙ্গিত করে তবে মধ্যস্থতার উত্তর অন্তর্ভুক্ত করে
বুনিয়াদি

1
এটি উপলব্ধি করে (এটি যেমন জেএসে রয়েছে), তবে কেউ যদি কিছু বাস্তব সাধারণ পারফরম্যান্স পরীক্ষার জন্য একটি রেফারেন্সও যোগ করে তবে এটি চমৎকার হবে।
মার্কো ডেমাইও

4
phpbench.com "নিয়ন্ত্রণ কাঠামো" বিভাগের অধীনে == এবং === এর মধ্যে পারফরম্যান্স পার্থক্যের একটি ইঙ্গিত দেয়।
একিলি

54

===টাইপকাস্টিং সঞ্চালন করে না তাই 0 == '0'মূল্যায়ন করে trueতবে 0 === '0'- থেকে false


25

প্রথমে, === দুটি আর্গুমেন্ট একই ধরণের কিনা তা পরীক্ষা করে দেখা যায় - সুতরাং কোনও তুলনা করার আগে সংখ্যা 1 এবং স্ট্রিং '1' টাইপ চেকটিতে ব্যর্থ হয়। অন্যদিকে, == প্রথমে প্রকারটি পরীক্ষা করে না এবং এগিয়ে যায় এবং উভয় যুক্তি একই ধরণের রূপান্তর করে এবং তারপরে তুলনা করে।

অতএব, === একটি ব্যর্থ শর্তটি পরীক্ষা করা দ্রুত


8
আমি অনুমান করেছিলাম যে ==কোনও ধরণের রূপান্তর করার দরকার আছে কিনা তা দেখতে প্রথমে প্রকারটি পরীক্ষা করে দেখুন। সত্য যে ===নিম্নলিখিত ধাপে কোনো রূপান্তর করে না তোলে কি দ্রুততর।
deceze

25

দুটি বিষয় বিবেচনা করতে হবে:

  1. প্রতীক ধরনের তারপর বিভিন্ন হন ==এবং ===উত্পাদন ভিন্ন ফলাফল । সেক্ষেত্রে অপারেটরদের গতির কিছু যায় আসে না; কোনটি গুরুত্বপূর্ণ যা কোনটি পছন্দসই ফলাফল দেয়।

  2. প্রতীক ধরনের একই হয়, তাহলে আপনি ব্যবহার করতে পারেন ==বা ===উভয় হিসাবে উত্পাদন করা হবে একই ফলাফল । সেক্ষেত্রে উভয় অপারেটরের গতি প্রায় অভিন্ন। এটি কারণ অপারেটররা কোনও ধরণের রূপান্তর সম্পাদন করে না।

আমি এর গতি তুলনা করেছি:

  • $a == $b বনাম $a === $b
  • কোথায় $aএবং $bএলোমেলো পূর্ণসংখ্যার [1, 100] ছিল
  • দুটি পরিবর্তনশীল তৈরি এবং এক মিলিয়ন বার তুলনা করা হয়েছিল
  • পরীক্ষা 10 বার চালানো হয়েছিল

এবং ফলাফল এখানে:

 $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

আপনি দেখতে পাবেন যে গতিটি প্রায় অভিন্ন।


13
আমি ভাবছি যদি আপনি এমন কোনও মেশিনে কিছু বিলিয়ন পুনরাবৃত্তি করেন যা কেবল অন্য কিছু করে না এবং কেবল গড় আউটপুট দেয়। দেখে মনে হচ্ছে এখানে বেশ শব্দ হচ্ছে। ;)
গাং ফু

4
আমি একই সিদ্ধান্তে পৌঁছেছি: অপারেন্ডগুলি একই ধরণের থেকে পরিচিত বলে কোনও পার্থক্য গণ্ডগোল করতে পারে না। অন্যান্য পরিস্থিতিতে সংবেদন তৈরি হয় না। প্রায় অন্যান্য সমস্ত উত্তর ঠিক ভুল।
পল স্পিগেল 15

1
আমি বিশ্বাস করি এটির নির্বাচিত উত্তর হওয়া উচিত ছিল। এটি কেবল অনুমানের সাথে যুক্তিযুক্ত নয়, অনুমানগুলি আরও আকরিকভাবে কম পরীক্ষামূলকভাবে পরীক্ষিত হয়েছিল।
পেড্রো অমরাল কৌটো

@ পেডোআমারালকৌটো আমার মনে হয় না, যেহেতু 10 একটি অভিজ্ঞতা অভিজ্ঞতা নয়। কোনও পার্থক্যের খুব কাছাকাছি না থাকার মূল কারণটি হ'ল পিএইচপি সংকলক সম্ভবত কোডটি অপ্টিমাইজ করবে। টাইপ রূপান্তর প্রয়োজন না হলে একজনকে === ব্যবহার করা উচিত, এটি শব্দার্থবিজ্ঞান ত্রুটি কমাতে সহায়তা করবে (এমনকি এটি আপনার পুরো জীবনে একবার হলেও)। এটি পরবর্তী ব্যক্তিকে কোড পড়ার ক্ষেত্রে কী বিধি প্রয়োগ করা হয় তা সহায়তা করে। আপনি একবার লিখুন, এটি কয়েকশবার পড়েছে, যদি এটি কোনও ব্যক্তির সন্দেহ দূর করতে সহায়তা করে তবে এটি ইতিমধ্যে সফল। একই ধরণের ক্লোন হয়ে যাওয়ার পরেও এম্পিরিকাল যদি কোনও মেমরি পরীক্ষা করে না। কেবল সময়ের চেয়ে আরও বেশি সংস্থান রয়েছে।
মার্কো

@ মারকো, যখন আমি "অভিজ্ঞতাবাদী গবেষণা" বলি, তার অর্থ এটি অভিজ্ঞতার উপর ভিত্তি করে, উদাহরণস্বরূপ: কেবল কারণ (বা আপনার মনে কী আছে) ব্যবহার করে যুক্তি তৈরির পরিবর্তে চলমান কোড, ব্যাক আপ না করে। সালমান এ মানগুলি নির্দেশ করে === সমান কখনও কখনও কিছুটা দ্রুত এবং কখনও কখনও কিছুটা ধীর হয়। এর অর্থ "পিএইচপি-তে == এর চেয়ে দ্রুত === কেন?" প্রশ্নটি করে: "আপনি কীভাবে জানেন যে === == এর চেয়ে দ্রুত"? সংকলক অপ্টিমাইজেশান একটি ব্যাখ্যা, দ্রুত বা ধীর কি না এবং আমি কী ব্যবহার করা উচিত তা বলিনি।
পেড্রো অমরাল কৌটো

7

এটি উল্লেখযোগ্যভাবে দ্রুত কিনা তা আমি সত্যিই জানি না, তবে বেশিরভাগ ভাষায় === হ'ল সরাসরি ধরণের তুলনা, যখন == কোনও ম্যাচ পাওয়ার জন্য প্রয়োজনীয় / সম্ভব হলে টাইপ জবরদস্তি করার চেষ্টা করবে।


9
জাভাস্ক্রিপ্টে === অপারেটর রয়েছে।
ফ্র্যাঙ্ক শায়ারার

আমি নিশ্চিত আপনি সাধারণ লিস্প এবং স্কিমে === করতে পারেন।
pupeno

জাভাস্ক্রিপ্ট - 3 টি ল্যাঙ্গেজ সংজ্ঞায় নয় যা আমি পরীক্ষা করেছি;) এবং লিস্প এবং স্কিম অনেকগুলি বিষয়, তবে খুব কমই সাধারণ;)
টমটম

1
রুবি রয়েছে ===। এটি একই জিনিসটি করে কিনা তা আমার মনে রাখা খুব দীর্ঘ হয়েছে।
কিটসুনওয়াইএমজি

1
এছাড়াও, ক্রিয়াকলাপের জন্য liveocs.adobe.com/flash/9.0/ActionScriptLangRefV3/…। মূলত, গুগল "কঠোর সাম্য"।
ক্রিস

4

তুলনা করার আগে == ধরণের রূপান্তরকরণের একটি বৃহত ওভারহেড অন্তর্ভুক্ত। === প্রথমে প্রকারটি পরীক্ষা করে, তারপরে কোনও ধরণের রূপান্তর না করেই এগিয়ে যায়।


4

কারণ === অপারেটরদের তুলনা করার আগে তাদের একই ধরণের হতে বাধ্য করার দরকার নেই

আমি সন্দেহ করি গতির পার্থক্য যদিও খুব বেশি। সাধারণ পরিস্থিতিতে আপনার যে কোনও অপারেটর আরও বোধগম্য হন তা ব্যবহার করা উচিত।


3

উপসংহারে === দ্রুততর কারণ দুটি ভেরিয়েবলের একই মান আছে কিনা তা দেখার জন্য ডাটা টাইপকে রূপান্তরিত করে না, তবে যখন দুটি ভেরিয়েবলের সমান মান রয়েছে তা দেখার প্রয়োজন হলে আপনি == ব্যবহার করবেন যদি কোন ধরণের ভেরিয়েবল হয় তবে তা ব্যবহার করবেন না , বা === যদি ভেরিয়েবলের ধরণও গুরুত্বপূর্ণ হয়।


0

দ্রুত সঞ্চালনের সময় কেবল দ্রুত পরিমাপ করা উচিত নয় (সরাসরি পারফরম্যান্স টেস্টগুলি এই ক্ষেত্রে প্রায় নগণ্য)। এটি বলেছিল, আমার পুনরুক্তি বা পুনরাবৃত্তির সাথে জড়িত একটি পরীক্ষা দেখতে হবে যা সত্যই তাৎপর্যপূর্ণ, ক্রমগত পার্থক্য আছে কিনা তা দেখার জন্য (যখন বাস্তবের প্রসঙ্গে ব্যবহৃত হয়)। প্রান্তের কেসগুলি মোকাবেলা করার সময় আপনি যে টেস্টিং এবং ডিবাগিং সময়টি সংরক্ষণ করবেন সেটি আপনার পক্ষেও অর্থপূর্ণ হওয়া উচিত


0

পিএইচপি (সি কোড) এর মান একটি "শ্রেণি" এর মতো:

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'আসকি কোডে কাস্ট করা হবে না 49, এটি হবে 1

আপনি যখন তুলনা করা হয় $a === $bএবং $aহয় intধরন, মত someting হবে:

if ($a->int_ == $b->int_)

-4

যদি পরীক্ষার ফলাফলগুলি সঠিক হয় তবে অবশ্যই এটি সংকলক সমস্যা হতে হবে,

প্রসেসর একটি ঘড়ির চক্রে যা বলা বলা তা করবে

যদি এটির কাজ কম হয় তবে তা করা দ্রুত হবে

যোগ:

আহ ভাল আসলে যদি সংকলক ইতিমধ্যে প্রক্রিয়াজাতকরণের জন্য মেশিন কোডের প্রচুর পরিমাণ তৈরি করে ফেলেছে, তবে যদি এটি ইতিমধ্যে কোন ধরণের ডেটা তুলনা করা প্রয়োজন তা মোকাবেলায় যদি লক্ষ লক্ষ জিনিস যোগ করে থাকে তবে একটি "অপ্রাপ্তবয়স্ক" আইএফ অপসারণের গতি খুব বেশি পরিবর্তন করবে না মোটেই

যদি এখনও কেউ এটি পড়েন তবে আমি আরও আলোচনায় আগ্রহী।

ফিল


আপনার কোড বেসে কেবলমাত্র "এক" আইএফ স্টেটমেন্ট রয়েছে? এটি অদ্ভুত কারণ প্রতিটি কোড বেসে আমি কাজ করেছি, আমাদের কাছে কয়েক হাজার আইএফ বা তুলনামূলক বিবৃতি রয়েছে যেখানেই বলা হয়।
লেভ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.