ขอถามเป็นความรู้ เรื่องความเร็วของ html vs php ครับ

เริ่มโดย amazegu, 24 กุมภาพันธ์ 2013, 23:22:35

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

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

EntServ

อ้างถึงจาก: normalblue ใน 25 กุมภาพันธ์ 2013, 16:25:36
อ้างถึงจาก: tdelphi ใน 25 กุมภาพันธ์ 2013, 00:30:15
ผมตอบให้เอง ไม่ต้องเถียงกัน

html เป็น output สุดท้าย ที่ browser ต้องนำมา rendor หน้าจอ เพื่อสร้าง Graphic User Interface ตามคำสั่งในภาษา html    แบบนี้เราเรียกว่า static web page หรือ static html

php เป็นภาษาเขียนโปรแกรมแบบ interpreter คือ ต้อง compile (แปลภาษา) ทุกครั้งเมื่อเรียกให้ทำงาน และ gen html output ออกมา เพื่อส่งให้ browser นำไปประมวลผลต่อ  แบบนี้เราเรียกว่า dynamic web page หรือ dynamic html


ซึ่งถ้าเทียบกันแบบตัวต่อตัว  เช่น index.html กับ index.php
ตัว index.html ย่อมอ่านและส่งข้อมูลได้เร็วกว่า เพราะ ไม่ต้องประมวลผลใดๆ เนื่องจาก เป็น html output อยู่แล้ว webserver จะอ่านไฟล์ แล้วส่งกลับไปได้เลย

แต่ข้อเสียของ static html ก็มี เช่น ไม่สามารถเชื่อมต่อฐานข้อมูลได้ หรือ ประมวลผลซับซ้อนได้
จึงเป็นที่มาของการออกแบบ CGI (common gateway interface) ในสมัยแรกๆ (perl,c++) และพัฒนามาเป็น webserver modules (mod) ในภายหลัง เช่น php ที่เราใช้กันในปัจจุบัน (แต่ก็ยังมีเป็นรูปแบบอื่นๆ อีกเช่น fast-cgi  เป็นต้น)

ถามว่า ถ้าอยากจะให้ php เร็วใกล้เคียงกับ html ทำได้ไหม

ขอตอบว่า ทำได้นะครับ และไม่ยากด้วย

คือ การใช้ caching มาช่วย ในการ cache html output ที่ถูก gen ไว้แล้ว สำหรับหน้าที่มี output ซ้ำๆ กัน จะทำให้ได้ความเร็วพอๆ กันเลย ต่างกันนิดเดียว แต่คุ้มค่ามากเพราะ บริหารจัดการกับข้อมูล (data) ได้ง่ายกว่า


เสริมนิดนึงครับ ผมว่า PHP ที่เราใช้อยู่แทบจะ 99.9 % ใช้แค่ Interpreter นะครับ ไม่ใช่ Programming ชนิด Compile คือมันอ่านกันชนิดบรรทัดต่อบรรทัด
ส่วนที่เป็นชนิด Compiler คือตัวที่เราติดตั้งให้ทำงานร่วมกับ Apache หรือ PHP Engine

ขออธิบายในเชิงสถาปัตยกรรมของ Application นะครับ หากตัดส่วนฐานข้อมูลออก สิ่งที่ทำงานกับเราคือ 2 ตัว Apache และ PHP Engine

Apache นี่ทำงานในส่วนของ Presentation Tier ทำการจัดการ HTML เพื่อนำเสนอไปยัง Browser ในภาษาที่ Browser เข้าใจ แล้วก็ดูแลในส่วนของ Request ต่างๆ ที่เข้ามายัง Server ซึ่งหลักๆ ก็คือ HTTP Request จาก browser
PHP Engine นี่ทำงานในส่วนของ Business Logic ทำการ Interpret เอกสาร PHP เป็น HTML แล้วส่งไปยัง Presentation Tier

เรามาดูกันในชั้น OSI Layer ที่ต่ำกว่า Application Layer กับ App Achitecture ดีกว่าครับ ว่ามันเกิดอะไรขึ้นตามสภาพการณ์นั้น หากพิจารณาความเร็วที่ว่าในเชิงของระยะเวลาทั้งหมดตั้งแต่ Request ไปกระทั่ว receive ฉะนั้น OSI Layer ใช้เวลาเท่ากัน ตัดเข้ามาที่ Apache และ PHP เลย

Access Disk
กรณี HTML 1 kB/file บน Server ไฮโซมี SSD 1000 ไฟล์ กรณีดีสุดใช้ Seek Time + Data Transfer Time = 0.1ms+1000(1/300) ms = 3.4 ms (Data Transfer Rate = 300 kB/ms = 300 MB/s)
กรณี PHP 1kB/file บน Server เดียวกันที่ใช้ Loop วนสร้าง HTML code มีการ Access ฮาร์ดดิสค์ 1 ครั้งและ Transfer 1 ไฟล์ = 0.1ms +1(1/300 ) ms = 0.1 ms

Access Memory
กรณี HTML ความเร็ว Data Transfer ของ RAM = 6400 MB/s = 6.4 MB/ms ฉะนั้นไฟล์ขนาดนั้น ไม่มีผลต่อแรม เพราะไวกว่า Harddisk มากกว่า 20 เท่าอย่างน้อย ฉะนั้นเวลารวมที่ส่งทุกอย่างไปยัง HTTP Response คือ 3.4 ms
กรณี PHP Engine มี Data Transfer Rate เดียวกัน ต้องส่งให้ CPU ประมวณและ Gen HTML ขนาด 1000 kB ~ 1 MB สมมติ Engine Idle อยู่บน Memory มันต้อง Handle ข้อมูลปริมาณ worse case 5 เท่าของขนาดข้อมูลคือ 5 MB ใช้เวลา 0.8 ms สิริเวลารวมคือ 0.8+0.1 ms = 0.9 ms สำหรับส่งข้อมูลไปยัง HTTP Response แต่จริงๆ แล้วถึง Environment จะเกิดบริบทอื่นๆ อีกก็จะเห็นได้ว่าในกรณี PHP ยังเร็วกว่าถึง 3 เท่ากว่าๆ ไม่ต้องนับเวลา Write DATA เพราะทำงานคนละส่วน

ส่วนกรณี Query ขึ้นมา ผมไม่แน่ใจว่าหมายถึงอะไร จากฐานข้อมูลหรือเปล่า ถ้าแบบนั้นคงต้องไปสร้าง Socket ติดต่อกับฐานข้อมูลโดยตรงแล้วหละครับเพราะ HTML ทำไม่ได้

ความรู้ใหม่
รับทำระบบ Streaming Server อยากได้เว็บสตรีมมิ่งหล่อๆ ติดต่อ PM ครับ

EazySEO

อ้างถึงจาก: amazegu ใน 24 กุมภาพันธ์ 2013, 23:22:35
สมมติผมจะสร้างหน้าเว็บสัก1000หน้า สมมติว่าข้อมูลเหมือนกัน
html จะประมวลผลเร็วกว่าถูกต้องหรือเปล่าครับ แต่จะช้าตอนเขียนเพราะเราต้องสร้างไฟล์ทั้ง 1000 หน้า
ในขณะที่phpอาจจเขียนเพียงแค่ไฟล์เดียวแต่ใช้ query string เอา

ขอบคุณครับ :wanwan017: :wanwan017: :wanwan017:

ถูกต้องแล้วคร๊าบ :wanwan020:
้html เร็วกว่า php เพราะไม่ต้องรอประมวลผลจาก Server
แต่ถ้า php ไม่ได้มีคำสั่งประมวลผลข้อมูลอะไรมากมาย
ความเร็วไม่ต่างกันครับ

kiki_p4

html เร็วกว่าแน่นอน แต่ php ถึงจะช้ากว่า ถ้าเขียนโปรแกรมดี ๆ ก็อาจจะช้ากว่าแต่ไม่ถึงขนาดหงุดหงิด เดี๋ยวนี้เครื่องเซิฟเวอร์ทำงานเร็วมากครับ
ถ้าเนตไม่มีปัญหาควรจะโหลดหน้าเพจให้เสร็จภายใน 5 วินาทีจะดีมาก ๆ แต่ถ้ามีรูปที่น่าดูมาก ๆ คนส่วนใหญ่จะรอได้ครับ

fil22t


MapTwoZa

อ้างถึงจาก: fil22t ใน 28 กุมภาพันธ์ 2013, 18:15:27
PHP เสียงต่อการโดน SQL INjection มากครับ

escape char ก็ไม่น่าจะโดนแล้วหนิ

หรือมีวิธีลึกซึ้งกว่านั้น
Good code quality Developer :D