উন্নত পিএইচপি কোডিং অনুশীলন সম্পর্কে আমি যা কিছু পড়ি তা বলতে থাকে require_once
গতির কারণে ব্যবহার করবেন না ।
কেন?
একই জিনিসটি করার সঠিক / আরও ভাল উপায় কী require_once
? যদি এটি গুরুত্বপূর্ণ হয় তবে আমি পিএইচপি 5 ব্যবহার করছি।
উন্নত পিএইচপি কোডিং অনুশীলন সম্পর্কে আমি যা কিছু পড়ি তা বলতে থাকে require_once
গতির কারণে ব্যবহার করবেন না ।
কেন?
একই জিনিসটি করার সঠিক / আরও ভাল উপায় কী require_once
? যদি এটি গুরুত্বপূর্ণ হয় তবে আমি পিএইচপি 5 ব্যবহার করছি।
উত্তর:
require_once
এবং include_once
উভয়েরই প্রয়োজন যে সিস্টেমটি ইতিমধ্যে কী অন্তর্ভুক্ত / প্রয়োজনীয় হয়েছে তার একটি লগ রাখে। প্রতিটি *_once
কল মানেই সেই লগ চেক করা। সুতরাং সেখানে অবশ্যই কিছু অতিরিক্ত কাজ করা হচ্ছে তবে পুরো অ্যাপ্লিকেশনটির গতি ক্ষতির জন্য যথেষ্ট?
... আমি সত্যিই এতে সন্দেহ করি ... আপনি যদি না সত্যিই পুরানো হার্ডওয়্যার থেকে থাকেন বা এটি অনেক কিছু না করেন তা না হলে ।
আপনি যদি করছে হাজার হাজার করছেন *_once
, আপনি একটি লাইটার ফ্যাশন কাজ নিজেকে করতে পারে। সহজ অ্যাপ্লিকেশনগুলির জন্য, কেবল একবারে এটি যথেষ্ট পরিমাণে অন্তর্ভুক্ত করা উচিত তা নিশ্চিত করে তবে আপনি যদি এখনও ত্রুটিগুলি পুনরায় সংজ্ঞায়িত করে থাকেন তবে আপনি এর মতো কিছু করতে পারেন:
if (!defined('MyIncludeName')) {
require('MyIncludeName');
define('MyIncludeName', 1);
}
আমি ব্যক্তিগতভাবে *_once
বিবৃতিতে আটকে থাকব তবে নির্বোধ মিলিয়ন-পাস বেঞ্চমার্কে, আপনি দুজনের মধ্যে একটি পার্থক্য দেখতে পাবেন:
php hhvm
if defined 0.18587779998779 0.046600103378296
require_once 1.2219581604004 3.2908599376678
10-100 with require_once
এর সাথে ধীর এবং এটি কৌতূহল যা require_once
আপাতদৃষ্টিতে ধীর hhvm
। আবার আপনি যদি *_once
হাজার হাজার বার চালনা করেন তবে এটি কেবল আপনার কোডের সাথে প্রাসঙ্গিক ।
<?php // test.php
$LIMIT = 1000000;
$start = microtime(true);
for ($i=0; $i<$LIMIT; $i++)
if (!defined('include.php')) {
require('include.php');
define('include.php', 1);
}
$mid = microtime(true);
for ($i=0; $i<$LIMIT; $i++)
require_once('include.php');
$end = microtime(true);
printf("if defined\t%s\nrequire_once\t%s\n", $mid-$start, $end-$mid);
<?php // include.php
// do nothing.
এই থ্রেডটি আমাকে ক্রিঞ্জ করে তোলে, কারণ ইতিমধ্যে একটি "সমাধান পোস্ট করা হয়েছে" এবং এটি সমস্ত উদ্দেশ্য এবং উদ্দেশ্যে, ভুল। আসুন গণনা করা যাক:
সংজ্ঞাগুলি পিএইচপি-তে সত্যই ব্যয়বহুল। আপনি এটি সন্ধান করতে পারেন বা এটি নিজেই পরীক্ষা করতে পারেন তবে পিএইচপি-তে কোনও বিশ্বব্যাপী ধ্রুবক সংজ্ঞায়নের একমাত্র কার্যকর উপায় হ'ল একটি এক্সটেনশন। (ক্লাস ধ্রুবকগুলি প্রকৃতপক্ষে বেশ সজ্জিত পারফরম্যান্স অনুযায়ী, তবে এটি 2 এর কারণে একটি মোট পয়েন্ট)
আপনি যদি require_once()
যথাযথভাবে ব্যবহার করছেন , অর্থাত ক্লাস অন্তর্ভুক্তির জন্য, আপনার এমনকি একটি সংজ্ঞায়নেরও প্রয়োজন নেই; শুধু পরীক্ষা করে দেখুন class_exists('Classname')
। আপনি যে ফাইলটি অন্তর্ভুক্ত করছেন সেটিতে কোড রয়েছে, অর্থাৎ আপনি এটি পদ্ধতিগত ফ্যাশনে ব্যবহার করছেন, require_once()
আপনার পক্ষে প্রয়োজনীয় হওয়ার কোনও কারণ নেই ; প্রতিবার আপনি যে ফাইলটি সাব্রুটাইন কল করছেন বলে মনে করছেন তা অন্তর্ভুক্ত করুন।
কিছুক্ষণের জন্য, অনেক লোক class_exists()
তাদের অন্তর্ভুক্তির জন্য পদ্ধতিটি ব্যবহার করেছিলেন । আমি এটি পছন্দ করি না কারণ এটি পলাতক, তবে তাদের পিছু require_once()
পিএইচপি-র সাম্প্রতিক সংস্করণগুলির আগে বেশ অদক্ষ ছিল। তবে এটি স্থির করা হয়েছে, এবং এটি আমার যুক্তি যে শর্তসাপেক্ষে আপনাকে অতিরিক্ত বাইকোড এবং অতিরিক্ত পদ্ধতি কলটির জন্য কোনও অভ্যন্তরীণ হ্যাশটেবল চেককে ছাড়িয়ে যেতে হবে comp
এখন, একটি ভর্তি: এই স্টাফটির জন্য পরীক্ষা করা শক্ত, কারণ এটি কার্যকর করার জন্য খুব অল্প সময়ের জন্য দায়ী।
এখানে আপনার যে প্রশ্নটি ভাবা উচিত তা এখানে রয়েছে: পিএইচপি-তে একটি সাধারণ নিয়ম হিসাবে, ব্যয়বহুল, কারণ প্রতিবার অনুবাদক একটিটিকে আঘাত করলে এটি পার্স মোডে ফিরে যেতে হবে, অপকডগুলি তৈরি করতে হবে এবং তারপরে পিছনে ঝাঁপিয়ে পড়বে jump আপনার যদি একটি 100+ অন্তর্ভুক্ত থাকে তবে এটি অবশ্যই কার্য সম্পাদনের প্রভাব ফেলবে। প্রয়োজনীয়_অনস ব্যবহার বা ব্যবহার না করা কেন এমন গুরুত্বপূর্ণ প্রশ্ন কারণ এটি ওপকোড ক্যাশের জন্য জীবনকে কঠিন করে তোলে। এর একটি ব্যাখ্যা এখানে পাওয়া যাবে, তবে এটি কী উত্সাহ দেয় তা হ'ল:
পার্স সময় চলাকালীন, আপনি অনুরোধের পুরো জীবনের জন্য আপনার প্রয়োজনীয় ফাইলগুলির অন্তর্ভুক্ত ঠিক কী জানেন, require()
খুব প্রথম দিকে ও অপকোড ক্যাশে আপনার জন্য সমস্ত কিছু পরিচালনা করবে।
আপনি যদি একটি অপকোড ক্যাশে না চালাচ্ছেন তবে আপনি একটি শক্ত জায়গায় রয়েছেন। আপনার সমস্তগুলি অন্তর্ভুক্ত করে একটি ফাইলে অন্তর্ভুক্ত করা (কেবলমাত্র উত্পাদনের ক্ষেত্রে বিকাশের সময় এটি করবেন না) সময় পার্স করতে অবশ্যই সহায়তা করতে পারে তবে এটি করার একটি ব্যথা এবং এছাড়াও, আপনাকে অবশ্যই ঠিক কীটি অন্তর্ভুক্ত করবেন তা জানতে হবে অনুরোধ।
অটোল্যাডটি খুব সুবিধাজনক, তবে ধীর কারণেই অটোল্যাড যুক্তিটি প্রতিবার অন্তর্ভুক্ত করার সময় চালানো উচিত। অনুশীলনে, আমি খুঁজে পেয়েছি যে একটি অনুরোধের জন্য বেশ কয়েকটি বিশেষায়িত ফাইল অটলয়েড করা খুব বেশি সমস্যার কারণ হয় না, তবে আপনার প্রয়োজনীয় সমস্ত ফাইল স্বয়ংক্রিয়ভাবে চালিত করা উচিত নয়।
আপনার যদি সম্ভবত 10 টি অন্তর্ভুক্ত থাকে ( এটি খামের গণনার একদম পিছনে), এই সমস্ত হুড়োহুড়ি মূল্যহীন নয়: কেবল আপনার ডাটাবেস অনুসন্ধান বা অন্য কিছুকে অনুকূলিত করুন।
define()
, require_once()
এবং defined()
মাইক্রোসেকেন্ড আমার মেশিনে প্রতিটি সব 1-2 সময় নেয়।
আমি কৌতূহলী হয়ে উঠলাম এবং অ্যাডাম ব্যাকস্ট্রমের টেক ইওর ইউনিভার্সের লিঙ্কটি পরীক্ষা করে দেখলাম । এই নিবন্ধটি প্রয়োজনীয়তাগুলির পরিবর্তে প্রয়োজনীয় ব্যবহারগুলির একটি কারণ বর্ণনা করে। যাইহোক, তাদের দাবিগুলি আমার বিশ্লেষণ ধরে রাখেনি। আমি কোথায় সমাধানটি অপ্রত্যাশিত করেছি তা দেখার আগ্রহী। আমি তুলনা করার জন্য পিএইচপি 5.2.0 ব্যবহার করেছি।
আমি 100 টি শিরোনাম ফাইল তৈরি করে শুরু করেছি যা অন্য শিরোলেখের ফাইল অন্তর্ভুক্ত করতে প্রয়োজনীয়_অনস ব্যবহার করে। এই ফাইলগুলির প্রতিটি দেখতে কিছুটা এমন দেখাচ্ছে:
<?php
// /home/fbarnes/phpperf/hdr0.php
require_once "../phpperf/common_hdr.php";
?>
আমি একটি দ্রুত বাশ হ্যাক ব্যবহার করে এটি তৈরি করেছি:
for i in /home/fbarnes/phpperf/hdr{00..99}.php; do
echo "<?php
// $i" > $i
cat helper.php >> $i;
done
এইভাবে আমি প্রয়োজনীয়_অনসেস ব্যবহার করতে এবং শিরোলেখ ফাইলগুলি অন্তর্ভুক্ত করার সময় সহজেই পরিবর্তন করতে পারি। আমি তখন একশ ফাইল লোড করার জন্য একটি app.php তৈরি করেছি। এর মতো দেখতে:
<?php
// Load all of the php hdrs that were created previously
for($i=0; $i < 100; $i++)
{
require_once "/home/fbarnes/phpperf/hdr$i.php";
}
// Read the /proc file system to get some simple stats
$pid = getmypid();
$fp = fopen("/proc/$pid/stat", "r");
$line = fread($fp, 2048);
$array = split(" ", $line);
// Write out the statistics; on RedHat 4.5 with kernel 2.6.9
// 14 is user jiffies; 15 is system jiffies
$cntr = 0;
foreach($array as $elem)
{
$cntr++;
echo "stat[$cntr]: $elem\n";
}
fclose($fp);
?>
আমি প্রয়োজনীয়_অ্যান্স শিরোলেখগুলির সাথে প্রয়োজনীয় শিরোনামগুলির বিপরীত হয়েছি যা একটি শিরোনাম ফাইল ব্যবহার করে:
<?php
// /home/fbarnes/phpperf/h/hdr0.php
if(!defined('CommonHdr'))
{
require "../phpperf/common_hdr.php";
define('CommonHdr', 1);
}
?>
প্রয়োজন বনাম প্রয়োজনীয়_একটি দিয়ে এটি চালানোর সময় আমি খুব বেশি পার্থক্য পাইনি। আসলে, আমার প্রাথমিক পরীক্ষাগুলি থেকে বোঝা যাচ্ছে যে প্রয়োজন_ও কিছুটা দ্রুত ছিল, তবে আমি অবশ্যই এটি বিশ্বাস করি না। আমি ১০০০০০ ইনপুট ফাইল দিয়ে পরীক্ষার পুনরাবৃত্তি করেছি। এখানে আমি একটি সামঞ্জস্যপূর্ণ পার্থক্য দেখতে পেলাম। আমি একাধিকবার পরীক্ষাটি চালিয়েছি, ফলাফলগুলি নিকটে রয়েছে তবে প্রয়োজনের জন্য ব্যবহার করে গড়ে 30.8 ব্যবহারকারীর জিফি এবং .6২..6 সিস্টেম জিফি ব্যবহার করা হয়; গড়ে 39.4 ব্যবহারকারীর জিফি এবং 72.0 সিস্টেম জিফিজ ব্যবহার করে অতএব, এটি উপস্থিত_অনসেস ব্যবহার করে বোঝাটি কিছুটা কম হয়েছে বলে মনে হয়। তবে দেয়ালের ঘড়ির সময় কিছুটা বাড়ানো হয়েছে। 10,000 প্রযোজনীয় কলগুলি গড়ে সম্পূর্ণ করতে 10.15 সেকেন্ড ব্যবহার করে এবং 10,000 টির জন্য কল গড়ে গড়ে 9.84 সেকেন্ড ব্যবহার করে।
পরবর্তী পদক্ষেপটি এই পার্থক্যগুলি সন্ধান করা। সিস্টেম কলগুলি যা করা হচ্ছে তা বিশ্লেষণ করতে আমি স্ট্রেস ব্যবহার করেছি ।
প্রয়োজন_অনসেস থেকে কোনও ফাইল খোলার আগে নিম্নলিখিত সিস্টেম কলগুলি করা হয়:
time(NULL) = 1223772434
lstat64("/home", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat64("/home/fbarnes", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat64("/home/fbarnes/phpperf", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat64("/home/fbarnes/phpperf/h", {st_mode=S_IFDIR|0755, st_size=270336, ...}) = 0
lstat64("/home/fbarnes/phpperf/h/hdr0.php", {st_mode=S_IFREG|0644, st_size=88, ...}) = 0
time(NULL) = 1223772434
open("/home/fbarnes/phpperf/h/hdr0.php", O_RDONLY) = 3
এটি প্রয়োজনের সাথে বিপরীতে:
time(NULL) = 1223772905
lstat64("/home", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat64("/home/fbarnes", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat64("/home/fbarnes/phpperf", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat64("/home/fbarnes/phpperf/h", {st_mode=S_IFDIR|0755, st_size=270336, ...}) = 0
lstat64("/home/fbarnes/phpperf/h/hdr0.php", {st_mode=S_IFREG|0644, st_size=146, ...}) = 0
time(NULL) = 1223772905
open("/home/fbarnes/phpperf/h/hdr0.php", O_RDONLY) = 3
আপনার ইউনিভার্সের প্রযুক্তিটি বোঝায় যে প্রয়োজনীয়_অনসেস আরও lstat64 কল করা উচিত। তবে, তারা উভয়ই একই সংখ্যায় lstat64 কল করে calls সম্ভবত, পার্থক্যটি হ'ল আমি উপরের কোডটি অপ্টিমাইজ করতে এপিসি চালাচ্ছি না। যাইহোক, পরবর্তী আমি স্ট্রেসের আউটপুটটিকে সম্পূর্ণ রানগুলির সাথে তুলনা করেছি:
[fbarnes@myhost phpperf]$ wc -l strace_1000r.out strace_1000ro.out
190709 strace_1000r.out
210707 strace_1000ro.out
401416 total
প্রয়োজনে-ব্যবহার করার সময় কার্যকরভাবে প্রতি শিরোনাম ফাইলটিতে আরও দুটি সিস্টেম কল রয়েছে are একটি পার্থক্য হ'ল প্রয়োজনীয়_অনসের সময় () ফাংশনে একটি অতিরিক্ত কল রয়েছে:
[fbarnes@myhost phpperf]$ grep -c time strace_1000r.out strace_1000ro.out
strace_1000r.out:20009
strace_1000ro.out:30008
অন্যান্য সিস্টেম কলটি getcwd ():
[fbarnes@myhost phpperf]$ grep -c getcwd strace_1000r.out strace_1000ro.out
strace_1000r.out:5
strace_1000ro.out:10004
এটিকে বলা হয় কারণ আমি এইচডিআরএক্সএক্সএক্সএক্স ফাইলগুলিতে আপেক্ষিক পাথটি রেফারেন্স করার সিদ্ধান্ত নিয়েছিলাম। যদি আমি এটির একটি নিখুঁত রেফারেন্স করি তবে কেবলমাত্র পার্থক্যটি হ'ল কোডে করা অতিরিক্ত সময় (NUL) কল:
[fbarnes@myhost phpperf]$ wc -l strace_1000r.out strace_1000ro.out
190705 strace_1000r.out
200705 strace_1000ro.out
391410 total
[fbarnes@myhost phpperf]$ grep -c time strace_1000r.out strace_1000ro.out
strace_1000r.out:20008
strace_1000ro.out:30008
এর থেকে বোঝা যাচ্ছে যে আপনি আপেক্ষিক পাথের চেয়ে নিখুঁত পাথ ব্যবহার করে সিস্টেম কলের সংখ্যা হ্রাস করতে পারবেন। এর বাইরে কেবলমাত্র পার্থক্য হল সময় (এনএলএল) কলগুলি যা দ্রুততর কি তা তুলনা করার জন্য কোডটি উপকরণের জন্য ব্যবহৃত হয় বলে মনে হয়।
অন্য একটি দ্রষ্টব্য হ'ল এপিসি অপ্টিমাইজেশন প্যাকেজের "apc.incolve_once_override" নামে একটি বিকল্প রয়েছে যা দাবি করে যে এটি প্রয়োজনীয়_অনসেস দ্বারা অন্তর্ভুক্ত হওয়া সিস্টেম কলগুলির সংখ্যা হ্রাস করে এবং অন্তর্ভুক্ত_সেস কলগুলি ( পিএইচপি ডকুমেন্টেশন দেখুন )।
আপনি কি এই কোডিং অনুশীলনগুলির কোনও লিঙ্ক দিতে পারেন যা এড়াতে বলে? যতদূর আমি উদ্বিগ্ন, এটি সম্পূর্ণ নন-ইস্যু । আমি নিজে সোর্স কোডটির দিকে নজর দিইনি, তবে আমি কল্পনা করতে পারি যে এর মধ্যে কেবলমাত্র তফাত include
এবং include_once
এটি সেই include_once
ফাইলনামটিকে একটি অ্যারে যুক্ত করে এবং প্রতিটি সময় অ্যারে পরীক্ষা করে। এই অ্যারেটি বাছাই করা সহজ হবে, সুতরাং এটির অনুসন্ধান করা ও (লগ এন) হওয়া উচিত, এবং এমনকি একটি মাঝারি লার্জ অ্যাপ্লিকেশনটিতে কেবল কয়েক ডজন অন্তর্ভুক্ত থাকতে পারে।
জিনিসগুলি করার আরও ভাল উপায় হ'ল একটি অবজেক্ট-ভিত্তিক পদ্ধতির ব্যবহার এবং __autoload () ব্যবহার করা ।
__autoload()
নিরুৎসাহিত এবং এটি ভবিষ্যতে উঠিয়ে নেওয়া পারে, আপনি ব্যবহার করা উচিত spl_autoload_register(...)
এই দিন ... PS2 আমাকে ভুল বুঝবেন না, আমি ব্যবহারের autoload কার্যকারিতা কখনও কখনও; )
এটি ফাংশনটি খারাপ ব্যবহার করছে না। সামগ্রিক কোড বেসে এটি কীভাবে এবং কখন ব্যবহার করতে হবে তার একটি ভুল বোঝাপড়া। আমি সম্ভবত এই ভুল বোঝাবুঝিতে আরও কিছু প্রসঙ্গ যুক্ত করব:
লোকেরা ভাবেন না যে প্রয়োজনীয়_অনসেস একটি ধীর ফাংশন। আপনাকে আপনার কোডটি একরকম বা অন্য কোনওভাবে অন্তর্ভুক্ত করতে হবে। require_once()
বনামের require()
গতি ইস্যু নয়। এটি সতর্কতা অবলম্বন করে এমন কার্য সম্পাদন সম্পর্কে যা এটি অন্ধভাবে ব্যবহারের জন্য তৈরি হতে পারে। যদি প্রসঙ্গের জন্য বিবেচনা না করে বিস্তৃতভাবে ব্যবহার করা হয় তবে এটি বিশাল মেমরির বর্জ্য বা অপব্যয় কোডের দিকে নিয়ে যেতে পারে।
আমি যা দেখেছি তা আসলেই খারাপ require_once()
, বিশেষত কোনও জটিল অবজেক্ট-ওরিয়েন্টেড (ওও) পরিবেশে যখন সমস্ত একচেটিয়া ফ্রেমওয়ার্কগুলি সমস্ত ভুল উপায়ে ব্যবহার করে।
require_once()
অনেক লাইব্রেরিতে যেমন দেখা যায় তেমন প্রতিটি ক্লাসের শীর্ষে ব্যবহারের উদাহরণ নিন :
require_once("includes/usergroups.php");
require_once("includes/permissions.php");
require_once("includes/revisions.php");
class User{
// User functions
}
সুতরাং User
ক্লাসটি অন্য তিনটি ক্লাস ব্যবহার করার জন্য ডিজাইন করা হয়েছে। যথেষ্ট ফর্সা!
তবে এখন যদি কোনও দর্শক সাইট ব্রাউজ করছে এবং লগইন না করে এবং ফ্রেমওয়ার্ক লোড করে: require_once("includes/user.php");
প্রতিটি একক অনুরোধের জন্য।
এটি 1 + 3 অপ্রয়োজনীয় ক্লাস সহ এটি নির্দিষ্ট অনুরোধের সময় কখনও ব্যবহার করবে না। 5 এমবি বা তার চেয়ে কম বিপরীতে অনুরোধ অনুসারে 40 এমবি ব্যবহার করে ফোলে ফ্রেমওয়ার্কগুলি শেষ হয়।
অন্যান্য উপায়ে এটির অপব্যবহার করা যেতে পারে, যখন অন্য শ্রেণির দ্বারা কোনও শ্রেণি পুনরায় ব্যবহার করা হয়! বলুন আপনার প্রায় 50 টি ক্লাস রয়েছে যা helper
ফাংশন ব্যবহার করে। এই helpers
ক্লাসগুলি লোড হওয়ার পরে তাদের উপলব্ধ রয়েছে তা নিশ্চিত করার জন্য , আপনি পাবেন:
require_once("includes/helpers.php");
class MyClass{
// Helper::functions(); // etc..
}
এখানে প্রতি সেয়ে কোনও ভুল নেই। তবে যদি একটি পৃষ্ঠার অনুরোধটি 15 টি একই শ্রেণীর অন্তর্ভুক্ত হয়। আপনি require_once
15 বার চালাচ্ছেন , বা একটি দুর্দান্ত চাক্ষুষের জন্য:
require_once("includes/helpers.php");
require_once("includes/helpers.php");
require_once("includes/helpers.php");
require_once("includes/helpers.php");
require_once("includes/helpers.php");
require_once("includes/helpers.php");
require_once("includes/helpers.php");
require_once("includes/helpers.php");
require_once("includes/helpers.php");
require_once("includes/helpers.php");
require_once("includes/helpers.php");
require_once("includes/helpers.php");
require_once("includes/helpers.php");
require_once("includes/helpers.php");
require_once("includes/helpers.php");
প্রয়োজনীয়_অনস () এর ব্যবহার প্রযুক্তিগতভাবে সেই ফাংশনটি চালানোর জন্য 14 বার কার্য সম্পাদনকে প্রভাবিত করে, এই অপ্রয়োজনীয় লাইনগুলি বিশ্লেষণ করার শীর্ষে। একই ধরণের সমস্যা সহ মাত্র 10 টি ব্যবহৃত অতি উচ্চ শ্রেণীর সাথে এটি এর চেয়ে বরং অর্থহীন পুনরাবৃত্তি কোডের 100+ লাইনগুলির জন্য অ্যাকাউন্ট হতে পারে।
এটির পরিবর্তে এটি সম্ভবত require("includes/helpers.php");
আপনার অ্যাপ্লিকেশন বা ফ্রেমওয়ার্কের বুটস্ট্র্যাপে ব্যবহার করার উপযুক্ত। তবে যেহেতু সবকিছু আপেক্ষিক, শ্রেণীর ওজন বনাম ব্যবহারের ফ্রিকোয়েন্সি 15-100 লাইন সংরক্ষণের উপযুক্ত কিনা তা সবই নির্ভর করে । তবে যদি কোনও প্রদত্ত অনুরোধে ফাইলটি ব্যবহার না করার সম্ভাবনা কোনও না হয়, তবে অবশ্যই তার পরিবর্তে আপনার প্রধান শ্রেণিতে থাকা উচিত। রয়ে প্রতিটি ক্লাসে আলাদাভাবে সম্পদ নষ্ট হয়ে যায়।helpers
require_once()
helpers
require
require_once
require_once
ফাংশন দরকারী যখন প্রয়োজন হয়, কিন্তু হিসাবে একটি একশিলা সমাধান সব শ্রেণীর লোড জন্য সর্বত্র ব্যবহার করার জন্য এটি গণ্য করা যাবে না।
পিয়ার 2 উইকি (যখন এটি বিদ্যমান ছিল) কমপক্ষে লাইব্রেরি কোডের জন্য অটোল্যাড আইংয়ের পক্ষে সমস্ত প্রয়োজনীয় প্রয়োজন / নির্দেশাবলী অন্তর্ভুক্ত করার জন্য ভাল কারণগুলি তালিকাভুক্ত করত । যখন ফারের মতো বিকল্প প্যাকেজিং মডেলগুলি দিগন্তে থাকে তখন এগুলি আপনাকে কঠোর ডিরেক্টরি কাঠামোর সাথে সংযুক্ত করে।
আপডেট: উইকির ওয়েব সংরক্ষণাগারিত সংস্করণটি চিত্তাকর্ষক কুৎসিত হিসাবে, আমি নীচের সবচেয়ে বাধ্যতামূলক কারণগুলি অনুলিপি করেছি:
- (পিয়ার) প্যাকেজটি ব্যবহার করার জন্য অন্তর্ভুক্ত_পথ প্রয়োজন। এটি তার নিজের অন্তর্ভুক্ত_পথের সাথে অন্য অ্যাপ্লিকেশনটির মধ্যে একটি পিয়ার প্যাকেজ বান্ডেল করা, প্রয়োজনীয় উত্সযুক্ত একটি একক ফাইল তৈরি করা, বিস্তৃত উত্স কোড পরিবর্তন ছাড়াই একটি পিয়ার প্যাকেজকে একটি ফার সংরক্ষণাগারে স্থানান্তরিত করতে অসুবিধা সৃষ্টি করে।
- যখন শীর্ষ-স্তরের প্রয়োজনীয়তা_সটি শর্তসাপেক্ষে প্রয়োজনীয়_অনসেসের সাথে মিশ্রিত হয়, এর ফলস্বরূপ এপিসির মতো ওপকোড ক্যাশে যে কোডটি অপ্রচলযোগ্য হয় তার কোড হতে পারে, যা পিএইচপি 6 এর সাথে বান্ডেল হবে।
- আপেক্ষিক প্রয়োজন_অনসের প্রয়োজন যে অন্তর্ভুক্ত_পথটি ইতিমধ্যে সঠিক মান হিসাবে সেট আপ করা উচিত, যথাযথ অন্তর্ভুক্ত_পথ ব্যতীত প্যাকেজ ব্যবহার করা অসম্ভব হয়ে পড়েছে
*_once()
ফাংশন সূচনা প্রত্যেক পেরেন্ট ডাইরেক্টরি নিশ্চিত করার আপনি সহ করছি ফাইলটিতে একটি ইতোমধ্যেই অন্তর্ভুক্ত করা হয়েছে হিসাবে একই নয়। এটা মন্দার কারণ অংশ।
আমি সিঞ্চের মতো একটি সরঞ্জাম বেঞ্চমার্কিংয়ের জন্য ব্যবহার করার পরামর্শ দিচ্ছি । আপনি সমস্ত প্রস্তাবিত পদ্ধতি চেষ্টা করতে পারেন এবং প্রতিক্রিয়ার সময়ের তুলনা করতে পারেন।
আরো উপর require_once()
এ টেক তোমার ইউনিভার্স ।
এমনকি যদি require_once
এবং include_once
এর চেয়ে ধীরে ধীরে require
এবং include
(অথবা যে কোনও বিকল্পের উপস্থিতি থাকতে পারে), আমরা এখানে মাইক্রো-অপ্টিমাইজেশনের ক্ষুদ্রতম স্তরের কথা বলছি। আপনার সময়টি এমন কিছু সম্পর্কে উদ্বিগ্ন হওয়ার চেয়ে খারাপভাবে লিখিত লুপ বা ডাটাবেস কোয়েরিটি অনুকূল করে তুলতে অনেক বেশি ভাল সময় ব্যয় করে require_once
।
এখন, কেউ একটি যুক্তি তৈরি করতে পারে যা require_once
দোষী কোডিং অনুশীলনের অনুমতি দেয় কারণ আপনার অন্তর্ভুক্তটিকে পরিষ্কার এবং সুসংহত রাখার জন্য আপনার মনোযোগ দেওয়ার দরকার নেই, তবে এতে ফাংশনটি নিজেই বিশেষত এর গতির সাথে কিছুই করার নেই ।
স্পষ্টতই, কোড সাফাই এবং রক্ষণাবেক্ষণের স্বাচ্ছন্দ্যের স্বার্থে অটলয়েডিং ভাল but তবে আমি এটি স্পষ্ট করে বলতে চাই যে এর গতির সাথে কোনও সম্পর্ক নেই ।
হ্যাঁ, এটি প্লেইন ওলের চেয়ে কিছুটা বেশি ব্যয়বহুল require আমার মতে এই কথাটি হ'ল আপনি যদি নিজের কোডটিকে নকল না করার জন্য যথেষ্ট পরিমাণে সংগঠিত রাখতে পারেন তবে * _once () ফাংশন ব্যবহার করবেন না, কারণ এটি আপনাকে কিছু চক্র সাশ্রয় করবে।
তবে _once () ফাংশনগুলি ব্যবহার করা আপনার অ্যাপ্লিকেশনটিকে মেরে ফেলবে না। মূলত, কেবল আপনার অন্তর্ভুক্তগুলি সংগঠিত না করার অজুহাত হিসাবে এটি ব্যবহার করবেন না । কিছু ক্ষেত্রে, এটি ব্যবহার করা এখনও অনিবার্য এবং এটি কোনও বড় বিষয় নয়।
আমি মনে করি পিয়ার ডকুমেন্টেশনে, একটি প্রয়োজনীয়তা, প্রয়োজনীয়_অনসিস, অন্তর্ভুক্ত এবং অন্তর্ভুক্ত_র জন্য একটি প্রস্তাবনা রয়েছে। আমি সেই নির্দেশিকাটি অনুসরণ করি। আপনার আবেদন আরও স্পষ্ট হবে।
গতির সাথে এর কোনও যোগসূত্র নেই। এটি নিখুঁতভাবে ব্যর্থ সম্পর্কে।
যদি প্রয়োজনীয়_অনস () ব্যর্থ হয় তবে আপনার স্ক্রিপ্টটি সম্পন্ন হবে। অন্য কিছুই প্রক্রিয়া করা হয় না। যদি আপনি অন্তর্ভুক্ত_অনস () ব্যবহার করেন তবে আপনার স্ক্রিপ্টের বাকী অংশ রেন্ডার করার চেষ্টা করবে, সুতরাং আপনার ব্যবহারকারীরা সম্ভবত আপনার স্ক্রিপ্টে ব্যর্থ হয়েছে এমন কোনও কিছুর জন্য জ্ঞানী হতে পারবেন না।
আমার ব্যক্তিগত মতামতটি হ'ল প্রয়োজনীয়_অনসের ব্যবহার (বা অন্তর্ভুক্ত_অেন্স) খারাপ অভ্যাস কারণ কারণ আপনি যদি ইতিমধ্যে সেই ফাইলটি অন্তর্ভুক্ত করেন এবং মারাত্মক ত্রুটির ফলে ডাবল অন্তর্ভুক্ত ফাইলগুলির ত্রুটিগুলি দমন করে থাকেন (যেমন ফাংশন / শ্রেণি / ইত্যাদির সদৃশ ঘোষণা)) ।
আপনার যদি কোনও ফাইল অন্তর্ভুক্ত করার দরকার হয় তবে আপনার জানা উচিত।