PHP 8.0 VS Node.js

หลายๆคน คงสงสัยว่าสรุปแล้ว PHP 8.0 มันแรงสมคำร่ำลือหรือไม่ ซึ่งผมเองก็สงสัยเหมือนกัน ผมเลยลองทำการทดสอบเบื้องต้นมาให้พิจารณากัน ดูแล้วก็ไม่ต้องเอาไปบุลลี่กันละครับ

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

โค้ด index.php ที่ผมใช้ทดสอบ
<?php
echo 'Hello World!';

โค้ด index.js ที่ผมใช้ในการรันด้วย Node
#!/usr/bin/env nodejs

var http = require('http');

http.createServer(function(request, response) {
  response.writeHead(200, { 'Content-Type': 'text/plain' });
  response.end('Hello World!');
}).listen(8080);
console.log('Server running at http://127.0.0.1:8080/');

ผลการทดสอบด้วย apache bench ตามรูปเลย
ผลการทดสอบนี้บอกเราว่า PHP Server นั้นเร็วกว่า Node Server อย่างเห็นได้ชัด เนื่องจากในกรณีนี้ Node ไม่ได้ใช้ความสามารถด้าน Asynchronous เลย (ทีแรกผมนึกว่า Node จะประมวลผลแบบ Asynchronous ในทุกกรณีเสียอีก เพราะถ้ามันประมวลผลได้พร้อมๆกันหลาย Request มันควรจะเร็วกว่านี้)

แต่ช้าก่อน อย่าเพิ่งดีใจไป เนื่องจากการทดสอบด้านบนเป็นเพียงด้านเดียวเท่านั้น เรามาลองเพิ่มเติมให้ Node สามารถแสดงอิทธิฤทธิ์ได้ด้วยการจัดการประมวลผลเพิ่ม

การทดสอบที่สอง
โค้ดที่ผมเพิ่มเติมมาจะเป็นการเรียงลำดับแบบ bubble sort เพื่อให้มีการประมวลผลเพิ่มขึ้น ทั้งนี้หากมีการเปลี่ยนอัลกอริทึมที่นำมาทดสอบ ผลที่ได้อาจแตกต่างจากนี้นะครับ (อัลกอริทึมแต่ละแบบอาจมีประสิทธิภาพแตกต่างกันในแต่ละภาษา)
index.php
<?php
$array = array(3, 4, 1, 3, 5, 1, 92, 2, 4124, 424, 52, 12);

for ($i = 0; $i < count($array); $i++) {
    for ($y = 0; $y < count($array) - 1; $y++) {
        if ($array[$y + 1] < $array[$y]) {
            $t = $array[$y];
            $array[$y] = $array[$y + 1];
            $array[$y + 1] = $t;
        }
    }
}

echo 'Hello World!';

index.js
#!/usr/bin/env nodejs

var http = require('http');

var array = [3, 4, 1, 3, 5, 1, 92, 2, 4124, 424, 52, 12];

for (var i = 0; i < array.length; i++) {
  for (var y = 0; y < array.length - 1; y++) {
    if (array[y + 1] < array[y]) {
      var t = array[y];
      array[y] = array[y + 1];
      array[y + 1] = t;
    }
  }
}

http.createServer(function(request, response) {
  response.writeHead(200, { 'Content-Type': 'text/plain' });
  response.end('Hello World!');
}).listen(8080);
console.log('Server running at http://127.0.0.1:8080/');

ผลการเปรียบเทียบระหว่าง PHP 8.0 ที่ใช้ JIT และ Node.js ออกมาดังรูป (สังเกตุนะครับว่ารอบนี้มีการเปิดใช้งาน JIT ด้วย)
จะเห็นว่า เมื่อมีการประมวลผลเพิ่มเติม Node.js ทำได้ดีกว่า PHP 8.0 + JIT อยู่นิดหน่อย ซึ่งหมายความว่าในการใช้งานจริง Node น่าจะเร็วกว่า PHP อยู่ไม่มากก็น้อย
สรุป
ผมไม่ได้มองว่า PHP แย่อย่างที่บางคนคิด แล้วก็ไม่ได้มองว่า Node เด่นจนสามารถข่มภาษาอื่นๆได้ ภาษา PHP จัดว่าเป็นภาษาที่มีประวัติศาตร์มายาวนานภาษาหนึ่งซึ่งยังมีฐานผู้ใช้อยู่เป็นจำนวนมาก และ ตัวภาษาเองก็ยังได้รับการพัฒนาอยู่เรื่อยๆ จนปัจจุบันก็มาถึงเวอร์ชั่น 8 แล้ว อนาคตของ PHP เองก็ดูท่าว่าจะยังอีกนาน รวมถึงภาษาใหม่ๆ ก็ยังมีโอกาสเกิดได้อีกเยอะ ถ้าผมเองเป็นทีมพัฒนาผมคงไม่สนใจที่จะไปตามลบภาพเก่าๆออกจากความทรงจำของใครบางคนหรอก สู้เอาเวลาในอนาคตไปปรับปรุงตัวภาษาให้มันดีขึ้นจะดีกว่า เพราะการเขียนโปรแกรม ปัญหาของโปรแกรม 90% มันเกิดจากคน ไม่ได้เกิดจากตัวภาษา ถ้าจะแก้ต้องแก้ที่คน (แต่มันก็เสียเวลา และไม่จำเป็นเท่าไร)
ผู้เขียน goragod โพสต์เมื่อ 30 พ.ย. 2563 เปิดดู 8,860 ป้ายกำกับ PHP8benchmark
^