การใช้ @ ป้องกัน error ในกรณีที่ไม่พบไฟล์
บทความนี้เกิดขึ้นจากความสงสัยในการใช้งาน @ เพื่อป้องกัน error ในการเปิดไฟล์ หรือการ include ซึ่งข้อสงสัยของผมก็คือ ระหว่างการทดสอบไฟล์ว่ามีหรือไม่ก่อนการโหลด กับการ ใช้ @ เพื่อปิดการแสดง error แบบไหนจะเร็วกว่ากัน
โค้ดสำหรับทดสอบของผม ส่วนที่ 1
และ ส่วนที่ 2
ในกรณีของส่วนที่ 1 ผมได้ใช้ @ เพื่อปิด error ในกรณีที่ไม่ไม่พบไฟล์ xxx.php ซึ่งในบางครั้งเราอาจต้องการ include ไฟล์ที่ไม่มีอยู่จริงก็ได้ และ ในส่วนที่ 2 ผมใช้การทดสอบไฟล์ก่อนด้วย is_file() ถ้ามีก็ค่อยไปโหลดไฟล์
กรณีทดสอบที่ 1 ทำการทดสอบวนลูป 1000 ครั้งกับไฟล์ xxx.php ที่มีอยู่จริง ผลลัพท์คือ
กรณีทดสอบที่ 2 ทำการทดสอบวนลูป 1000 ครั้งเช่นกัน แต่ไม่มีไฟล์ xxx.php
จากผลการทดสอบด้านบน สรุปได้ว่า การใช้ is_file ทำการทดสอบไฟล์ก่อนการโหลด สามารถทำความเร็วได้ดีกว่า(เร็วกว่า) การใช้เครื่องหมาย @ เพื่อปิด error ในกรณีที่ไม่พบไฟล์ โดยเฉพาะในกรณีที่ไม่มีไฟล์ จะเห็นความแตกต่างค่อนข้างชัดเจน
แต่อย่างไรก็ตาม จากการทดสอบซ้ำหลายๆรอบ ผลการทดสอบในกรณีที่มีไฟล์ ในบางครั้ง การใช้ @ กลับทำเวลาได้ดีกว่า(เล็กน้อย)
ด้านบนเป็นโค้ดที่ผมใช้ทดสอบ
โค้ดสำหรับทดสอบของผม ส่วนที่ 1
@include('xxx.php')
และ ส่วนที่ 2
if (is_file('xxx.php')) {
include('xxx.php');
}
ในกรณีของส่วนที่ 1 ผมได้ใช้ @ เพื่อปิด error ในกรณีที่ไม่ไม่พบไฟล์ xxx.php ซึ่งในบางครั้งเราอาจต้องการ include ไฟล์ที่ไม่มีอยู่จริงก็ได้ และ ในส่วนที่ 2 ผมใช้การทดสอบไฟล์ก่อนด้วย is_file() ถ้ามีก็ค่อยไปโหลดไฟล์
กรณีทดสอบที่ 1 ทำการทดสอบวนลูป 1000 ครั้งกับไฟล์ xxx.php ที่มีอยู่จริง ผลลัพท์คือ
ส่วนที่ 1 @include('xxx.php')
เวลาที่ใช้ในการประมวลผลเพจ 0.3203668594 วินาที
ส่วนที่ 2 is_file('xxx.php')
เวลาที่ใช้ในการประมวลผลเพจ 0.3196368217 วินาที
กรณีทดสอบที่ 2 ทำการทดสอบวนลูป 1000 ครั้งเช่นกัน แต่ไม่มีไฟล์ xxx.php
ส่วนที่ 1 @include('xxx.php')
เวลาที่ใช้ในการประมวลผลเพจ 1.9867811203 วินาที
ส่วนที่ 2 is_file('xxx.php')
เวลาที่ใช้ในการประมวลผลเพจ 0.3470931053 วินาที
จากผลการทดสอบด้านบน สรุปได้ว่า การใช้ is_file ทำการทดสอบไฟล์ก่อนการโหลด สามารถทำความเร็วได้ดีกว่า(เร็วกว่า) การใช้เครื่องหมาย @ เพื่อปิด error ในกรณีที่ไม่พบไฟล์ โดยเฉพาะในกรณีที่ไม่มีไฟล์ จะเห็นความแตกต่างค่อนข้างชัดเจน
แต่อย่างไรก็ตาม จากการทดสอบซ้ำหลายๆรอบ ผลการทดสอบในกรณีที่มีไฟล์ ในบางครั้ง การใช้ @ กลับทำเวลาได้ดีกว่า(เล็กน้อย)
<?php
// เริ่มต้นการใช้งาน แทรกส่วนนี้ไว้ตอนต้นๆของเพจ ก่อนการประมวลผล
include( 'timer.php' );
$bm = new Timer; // เรียกใช้งาน class
$bm->start(); // เริ่มต้นจับเวลา
?>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<p>ส่วนที่ 1 @include('xxx.php')</p>
<p>
<?php
// section 1 โหลดไฟล์โดยใช้ @ ป้องกัน error กรณีที่ไม่พบไฟล์
for ($i = 0 ; $i < 1000 ; $i++){
@include('xxx.php');
}
?>
</p>
<?php
echo 'เวลาที่ใช้ในการประมวลผลเพจ '.$bm->stop(). ' วินาที'; // แสดงเวลาที่ใช้ไป
$bm = new Timer; // เรียกใช้งาน class
$bm->start(); // เริ่มต้นจับเวลา
?>
<p>ส่วนที่ 2 is_file('xxx.php')</p>
<p>
<?php
// section 2 ใช้การทดสอบไฟล์ก่อนโหลด
for ($i = 0 ; $i < 1000 ; $i++){
if (is_file('xxx.php')) {
include('xxx.php');
}
}
?>
</p>
<?php
echo 'เวลาที่ใช้ในการประมวลผลเพจ '.$bm->stop(). ' วินาที'; // แสดงเวลาที่ใช้ไป
?>
ด้านบนเป็นโค้ดที่ผมใช้ทดสอบ