ট্যাগগুলি ও পারফরম্যান্স খোলার / বন্ধ করার পদ্ধতি?


91

এটি একটি নির্বোধ প্রশ্ন হতে পারে, তবে পিএইচপি-তে অপেক্ষাকৃত নতুন হিসাবে আমি ভাবছি যে এইচটিএমএল টেম্পলেট কোডে পিএইচপি ট্যাগগুলি ঘন ঘন খোলা এবং বন্ধ করার ক্ষেত্রে কোনও কার্য সম্পাদন সম্পর্কিত সমস্যা আছে এবং যদি তাই হয় তবে শর্তে সর্বোত্তম অনুশীলনগুলি কী হতে পারে? পিএইচপি ট্যাগ নিয়ে কাজ করছেন?

আমার প্রশ্নটি ট্যাগগুলি বন্ধ করার গুরুত্ব / সঠিকতা সম্পর্কে নয়, বা কোন ধরণের কোডের চেয়ে অন্যের চেয়ে বেশি পাঠযোগ্য তা নয়, বরং ডকুমেন্টটি কীভাবে পার্সড / এক্সিকিউট করা হয় এবং এর কার্য সম্পাদনে কী প্রভাব ফেলতে পারে সে সম্পর্কে নয়।

উদাহরণস্বরূপ, নিম্নলিখিত দুটি চরম বিবেচনা করুন:

পিএইচপি এবং এইচটিএমএল ট্যাগ মেশানো:

<?php echo
   '<tr>
       <td>'.$variable1.'</td>
       <td>'.$variable2.'</td>
       <td>'.$variable3.'</td>
       <td>'.$variable4.'</td>
       <td>'.$variable5.'</td>
   </tr>'
?>
// PHP tag opened once

পিএইচপি এবং এইচটিএমএল ট্যাগগুলি পৃথক করে:

<tr>
   <td><?php echo $variable1 ?></td>
   <td><?php echo $variable2 ?></td>
   <td><?php echo $variable3 ?></td>
   <td><?php echo $variable4 ?></td>
   <td><?php echo $variable5 ?></td>
</tr>
// PHP tag opened five times

এ বিষয়ে কিছু মতামত শুনে আগ্রহী হবেন, এমনকি যদি এটি শুনতে পারা যায় যে এটির কোনও তফাত হয় না।

ধন্যবাদ


9
আকর্ষণীয় প্রশ্ন, এটির জন্য +1। যদিও আপনি যে 2 টি উদাহরণ দিয়েছেন তা তুলনা করার জন্য আদর্শ যুগল হিসাবে আমি অনুভব করি না, তবে আমি
টুকরোটি পেয়েছি

ধন্যবাদ ... আমি এই মুহুর্তে একটি বিশাল এইচটিএমএল টেবিলের সাথে কাজ করব এবং প্রশ্নের ধরণটি আমার দিকে তাকাচ্ছে ... এমনকি এটি কিছুটা তাত্ত্বিক হলেও।
টম

ইস্যু বন্ধ-ইশ: টেবিলটি জনপ্রিয় করতে আপনার একটি লুপ এবং ডেটার অ্যারে / পুনরায় ব্যবহার করা উচিত।
ডিসেন্ট ড্যাবলার

@ ফ্রিয়েডবয় ... অবশ্যই, আমি সম্মত, কিন্তু এটি সবসময় ব্যবহারিক নয়। হয় ডিবি থেকে ডেটা আনার সময় অ্যাক্রোব্যাটিক্সের প্রয়োজন হয়, বা এইচটিএমএল কাঠামো খুব সুন্দরভাবে একটি লুপের সাথে খাপ খায় না।
টম

4
আমি মনে করি পাঠযোগ্যতা এখানে সর্বাধিক গুরুত্বপূর্ণ বিষয়। আপনি এর চেয়ে তুচ্ছ কিছু দিয়ে কোনও বড় বৃদ্ধি / হ্রাস দেখতে যাচ্ছেন না।
চক লে বাট

উত্তর:


88

এটি সঠিকভাবে পেতে আপনার পক্ষে 3 টি সহজ নিয়ম:

  • কোনও সিনট্যাক্স সমস্যা পারফরম্যান্সকে প্রভাবিত করতে পারে না। ডেটা ম্যানিপুলেশন করে।
  • পারফরম্যান্সের কথা বলুন শুধুমাত্র প্রোফাইলিংয়ের ফলাফলের সাথে ব্যাক করা ।
  • অকালীন অপটিমাইজেশন হ'ল সমস্ত অশুভের মূল

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

আপনার প্রশ্নের একই। কল্পনা করুন আপনি কখনও কিছু পার্থক্য পাবেন। এমনকি বড় এক, বলুন, একটি পদ্ধতি 2 গুণ দ্রুত। ওহ আমার, 2 বার! আমি এটি চয়ন করেছি এবং আমার অ্যাপ্লিকেশনটি ভালভাবে অনুকূলিত করেছি, এটি এখন 50% দ্রুত চলবে!

ভুল । 50% নয়। আপনি এই গতি বৃদ্ধি কখনও লক্ষ্য করবেন না এমনকি পরিমাপ করবেন না। কারণ আপনি এমন একটি অংশকে অপ্টিমাইজ করেছেন যা পুরো স্ক্রিপ্ট রানটাইমের মাত্র 0,0001% নেয়।

বড় এইচটিএমএল টেবিলের ক্ষেত্রে, ব্রাউজারটি এটি রেন্ডার করতে অনেক সময় নেয়। আপনি উত্পন্ন করতে চেয়ে অনেক বেশি।

কর্মক্ষমতা বিশ্বে প্রোফাইলিং একটি মূল শব্দ। এতে কোনও "প্রোফাইলিং" শব্দ না থাকলে যে কোনও পারফরম্যান্স সম্পর্কিত প্রশ্নকে সন্দেহ ছাড়াই ট্র্যাশ করতে পারবেন। একই সাথে প্রোফাইলিং রকেট বিজ্ঞান নয়। আমি আপনার স্ক্রিপ্টের বিভিন্ন অংশের রানটাইম পরিমাপ করছি। এক্সডিবাগের মতো কিছু প্রোফাইলার বা এমনকি ম্যানুয়ালি ব্যবহার করেও করা যেতে পারে microtime(1)। এবং শুধুমাত্র ধীরতম অংশটি সনাক্ত করার পরে, আপনি পরীক্ষা দিয়ে শুরু করতে পারেন।

পারফরম্যান্সের প্রশ্ন জিজ্ঞাসার আগে প্রোফাইল শিখুন। এবং যদি এর কোনও আসল কারণ না থাকে তবে কার্য সম্পাদনের প্রশ্ন জিজ্ঞাসা করতে শিখুন।

অকাল অপ্টিমাইজেশান সব মন্দ রুট - D.Knuth


4
আমি যদি "প্রোফাইল" এর পরিবর্তে "বেঞ্চমার্ক" শব্দটি ব্যবহার করি তবে এটি এত খারাপ কেন? অর্থের কোনও পার্থক্য আছে কি? পার্থক্যগুলি জানার জন্য প্রশংসা করবে :)
নিকিসি

ডোনাল্ড নুথের উদ্ধৃতি দেওয়ার জন্য +1 এবং খুব অন্তর্দৃষ্টিযুক্ত উত্তরের জন্য +200।
ক্লিমেন্ট হেরেম্যান

@নিকিক, কখন কর্নেল বলেছিলেন যে "বেঞ্চমার্ক" শব্দটি ব্যবহার করা খারাপ? মনে হচ্ছে আপনি তাঁর মুখের মধ্যে শব্দ puttingুকিয়ে দিচ্ছেন বা ভুল জায়গায় কোনও কিছু উল্লেখ করছেন।
চক লে বাট

10
কেন এটি এত উচ্চ রেট দেওয়া হয়? এটি কোনও আকার বা আকারে প্রশ্নের উত্তর দেয় না। আমার কাছ থেকে।
ভারাল

4
@ নিকিসি যে সাধারণ ব্যবহার আমি প্রত্যক্ষ করেছি: বেঞ্চমার্কিং এর অর্থ বিকল্প সমাধানগুলির সাথে তুলনা করার জন্য কোডের টুকরাটির সামগ্রিক কর্মক্ষমতা পরিমাপ বা র‌্যাঙ্কিং করা (যেমন নীচে এমিয়েন এই প্রশ্নের উত্তরে তাঁর কাজটি করেছেন), যেখানে প্রোফাইলিংয়ের অর্থ দুঃশ্চিন্তা কি অংশের আপনার কোড যাই হোক না কেন ব্যবহারকারীর কাছে দৃশ্যমান কর্মক্ষমতা সমস্যা সমাধান করার চেষ্টা করছেন জন্য দায়ী। পার্থক্যটি হ'ল প্রোফাইলিংটি আপনার পারফরম্যান্স সমস্যার কারণ নির্ধারণের বিষয়ে, যখন বেঞ্চমার্কিং এর সমাধান পরীক্ষা করার বিষয়ে।
মার্ক

40

আমি 50,000 সারি দিয়ে পরীক্ষাগুলি আবার করেছি এবং 1 ট্যাগ পদ্ধতিতেও বহু প্রতিধ্বনি যুক্ত করেছি

for ($j=0;$j<30;$j++) {
    foreach ($results as $key=>$val){
    ?>
       <tr>
           <td><?php echo $results[$key][0]?></td>
           <td><?php echo $results[$key][1]?></td>
           <td><?php echo $results[$key][2]?></td>
           <td><?php echo $results[$key][3]?></td>
           <td><?php echo $results[$key][4]?></td>
           <td><?php echo $results[$key][5]?></td>
           <td><?php echo $results[$key][6]?></td>
           <td><?php echo $results[$key][7]?></td>
           <td><?php echo $results[$key][8]?></td>
           <td><?php echo $results[$key][9]?></td>
           <td><?php echo $results[$key][10]?></td>
           <td><?php echo $results[$key][11]?></td>
           <td><?php echo $results[$key][12]?></td>
           <td><?php echo $results[$key][13]?></td>
           <td><?php echo $results[$key][14]?></td>              
       </tr>
    <?php 
    }
}

সময়কাল 1: 31.15542483 সেকেন্ড

for ($k=0;$k<30;$k++) {
    foreach ($results as $key1=>$val1){
        echo
           '<tr>
               <td>'.$results[$key1][0].'</td>
               <td>'.$results[$key1][1].'</td>
               <td>'.$results[$key1][2].'</td>
               <td>'.$results[$key1][3].'</td>
               <td>'.$results[$key1][4].'</td>
               <td>'.$results[$key1][5].'</td>
               <td>'.$results[$key1][6].'</td>
               <td>'.$results[$key1][7].'</td>
               <td>'.$results[$key1][8].'</td>
               <td>'.$results[$key1][9].'</td>
               <td>'.$results[$key1][10].'</td>
               <td>'.$results[$key1][11].'</td>
               <td>'.$results[$key1][12].'</td>
               <td>'.$results[$key1][13].'</td>
               <td>'.$results[$key1][14].'</td>              
           </tr>';
    }
}

সময়কাল 2: 30.23169804 সেকেন্ড

for ($l=0;$l<30;$l++) {
    foreach ($results as $key2=>$val2){     
           echo'<tr>';
               echo'<td>'.$results[$key2][0].'</td>';
               echo'<td>'.$results[$key2][1].'</td>';
               echo'<td>'.$results[$key2][2].'</td>';
               echo'<td>'.$results[$key2][3].'</td>';
               echo'<td>'.$results[$key2][4].'</td>';
               echo'<td>'.$results[$key2][5].'</td>';
               echo'<td>'.$results[$key2][6].'</td>';
               echo'<td>'.$results[$key2][7].'</td>';
               echo'<td>'.$results[$key2][8].'</td>';
               echo'<td>'.$results[$key2][9].'</td>';
               echo'<td>'.$results[$key2][10].'</td>';
               echo'<td>'.$results[$key2][11].'</td>';
               echo'<td>'.$results[$key2][12].'</td>';
               echo'<td>'.$results[$key2][13].'</td>';
               echo'<td>'.$results[$key2][14].'</td>';              
           echo'</tr>';
    }
}

সময়কাল 3: 27.54640007 সেকেন্ড

মূল 2 পদ্ধতির মধ্যে খুব বেশি পার্থক্য নেই, তবে মনে হচ্ছে এটি কম কনকাটেনেশন @ পোকে দিয়ে বেশ খানিকটা দ্রুত

যেহেতু আমি সন্দেহ করি যে 1 বারের মধ্যে আমার এই বেশি ডেটা লাগবে, আমি অনুমান করি যে আমি অনেকগুলি ট্যাগ ব্যবহার করবো, কোড ইনডেন্টেশন আরও সুন্দর দেখায় এবং 'উত্স দেখুন' লেআউটটি আরও নির্ভুল দেখায়


4
তৃতীয় পরীক্ষার কেসটি হ'ল এক পিএইচপি ট্যাগের সাথে একাধিক প্রতিধ্বনি বিবরণী ব্যবহার করা উচিত, কারণ আপনার তখন স্ট্রিং কনটেনটেশন ব্যবহার করার প্রয়োজন হবে না।
অকর্মা

আমি 50,000 সারি দিয়ে পরীক্ষাগুলি আবার করেছি এবং 1 ট্যাগ পদ্ধতিতেও বহু প্রতিধ্বনি যুক্ত করেছি
Amien

4
আমরা অনুকূলিতকরণ করতে চাইলে +1 ম্যাসুরিং গুরুত্বপূর্ণ। আমরা প্রায়শই বুঝতে পারি যে এই ধরণের অপ্টিমাইজেশন অকেজো।
লুক এম

18
এটির চেহারা থেকে, প্রথম দুটি উদাহরণ শেষ উদাহরণের চেয়ে অনেক বেশি সাদা জায়গা আউটপুট দেয়। এটি বেশি রানটাইমের কারণ হতে পারে।
মাইক সি

এছাড়াও echoএকাধিক এক্সপ্রেশন আউটপুট হতে গ্রহণ করে। এই বৈশিষ্ট্যটির কোনও রূপই মেট্রিকগুলিতে বিবেচনা করা হয়নি।
hakre

13

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


6

সিউডো কোডে অনুবাদ করা সহজ কোডটি আরও ভাল। এটি উপরের উদাহরণগুলির দ্বারা প্রমাণিত। কোনটি বলতে বেশি সময় লাগে?

"Start php, do this 30 times:, then stop php.  Print this.  Start php, print this, stop php. Print this.  Start php, print this, stop php.Print this.  Start php, print this, stop php. Print this.  Start php, print this, stop php.Print this.  Start php, print this, stop php. Print this.  Start php, print this, stop php.Print this.  Start php, print this, stop php..."

"Start php, do this 30 times: print this, then add this to that, then add this to that, then add this to that, then add this to that, then add this to that, then add this to that..."

"Start php, do this 30 times: print this, print this, print this, print this, print this, print this, print this..."

ব্যক্তিগতভাবে আমি করব:

"Start php, define this, do this 30 times: add this to that.  Print." 

দোভাষী কীভাবে কাজ করে এবং কেন একটি উপায় অন্যর চেয়ে দ্রুততর হয় সে সম্পর্কে একটি প্রযুক্তিগত ব্যাখ্যা একটি নবজাতকের পক্ষে অপ্রাসঙ্গিক। থাম্বের নিয়মগুলি জানা ভাল:

  1. সহজ আরও ভাল।
  2. যদি এটি কোনও এক পৃষ্ঠায় ফিট না করে তবে এটি খুব বেশি করছে (এটি ভেঙে দিন)।
  3. আপনি যদি কোনও সূচক কার্ডে সিউডো-কোডটি হাতে লিখে না নিতে পারেন তবে এটি খুব জটিল।

সামগ্রিক ফলাফলটি সহজ হলে আরও বেশি ট্যাগ ব্যবহার করুন। পিরিয়ড।


5

এর সাথে আসল সমস্যা হ'ল মেমরি ব্যবহার। স্ট্রিং কনটেনটেশন এবং ভর ইকো-ইনগ মেমরির ব্যবহার তাত্পর্যপূর্ণভাবে বাড়িয়ে তুলতে পারে।

আপনি যদি পিএইচপি ট্যাগ স্প্যাম করেন তবে আপনার কোডটি অপঠনযোগ্য হয়ে উঠবে।

সেরা সমাধান হ'ল কোনও টেম্পলেট ইঞ্জিন ব্যবহার করা এবং কোড এবং উপস্থাপনাটি সম্পূর্ণ মিশ্রণ এড়ানো।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.