เปิดปิด <? ?> บ่อยๆ กับ ใช้ php ทั้งหมด อันไหนดีกว่ากัน

เริ่มโดย hurahura, 08 มกราคม 2008, 01:10:39

หัวข้อก่อนหน้า - หัวข้อถัดไป

0 สมาชิก และ 1 ผู้มาเยือน กำลังดูหัวข้อนี้

hurahura

- ผมเคยได้ยินมาว่าเวลาเขียนโค้ด ไม่ควรจะเปิด <?php  และปิด ?> บ่อยๆ เครื่องจะทำงานหนัก
- และผมก็เคยได้ยินมาอีกว่า ให้ใช้ html ให้มากที่สุด อะไรที่ไม่ต้องประมวลผลก็ไม่ต้องไปใช้ php

ทีนี้ถ้า 2 ข้อนี้มันขัดกันควรเลือกแบบไหนดีครับ


สมมุติทีเว็บอยู่ประมาณนี้ แบบเก็บ path ของเว็บไว้ในตัวแปล


<a href='<?=$path?>/index.html'><img src='<?=$path?>/image/pic01.jpg'></a>
<a href='<?=$path?>/profile.html'><img src='<?=$path?>/image/pic02.jpg'>
<a href='<?=$path?>/gallery.html'><img src='<?=$path?>/image/pic03.jpg'>
<a href='<?=$path?>/board.html'><img src='<?=$path?>/image/pic04.jpg'>
<a href='<?=$path?>/chat.html'><img src='<?=$path?>/image/pic05.jpg'>



จะเห็นว่ามีการเปิดปิด <? ?> เพื่อสลับการทำงานระหว่าง php กับ html อยู่เพียบเลย

กับอีกแบบนึงคือ เปิดปิด <? ?> ครั้งเดียว โดยจับ html ทั้งหมดของเว็บยัดลงตัวแปลซะ ก็จะได้ประมาณนี้

$text = "<a href='$path/index.html'><img src='$path/image/pic01.jpg'>";
$text .= "<a href='$path/profile.html'><img src='$path/image/pic02.jpg'>";
$text .= "<a href='$path/gallery.html'><img src='$path/image/pic03.jpg'>";
$text .= "<a href='$path/board.html'><img src='$path/image/pic04.jpg'>";
$text .= "<a href='$path/chat.html'><img src='$path/image/pic05.jpg'>";
echo $text;


อยากถามว่าแบบไหนดีกว่ากันครับ


jiw

เข้ามารอคำตอบเช่นกัน

เพราะปกติผมเขียนแบบหลัง

อ้างถึง- และผมก็เคยได้ยินมาอีกว่า ให้ใช้ html ให้มากที่สุด อะไรที่ไม่ต้องประมวลผลก็ไม่ต้องไปใช้ php


ยังไง รอคำตอบด้วยคนครับ

Q(@3@)o

เคยได้ยินมือโปรเขียน php บอกว่าาาาาาา

"เนี้ยเด็กใหม่สมัยเนี้ย เขียนอะไรเปลืองระบบฉิบ"

อะไรที่ตัดได้ก็ตัดครับ ถ้าเวปคุณเข้าเยอะเมื่อไร จะมานั่งร้องให้

hurahura

อ้างถึงจาก: Q(@3@)o ใน 08 มกราคม 2008, 01:24:52
เคยได้ยินมือโปรเขียน php บอกว่าาาาาาา

"เนี้ยเด็กใหม่สมัยเนี้ย เขียนอะไรเปลืองระบบฉิบ"

อะไรที่ตัดได้ก็ตัดครับ ถ้าเวปคุณเข้าเยอะเมื่อไร จะมานั่งร้องให้

เห็นด้วยเลยครับ ผมเคยถามคำถามลักษณะแบบนี้ที่บอร์ดอื่น
มีแต่คนมาบอกว่า แค่นี้จะไปสนใจทำไม เขียนยังไงมันก็ออกมาเหมือนกันแหละ เขียนให้มันใช้งานได้ก็พอแล้ว

เรื่องแค่นี้มันไม่ค่อยเห็นผลก็จริง แต่พอคนเข้าเยอะๆ จะรู้ว่าเองว่าเรื่องเล็กน้อยพวกนี้สำคัญแค่ไหน


icez

เอ่อ...
แบบแรก: เปลือง cpu เพราะมันต้องหาช่วงทำงานของ script หลายครั้ง
แบบหลัง: เปลือง ram เพราะต้องเก็บข้อมูลเข้าตัวแปร...

เอาแบบหลัง แต่สั่ง echo ออกมาตรงๆ เลยไม่ดีกว่าหรอครับ


ปล. ผมเขียนจริงก็เขียนปนๆ กันครับ ตรงนี้มีผลไม่ถึง 0.000001 % ของระบบ
ปกติอยู่ที่ algorithm การประมวลผลอะไรประหลาดๆ มากกว่า
[direct=http://www.thzhost.com/]THZHost[/direct] SSD Hosting ไทย/สิงคโปร์ พร้อม firewall ป้องกันการยิงเว็บ + scan ไวรัสในเว็บ

hurahura

อ้างถึงจาก: icez ใน 08 มกราคม 2008, 01:32:38
เอ่อ...
แบบแรก: เปลือง cpu เพราะมันต้องหาช่วงทำงานของ script หลายครั้ง
แบบหลัง: เปลือง ram เพราะต้องเก็บข้อมูลเข้าตัวแปร...

เอาแบบหลัง แต่สั่ง echo ออกมาตรงๆ เลยไม่ดีกว่าหรอครับ


ปล. ผมเขียนจริงก็เขียนปนๆ กันครับ ตรงนี้มีผลไม่ถึง 0.000001 % ของระบบ
ปกติอยู่ที่ algorithm การประมวลผลอะไรประหลาดๆ มากกว่า

ขอบคุณมากครับ
ผมก็เขียนปนๆกันมั่วไปหมด แต่ตอนนี้อยากทำการเขียนของตัวเองให้เป็นมาตรฐาน เลยกะจะเลือกเอาแบบเดียว
ไม่ใช่แค่เรื่องไม่ให้เปลืองทรัพยากรณ์ แต่เพื่อให้โค้ดมันเป็นระเบียบเป็นมาตฐานเดียวกันจะได้แก้ไขได้ง่ายด้วย

อ้างถึงจาก: icez ใน 08 มกราคม 2008, 01:32:38
เอาแบบหลัง แต่สั่ง echo ออกมาตรงๆ เลยไม่ดีกว่าหรอครับ

คืออ่านมาจากหลายเว็บ และหลายคนแนะนำว่าให้ใช้ echo ให้น้อยที่สุด
ผมก็เลยพยายามฝึกเขียนให้ เอาค่าลงตัวแปลให้หมด แล้ว echo ทีเดียว

เว็บที่แนะนำเรื่องนี้มีหลายเว็บ
เช่นเว็บนี้ hxxp://biolawcom.de/blog/467
ผมก็เลยทำตามนั้นมาตลอด อ่ะครับ

BosnoS

แบบผมเลย ตอนนี้คนดูแล server บ่นเช้าบ่นเย็นล่ะครับ  ;D


เพราะผมเพิ่งแต่ sql  มีอะไรก็ดึง sql

include ทุกหน้า ดึง sql ทุกหน้า php ทุกหน้า

UIP 25-30k Ram 4 GB เอาไม่อยู่แล้ว T_T

EThaiZone

อ้างถึงจาก: icez ใน 08 มกราคม 2008, 01:32:38
ผมเขียนจริงก็เขียนปนๆ กันครับ ตรงนี้มีผลไม่ถึง 0.000001 % ของระบบ
ปกติอยู่ที่ algorithm การประมวลผลอะไรประหลาดๆ มากกว่า

ตามนั้นเลย

ยิ่งกับหลายคน แค่วนอาเรย์ foreach ก็น่าใช้
เห็นบางคนก็ไปใช้ while แทน ไปๆ มาๆ เพราะเขียนเงื่อนไขไม่คลุม
วนลูปไม่หยุดก็มี

ปล. ผมก็ echo ครั้งสุดท้ายครั้งเดียวเหมือนกัน
เพราะหลายครั้งต้องมีการเรียก header กับ cookie ก่อน
เลยเก็บเรื่องแสดงผลไว้หลังสุด  :)

moonoi

TIP นิดๆ
- echo ดีกว่า print (เพราะ print มี return)
- if(empty($var)) ดีกว่า if(!$var)
- for($i=0,$j=strlen($var);$i<$j;$i++) ดีกว่า for($i=0;$i<strlen($var);$i++) เพราะตัวหลังต้อง strlen() ทุกรอบ loop
- function test() {
     $a++;
   }
   ดีกว่า
   function test() {
     global $a;
     $a++;
   }

thenetxx

ถ้า uip ไม่เยอะมาก ก็อย่ากังวลครับ

ต่างกันไม่มากมาย

-*-

ps.ช่วงหลังใช้แต่ template engine ไอพวกนี้ไม่ค่อยได้ใช้ -*-
Develop site but can't develop life
ASIA

icez

อ้างถึงจาก: EThaiZone ใน 08 มกราคม 2008, 09:32:37
อ้างถึงจาก: icez ใน 08 มกราคม 2008, 01:32:38
ผมเขียนจริงก็เขียนปนๆ กันครับ ตรงนี้มีผลไม่ถึง 0.000001 % ของระบบ
ปกติอยู่ที่ algorithm การประมวลผลอะไรประหลาดๆ มากกว่า

ตามนั้นเลย

ยิ่งกับหลายคน แค่วนอาเรย์ foreach ก็น่าใช้
เห็นบางคนก็ไปใช้ while แทน ไปๆ มาๆ เพราะเขียนเงื่อนไขไม่คลุม
วนลูปไม่หยุดก็มี

ปล. ผมก็ echo ครั้งสุดท้ายครั้งเดียวเหมือนกัน
เพราะหลายครั้งต้องมีการเรียก header กับ cookie ก่อน
เลยเก็บเรื่องแสดงผลไว้หลังสุด  :)
โจ้พูดถึงเรื่องนี้เลยนึกได้
ตรงนี้มันมีเทคนิคครับ เอ๊อก
ก่อนอื่นเลย ด้านบนสุดของแฟ้มเลย สั่ง
<?php ob_start(); ?>

แล้วก็มาท้ายสุดของแฟ้ม ใส่
<?php ob_end_flush(); ?>


* รวบ tag เปิดปิด php ได้ตามความเหมาะสมครับ

เปลืองแรมพอๆ กัน แต่ไวกว่าเก็บเข้าตัวแปรแล้วค่อย echo ออกมาทีเดียวเยอะเลยครับ
[direct=http://www.thzhost.com/]THZHost[/direct] SSD Hosting ไทย/สิงคโปร์ พร้อม firewall ป้องกันการยิงเว็บ + scan ไวรัสในเว็บ

worlddirectory

อ้างถึงจาก: hurahura ใน 08 มกราคม 2008, 01:10:39
- ผมเคยได้ยินมาว่าเวลาเขียนโค้ด ไม่ควรจะเปิด <?php  และปิด ?> บ่อยๆ เครื่องจะทำงานหนัก
- และผมก็เคยได้ยินมาอีกว่า ให้ใช้ html ให้มากที่สุด อะไรที่ไม่ต้องประมวลผลก็ไม่ต้องไปใช้ php

ทีนี้ถ้า 2 ข้อนี้มันขัดกันควรเลือกแบบไหนดีครับ


สมมุติทีเว็บอยู่ประมาณนี้ แบบเก็บ path ของเว็บไว้ในตัวแปล


<a href='<?=$path?>/index.html'><img src='<?=$path?>/image/pic01.jpg'></a>
<a href='<?=$path?>/profile.html'><img src='<?=$path?>/image/pic02.jpg'>
<a href='<?=$path?>/gallery.html'><img src='<?=$path?>/image/pic03.jpg'>
<a href='<?=$path?>/board.html'><img src='<?=$path?>/image/pic04.jpg'>
<a href='<?=$path?>/chat.html'><img src='<?=$path?>/image/pic05.jpg'>



จะเห็นว่ามีการเปิดปิด <? ?> เพื่อสลับการทำงานระหว่าง php กับ html อยู่เพียบเลย

กับอีกแบบนึงคือ เปิดปิด <? ?> ครั้งเดียว โดยจับ html ทั้งหมดของเว็บยัดลงตัวแปลซะ ก็จะได้ประมาณนี้

$text = "<a href='$path/index.html'><img src='$path/image/pic01.jpg'>";
$text .= "<a href='$path/profile.html'><img src='$path/image/pic02.jpg'>";
$text .= "<a href='$path/gallery.html'><img src='$path/image/pic03.jpg'>";
$text .= "<a href='$path/board.html'><img src='$path/image/pic04.jpg'>";
$text .= "<a href='$path/chat.html'><img src='$path/image/pic05.jpg'>";
echo $text;


อยากถามว่าแบบไหนดีกว่ากันครับ



ไม่มีผลหรอกท่าน ถ้าโฮตดีและแรง จะทำอะไรก็ได้ขอให้เราถนัดและสดวก ใช้งานง่ายสำหรับเรา
ทำตัวเองให้เป็นที่ยอมรับของสังคม


lemon

เป็นผมจะใช้แบบ เปิดปิด <? ?> เพื่อสลับการทำงานระหว่าง php กับ html ครับเพราะผมชอบใช้แบบนี้ง่ายดี
สำหรับโค้ดข้างต้นผมจะไม่ใช้ PHP ครับเพราะไม่จำเป็น
ถ้าตัวแปร path เก็บค่าชื่อโดเมนของเราไว้ผมจะใช้แบบนี้ครับ
<a href='/index.html'><img src='/image/pic01.jpg'></a>
<a href='/profile.html'><img src='/image/pic02.jpg'></a>
<a href='/gallery.html'><img src='/image/pic03.jpg'></a>
<a href='/board.html'><img src='/image/pic04.jpg'></a>
<a href='/chat.html'><img src='/image/pic05.jpg'></a>

แต่ถ้าตัวแปร path เก็บค่าชื่อโดเมนของที่อื่นไว้ผมจะใช้แบบนี้ครับ เช่น เก็บค่าwww.sanook.com
<a href='www.sanook.com/index.html'><img src='www.sanook.com/image/pic01.jpg'></a>
<a href='www.sanook.com/profile.html'><img src='www.sanook.com/image/pic02.jpg'></a>
<a href='www.sanook.com/gallery.html'><img src='www.sanook.com/image/pic03.jpg'></a>
<a href='www.sanook.com/board.html'><img src='www.sanook.com/image/pic04.jpg'></a>
<a href='www.sanook.com/chat.html'><img src='www.sanook.com/image/pic05.jpg'></a>

สรุปผมจะใช้โค้ด HTML ให้มากที่สุดครับ ส่วน PHP ใช้เมื่อโค้ด HTML เขียนไม่ได้เท่านั้นหรือใช้ HTML แล้วเสียเวลาเขียนครับ

payu


ขออนุญาตแก้ไขนะครับ ..

อ้างถึงจาก: moonoi ใน 08 มกราคม 2008, 09:58:21
- for($i=0,$j=strlen($var);$i<$j;$i++) ดีกว่า for($i=0;$i<strlen($var);$i++) เพราะตัวหลังต้อง strlen() ทุกรอบ loop

อันนี้ไม่ได้ดีกว่าครับ เพราะ compiler interpreter จะทำงาน strlen รอบเดียวครับ แล้วเก็บค่าไว้ใน heap

อ้างถึงจาก: moonoi ใน 08 มกราคม 2008, 09:58:21
- function test() {
     $a++;
   }
   ดีกว่า
   function test() {
     global $a;
     $a++;
   }

2 อันนี้ไม่เหมือนกันนะครับ
$a++ อันแรกเป็น local var ครับ
$a อันหลังเป็น global
ทำงานต่างกันเลยครับ

[direct=http://www.facebook.com/iipayu]payu on facebook[/direct]

icez

php เป็น interpreter ครับ ไม่ใช่ compiler :D

จึงเรียนมาเพื่อทราบ
[direct=http://www.thzhost.com/]THZHost[/direct] SSD Hosting ไทย/สิงคโปร์ พร้อม firewall ป้องกันการยิงเว็บ + scan ไวรัสในเว็บ

payu

อ้างถึงจาก: icez ใน 09 มกราคม 2008, 11:41:12
php เป็น interpreter ครับ ไม่ใช่ compiler :D

จึงเรียนมาเพื่อทราบ

แหมแก้ก็ได้ครับ .. พลาดหน่อยเดียวเอง .. ถูกครับ php เป็น interpreter
แต่ที่ผมบอกข้างบนก็ยังถูกนะครับ strlen ทำงานรอบเดียวแน่นอน

[direct=http://www.facebook.com/iipayu]payu on facebook[/direct]

EThaiZone

อ้างถึงจาก: icez ใน 09 มกราคม 2008, 00:26:03
อ้างถึงจาก: EThaiZone ใน 08 มกราคม 2008, 09:32:37
อ้างถึงจาก: icez ใน 08 มกราคม 2008, 01:32:38
ผมเขียนจริงก็เขียนปนๆ กันครับ ตรงนี้มีผลไม่ถึง 0.000001 % ของระบบ
ปกติอยู่ที่ algorithm การประมวลผลอะไรประหลาดๆ มากกว่า

ตามนั้นเลย

ยิ่งกับหลายคน แค่วนอาเรย์ foreach ก็น่าใช้
เห็นบางคนก็ไปใช้ while แทน ไปๆ มาๆ เพราะเขียนเงื่อนไขไม่คลุม
วนลูปไม่หยุดก็มี

ปล. ผมก็ echo ครั้งสุดท้ายครั้งเดียวเหมือนกัน
เพราะหลายครั้งต้องมีการเรียก header กับ cookie ก่อน
เลยเก็บเรื่องแสดงผลไว้หลังสุด  :)
โจ้พูดถึงเรื่องนี้เลยนึกได้
ตรงนี้มันมีเทคนิคครับ เอ๊อก
ก่อนอื่นเลย ด้านบนสุดของแฟ้มเลย สั่ง
<?php ob_start(); ?>

แล้วก็มาท้ายสุดของแฟ้ม ใส่
<?php ob_end_flush(); ?>


* รวบ tag เปิดปิด php ได้ตามความเหมาะสมครับ

เปลืองแรมพอๆ กัน แต่ไวกว่าเก็บเข้าตัวแปรแล้วค่อย echo ออกมาทีเดียวเยอะเลยครับ

เอื้อก เห็นโพสผมก็ร้อง "ลืมไปแล้วอะ  :o"

ปกติใช้บ่อย ทำไมตอนหลังๆ ลืมมันไปเลย  :-X

------------------------
อ้างถึงจาก: payu ใน 09 มกราคม 2008, 10:18:45

ขออนุญาตแก้ไขนะครับ ..

อ้างถึงจาก: moonoi ใน 08 มกราคม 2008, 09:58:21
- for($i=0,$j=strlen($var);$i<$j;$i++) ดีกว่า for($i=0;$i<strlen($var);$i++) เพราะตัวหลังต้อง strlen() ทุกรอบ loop

อันนี้ไม่ได้ดีกว่าครับ เพราะ compiler interpreter จะทำงาน strlen รอบเดียวครับ แล้วเก็บค่าไว้ใน heap

อ้าว ผมว่า strlen มันน่าทำงานทุกรอบนะ ผมสงสัยเลยลองเขียนแบบนี้ ไม่รู้เกี่ยวกันไหม

for($i = "A"; strlen($i) <= 5; $i .= "A") {
echo $i."<br>";
}

คือเขียนตรวจตัวเลขลูปนั้นแหละ เพราะทุกรอบลูป ก็มีแค่เลขลูปที่เปลี่ยนทุกรอบ
ไม่รู้เกี่ยวกันไหมนะ  :-X

อ้างถึงจาก: payu ใน 09 มกราคม 2008, 10:18:45
อ้างถึงจาก: moonoi ใน 08 มกราคม 2008, 09:58:21
- function test() {
     $a++;
   }
   ดีกว่า
   function test() {
     global $a;
     $a++;
   }

2 อันนี้ไม่เหมือนกันนะครับ
$a++ อันแรกเป็น local var ครับ
$a อันหลังเป็น global
ทำงานต่างกันเลยครับ



เขาคงหมายถึง
function test($a) {
     $a++;
}

มั้ง  ??? (พยายามแก้ตัวให้ เอิ้กๆ)

payu


ok ครับ .. ยอม

$var = str_repeat('a', 10000);

$s = microtime();

for($i=0,$j=strlen($var);$i<$j;$i++) {}

printf("%f<br>", microtime()-$s);


$s = microtime();

for($i=0;$i<strlen($var);$i++) {}

printf("%f<br>", microtime()-$s);


แต่อันนี้ ...
อ้างถึงจาก: EThaiZone ใน 09 มกราคม 2008, 15:04:13
เขาคงหมายถึง
function test($a) {
     $a++;
}

ก็ยังเป็น local นะครับ pass by value

แต่ถ้าแบบนี้

function test(&$a) {
     $a++;
}


ถูกครับ
[direct=http://www.facebook.com/iipayu]payu on facebook[/direct]

EThaiZone

แสดงว่าแบบนี้เร็วสุดสินะครับ


function test(&$a) {
     $a++;
}


ไว้ต้องหมั่นศึกษา  :P

hurahura

ขอบคุณมากครับ
ผมคาดหวังมานานแล้วว่าน่าจะมีซักเว็บหรือซักกระทู้(ที่เป็นภาษาไทย) ที่พูดถึงการเขียนโค้ดที่ให้ความสำคัญกับความเร็วและการใช้ทรัพยากรณ์ เท่าที่อ่านมากระทู้นี้ ได้ความรู้เยอะเลยครับ ใครมีอะไรเพิ่มเติมก็ช่วยๆได้นะครับ หรือไปตั้งกระทู้ใหม่ที่พูดถึงเท็คนิกการเขียนให้ทำงานเร็วไม่กินทรัพยากรณ์โดยเฉพาะเลยก็ดีครับ ที่นี่คนเก่งเยอะดี
:)