Хурдан биелэх PHP код бичихэд анхаарах зүйлсээс
Туршлагатай кодеруудын зөвлөгөө ба өөрийн туршлагадаа дулдуйдан эмхэтгэсэн зөвлөмж (хурдны зөрүү зэрэг тоо баримтуудыг бодитоор шалгаж тогтоосон)
Код бичих гэдэг бүхэл бүтэн соёл юм. Зарим хүмүүс кодны эмх цэгцтэй, алдаагүй төгс, хөнгөн хурдан байдлыг түүний гоо сайхан гэж ч үздэг.
Ингээд туршлагатай кодеруудын зөвлөгөө бас нэн ялангуяа өөрийн туршлагадаа дулдуйдан ийм нэгэн зөвлөмжийг эмхэтгэлээ. Дор дурдсан хурдны зөрүүтэй холбогдох тоо баримтуудыг өөрийн гараар код бичин ажиллуулж байж гаргаж авсан буюу жинхэнэ бодитой баталгаатай үр дүн болохыг тэмдэглэе.
Эхлээд хурдны талаарх асуудлыг жижиг гэж бүү орхи гэж захия. Секундыг мянга хуваасны нэгтэй тэнцэх хэмжээний ялгаа хэдэн мянга, хэдэн сая хэрэглэгчтэй болоод ирэх үед толгойны өвчин болох вий. За олон хэрэглэгчтэй болохоо болъё гэхэд наад захын DDOS халдлагад сөхрөхөд чамгүй нэрмээс болж л таарна.
for дотор нөхцөл шалгахдаа функц бүү ашигла
for($i = 0; count($array) < 1000000; $i++){
array_push($array, $i);
}
гэвэл count()
функц нэг сая удаа ажиллана. Харин үүний оронд $i < 1000000
гэж шалгавал 40 орчим хувиар хурдан байна.
"" ба '' хашилтуудыг зөв зохистой хэрэглэ
Болж өгвөл '' буюу дан хашилтыг хэрэглэхийг зорих нь зөв. Учир нь PHP хэлний хөрвүүлэгч "" буюу давхар хашилт доторхыг шалгаж харин '' доторхыг алгасч зүгээр л string буюу текст гэж үздэг. Жишээлбэл
$name = 'Galaa';
echo "Name: $name";
кодын үр дүнд Name: Galaa
гэж хэвлэгдэнэ. Харин 'Name: $name'
гэвэл Name: $name
гэж л хэвлэгдэнэ. Тэгэхээр мэдээж '' буюу дан хашилт нь "" буюу давхар хашилтаас илүү хурдан. Иймээс дээрх кодыг echo 'Name: ', $name;
гэж бичих нь зүйтэй.
print, printf бус харин echo ашигла
echo илүү хурдан хэвлэж байна.
echo ашиглахдаа хувьсагчдыг бүү нэгтгэ
echo $var1 . $var2;
бус харин echo $var1, $var2;
гэж бич. Эс тэгвээс хоёр хувьсагчийг нэгтгэх үйлдэлд хугацаа алдана.
Онц шаардлагагүй хувьсагчдыг бүү зарла
$time_start = microtime(true);
/*
PHP code
*/
$time_spent = round(microtime(true) - $time_start, 3);
echo $time_spent;
Энд $time_spent
хувьсагч илүү харагдаж байна. Үүний оронд echo round(microtime(true) - $time_start, 3);
гэвэл санах ойг хэмнэх ач холбогдолтой.
Дахин хэрэглэгдэхгүй хувьсагчдыг устга
Дахин ашиглахгүй тохиолдолд "томоохон" хувьсагчдыг unset()
хийх нь зүйтэй. Энд массив, обьект, ихээхэн урт стринг зэрэг тооцогдоно. Ингэснээр санах ой хэмнэгдэнэ.
include_once, require_once бус харин include, require ашиглахыг зорь
Өөр php файл дуудахдаа include_once
, require_once
ашиглахаас зайлсхий. Учир нь эдгээр функцүүд ажиллахдаа тухайн файлыг өмнө нь дуудагдсан эсэхийг шалгадаг. Иймээс сайн алгоритм зохиочихоод include
эсвэл require
ашиглаж заншаарай.
Шинээр функц зохиож бичих гэж бүү яар
PHP-д нэгэнт байдаг функцтэй давхардуулан өөрийн функцийг бичих шаардлагатай. Биелэх хугацаа, ашиглах санах ой гээд аль ч талаасаа ашигтай байж чадахгүй.
Case-insensitive функцүүд илүү удаан биелэх талтай
Жишээлбэл stristr()
функц strstr()
функцээс 30 хувь удаан ажиллаж байна.
Regex ашигладаг функцүүдийг гарцаагүй үед л ашигла
Энгийн текст функцүүдтэй харьцуулахад regular extression ашигладаг функцүүд мэдэгдэхүйц удаан ажилладаг. Жишээлбэл preg_replace()
функц str_replace()
функцээс 1.3 дахин удаан биелж байна.
if ба switch-ийг шалгах нөхцөлтэйгөө уялдуулан сонго
if($user === 'galaa'){
echo 'Hello Galaa';
}elseif($user === 'munguu'){
echo 'Hello Munguu';
}elseif($user === 'munhuu'){
echo 'Hello Munhuu';
}else{
echo 'Hello guest';
}
гэхийн оронд
switch($user){
case 'galaa':
echo 'Hello Galaa';
break;
case 'munguu':
echo 'Hello Munguu';
break;
case 'munhuu':
echo 'Hello Munhuu';
break;
default:
echo 'Hello guest';
}
гэх нь зөв. Харин эсрэгээрээ хувирамтгай эсвэл харилцан адилгүй олон янзын нөхцөлд мэдээж if/elseif ашиглана.
== бус харин === харьцуулалтыг ашигла
Адил төрлийг харьцуулахад бараг ялгаагүй боловч string ба number мэтээр өөр өөр төрлийн утгуудыг харьцуулах үед === илүү хурдан, тодруулбал ойролцоогоор 1.2 дахин хурдан байна.
Тэгээд ч === нь төрөл хувиргахгүй буюу утга нь ч төрөл нь ч адил байхыг шаардах учир илүү найдвартай шалгалт болдог.
функцийн зарим өвөрмөц хэрэглээг судал
Жишээлбэл isset функцийн талаар php.net дээрх manual-аас уншиж байхад string төрлийн хувьсагчид массив маягаар хандах боломжийг нь ашиглан текстийн уртыг шалгаж болох нь анзаарагдаж байна. Тодруулбал $name = 'galaa'
үед isset($name[4])
ба strlen($name) === 5
логик илэрхийллүүд адилхан true
утгатай.
SELECT * бүү хэрэглэ
Зөвхөн шаардлагатай багануудыг л сонгож ав. Эс тэгвээс өгөгдлийн сан дээр хугацаа алдахаас гадна PHP дээр санах ойгоо үргүй зарцуулах аюултай.
давталт дотроос өгөгдлийн санд бүү ханд
Өгөгдлийн санд хандахад бас л тодорхой хугацаа алдана. Иймээс өгөгдлийн санд олон дахин хандах бус харин илүү ч үгүй ч дутуу ч үгүй байхаар сайтар боловсруулсан цөөн query ажиллуулах нь оновчтой. Үүний тулд өгөгдлийн сан дахь бэлэн функцүүд, join мэтийн арга болон бусад шаардлагатай зүйлсийг судалж эзэмших хэрэгтэй.
өгөгдлийн сангаа сайтар тохируул
Өгөгдлийн сангийн зохион байгуулалтаас эхлээд индексжүүлэлтдээ хүртэл анхаарах шаардлагатай.
класс дахь public хувьсагч руу шууд ханд
$class->get_name()
буюу ямар нэгэн method-оор дамжин хандах нь $class->name
гэж хандахаас бараг л хоёр дахин удаан.
global хувьсагчаас local хувьсагч харьцангуй хурдан
Нэг сая удаагийн давталтаар хэд хэдэн удаа тестлэхэд local хувьсагчтай ажиллах нь global хувьсагчтай ажиллахаас үл мэдэг хурдан байгаа нь ажиглагдаж байна.
"цэмцгэр" код бүхэн сайн байх албагүй
$tmp = $a;
$a = $b;
$b = $tmp;
дээрх код харахад "заваан" ч
list($a, $b) = array($b, $a);
ганц мөр цэмцийсэн кодоос 2.6 дахин хурдан ажиллана.