Kotchasan PHP Framework

สรุปภาพรวมความสามารถของคชสารเว็บเฟรมเวิร์ค

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

คนส่วนใหญ่เข้าใจว่า เราสามารถเพิ่มประสิทธิภาพของเว็บไซต์ได้โดยการเปลี่ยนมาใช้ Server ที่เป็น NGINX แทน

ข้อเท็จจริงคือ
NGINX เป็น Webserver ไม่ใช่ PHP มันถูกนำมาใช้แทน Apache ซึ่งปัจจัยหลักๆที่ NGINX ทำได้ดีกว่า Apache คือ NGINX ไม่มีการประมวลผล static ไฟล์ เช่น HTML, CSS และ ไฟล์รูปภาพ โดย NGINX จะส่งเฉพาะไฟล์ PHP เท่านั้นไปแปลผล และเนื่องจากการที่มันประมวลผลเฉพาะไฟล์ของ PHP เท่านั้นทำให้
        
  • NGINX มีประสิทธิภาพโดยรวมดีกว่า เนื่องจากไฟล์ส่วนใหญ่ที่ถูกเรียกเป็น static ไฟล์ ส่วนไฟล์ PHP มีการใช้งานจริงๆไม่มากนัก
  •     
  • ระหว่าง Apache และ NGINX มีประสิทธิภาพพอๆกันในการประมวลผล PHP เนื่องจากมันไม่ได้ประมวลผลเอง แต่ส่งไปประมวลผลด้วย PHP Interpreter ซึ่งก็เป็นตัวเดียวกันทั้งบน Server ที่เป็น Apache และ NGINX

PHP Framework ที่เป็น extension C ไม่ได้เร็วที่สุด แค่มันเร็วกว่าเท่านั้น
สังเกตุดูนะครับ ว่า มันยังห่างจากการเขียนแบบไม่ใช้ framework โขอยู่ และคชสารถูกออกแบบโดยใช้ช่องว่างเหล่านี้

ทำไม คชสารถึงเร็วได้
        
  • สิ่งที่ทำให้โค้ดเราช้าได้มีเพียงอย่างเดียวครับ คือ มีการประมวลผลมาก ยิ่งมีการประมวลผลมากเท่าไรโค้ดของเราก็ยิ่งช้าลง ดังนั้นเฟรมเวอร์คขนาดใหญ่จึงไม่ใช่เป้าหมายของคชสาร ซึ่งก่อนหน้า คชสารทำความเร็วได้ดีกว่าก็ด้วยเหตุนี้แหละ เร็วเพราะไม่ต้องทำอะไรมาก ถ้าสงสัยว่าคชสารประมวลผลอะไรบ้างไปดู http://www.kotchasan.com/docs/โครงสร้างของคชสาร.html ปัจจุบันคชสารทำงานได้ช้าลงอันเนื่องมาจากมีการ implement เข้ากับ PSR-7
  •     
  • ปัจจัยอีกข้อที่มีผลกับความเร็วของคชสาร คือ การ optimize โค้ด ผมทดสอบความเร็วของทุกฟังก์ชั่นที่คชสารเรียกใช้เพื่อให้มันสามารถทำความเร็วได้ดีที่สุด
  •     
  • การจัดโครงสร้างของคชสารต่างๆ ก็เพื่อให้มันมีประสิทธภาพสูงที่สุดเท่าที่จะสามารถทำได้ และยังคงเป็น Framework ที่สามารถใช้งานได้ง่ายๆ

ถ้าเป็น Application แล้วคชสารจะช้าลงหรือไม่
คำตอบคือ ไม่มีทางช้าลงครับ เพราะคชสารปฏิบัติตามมาตรฐาน PSR-4 ซึ่งหมายความว่าคลาสต่างๆจะไม่ถูกโหลดตราบเท่าที่ไม่มีการใช้งาน ดังนั้นมันจะไม่ช้าลงอย่างแน่นอนต่อให้มันมีเป็นร้อยคลาสอยู่ในแอพพลิเคชั่น
สังเกตุจากกราฟนะครับ ที่คชสาร มีการใช้งานไฟล์เพียง 17 ไฟล์ ถึงแม้ไฟล์ของคชสารจะมีรวมๆกันอยู่มากกว่านี้ก็ตาม

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

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

คชสารออกแบบโดยคนๆเดียวจริงหรือไม่
คชสารออกแบบโดยผมเองทั้งระบบ (ยกเว้นโค้ดที่เอามาจากที่อื่น เช่น PHPMailer, CKEditor, FPDF, Icon Font เป็นต้น ซึ่งผมจะเลือกใช้เฉพาะที่เป็น open source เท่านั้น) โดยการออกแบบจะยึดหลักมาตรฐาน PSR-1, PSR-2, PSR-3, PSR-4, PSR-6, PSR-7 แนวทางในการออกแบบผมใช้พื้นฐานที่มาจาก GCMS เป็นหลัก เนื่องจากผมพัฒนา GCMS มาเป็นเวลาหลายปีแล้วและมีผู้ใช้อยู่เป็นจำนวนมาก โดยมีความต้องการที่เป็นเป้าหมายหลักคือ
        
  • ติดตั้งง่าย รองรับ Host มากที่สุดและรองรับ PHP7 ด้วย (PHP5.2 ถูกตัดออกเนื่องจากมันไม่รองรับคลาสที่มี NameSpace)
  •     
  • ต้องใช้งานง่าย ข้อนี้ผมคงตอบเองไม่ได้ และคงต้องดูกันยาวๆ (ถ้ามองในมุมส่วนตัว มันง่ายแน่ๆ เพราะผมออกแบบเอง) ซึ่งข้อนี้เป็นปัญหาส่วนตัว เนื่องจากผมไม่เคยจัดทำคู่มือของ GCMS เลยตลอดเวลาที่ผมเผยแพร่ GCMS มา แต่ก็ยังมีคนเอาไปใช้งานได้
  •     
  • ต้องสามารถถอดออกหรือติดตั้งโมดูลได้ ซึ่งข้อจำกัดนี้เป็นข้อจำกัดที่ Framework ส่วนใหญ่ทำไม่ได้ (เท่าที่ผมทราบ)
  •     
  • ต้องใช้เดี่ยวๆได้ (น้อยที่สุดเช่น Hello World) เนื่องจากมันจะทำให้การนำคชสารไปใช้เป็น Service มีประสิทธิภาพสูง
  •     
  • ต้องมีคุณสมบัติเทียบเท่า GCMS เพื่อให้ผมไม่ต้องทำงานหลายทาง (ทั้งคชสารและ GCMS)