Kaptain Kitty
انتشار :۱۳ بهمن ۱۳۹۳
بازدید :1417 بار

PHP هنوز جایگاه خود را از دست نداده است اما با ظهور Node.js توجه کمتری به PHP می شود.

وقتی که در سال ۲۰۰۰ اینترنت همه گیر شد، همه ی برنامه نویسان با PHP کار می کردند و این زبان رو به تحول و بهتر شدن بود. زیرا:

  • Php زبان تفسیری بود و مانند C++ یا جاوا نیاز به کامپایل کردن کد منبع نداشت.
  • می توان از طریق ترکیب php با فایل های تمپلیت HTML و با استفاده از تگ های مارک آپ <?php … ?> از این زبان به طور مستقیم در HTML استفاده کرد
  • ماهیت کاربردی دارد و یادگیری آن بسیار ساده تر از برنامه نویسی شیء گرا می باشد.

با گذشت سال ها، PHP و اپلیکیشن های آن تبدیل به یک فن آوری وحشتناک شدند که آسیب پذیر بودن در برابر تهدیدات امنیتی (مانند injection های SQL)، فقدان ثبت پکیج های مرکزی (که با ظهور Compser این مشکل حل شد)، API های ناسازگار و عملکرد ضعیف از ایرادات این زبان بود. جایگزین های بهتری برای PHP وجود دارد مانند Ruby on Rails و Django که البته هیچ کدام آنها مثل Node.js قابل دسترس نیستند.

برای آن دسته از افرادی که با پلت فرم Node.js آشنایی ندارند یا در مورد آن شنیده اند اما فرصت کار با آن را نداشته اند، باید گفت: عملکرد Node.js مشابه با ترکیب PHP + Apache یا ASP + IIS stack می باشد.

این روز ها Node.js حرکتی رو به رشد را آغاز کرده است. این پلتفرم از جاوا اسکریپت استفاده می کند و کاملا کاربردی می باشد و مکانیسم non-blocking I/O در این پلتفرم امکان عملکرد فوق العاده بهتری را می دهد. پلتفرم Node.js دارای راه حل Package Manager و ECMAScript (جاوا اسکریپت) میباشد.

به دلیل این که Node.js یک تکنولوژی سطح پایین می باشد، قابل مقایسه ی مستقیم با فریم ورک های پیچیده مانند Struts، Rails یا Django نیست.

بنابراین بسیاری از افراد، خواه برنامه نویس خواه کارآفرین، اغلب با این تصمیم رو به رو می شوند که “از کدام تکنولوژی باید استفاده کنند”. در این مقاله به مقایسه ی PHP و Node.js می پردازیم و آنها را از زوایای مختلف مورد ارزیابی قرار می دهیم که شامل موارد زیر می باشد:

  • Syntax (گرامر)
  • Context Switch
  • ماژول ها
  • اکوسیستم
  • فریم ورک ها
  • اپلیکیشن های Real-time
  • اپلیکیشن های دیتابیس
  • اپلیکیشن های خدماتی Third-party (خارجی)
  • وب سرور ها
  • هاستینگ
  • عملکرد

Syntax

هر دو پلتفرم از طریق  php  -i  $ و  node $ به رابط خط فرمان دسترسی دارند. تکه کد زیر پیغام “Hello World” را در PHP نمایش می دهد:

[codesyntax lang=”php”]

echo 'Hello World';

[/codesyntax]

کد زیر نیز همین نتیجه را برای Node.js در پی خواهد داشت:

[codesyntax lang=”php”]

console.log('Hello World');

[/codesyntax]

نکته: در جاوا اسکریپت استفاده از سمیکالن (;) اختیاری است مگر میان حلقه ها و قبل از عبارات (IIFE).

اسکریپت تابع sleep در php به صورت زیر است:

 

[codesyntax lang=”php”]

echo "a"."\n";

sleep(2);

echo "b"."\n";

echo "c"."\n";

[/codesyntax]

نتیجه ی کد بالا به این شکل خواهد بود:

[codesyntax lang=”php”]

A

[/codesyntax]

و بعد از یک تاخیر دو ثانیه ای، نتیجه ی زیر حاصل خواهد شد:

 

[codesyntax lang=”php”]

b

c

[/codesyntax]

 

اگر بخواهیم این کد را در Node.js بازنویسی کنیم، به این صورت خواهد بود:

 

[codesyntax lang=”php”]

console.log('a')

setTimeout(function() {

  console.log('b')

 },۲۰۰۰)

console.log('c')

[/codesyntax]

این کد نتیجه ی زیر را نشان خواهد داد:

 

[codesyntax lang=”php”]

a

c

[/codesyntax]

 

و بعد از یک تاخیر دو ثانیه ای، این نتیجه پدیدار خواهد شد:

[codesyntax lang=”php”]

B

[/codesyntax]

نکته: در جاوا اسکریپت، () console.log به صورت خودکار علامت انتهای خط را اضافه می کند.

حلقه ی loop در php به این صورت خواهد بود:

 

[codesyntax lang=”php”]

for ($i = 1; $i <= 10; $i++) {

  echo $i;

}

[/codesyntax]

 

این کد ها در Node.js تا حدودی مشابه است:

 

[codesyntax lang=”php”]

for (var i = 0; i <= 10; i++) {

  console.log(i);

}

[/codesyntax]

 

برای ایجاد یک آرایه در php کد زیر را می نویسیم:

 

[codesyntax lang=”php”]

$users = array(

  array('name' => 'John', 'id' => 3940),

  array('name' => 'Peter', 'id' => 8904)

);

[/codesyntax]

 

برای ایجاد یک آرایه در Node.js کد زیر را می نویسم:

 

[codesyntax lang=”php”]

var users = [

{ name: 'John', id: 3940 },

{ name: 'Peter', id: 8904 }

]

[/codesyntax]

 

برای تکرار یک آرایه در php از کد زیر استفاده می کنیم:

 

[codesyntax lang=”php”]

for($i = 0; $i < count($users); ++$i) {

  $users[$i]['id'] = mt_rand(000000, 999999);

}

[/codesyntax]

 

برای تکرار یک آرایه در Node.js از کد زیر استفاده می کنیم:

 

[codesyntax lang=”php”]

for (var i; i < arr.length; i++) {

    users[i] = Math.floor(Math.random()*1000000);

}

[/codesyntax]

 

در حالت تابعی کد به صورت زیر خواهد بود:

 

[codesyntax lang=”php”]

users.forEach(function(user, i){

  users[i] = Math.floor(Math.random()*1000000);

})

[/codesyntax]

 

برای اعلام یک تابع در php از کد زیر استفاده می کنیم:

 

[codesyntax lang=”php”]

function hello($name) {

  echo "Hi ".$name;

}

hello("Peter"); //outputs Hi Peter

[/codesyntax]

 

برای اعلام یک تابع در Node.js از کد زیر استفاده می کنیم:

 

[codesyntax lang=”php”]

function hello(name) {

  console.log('Hi' + name);

}

hello('Peter'); //outputs Hi Peter

[/codesyntax]

 

برای اعلام یک شیء جدید در php از کد زیر استفاده می کنیم:

 

[codesyntax lang=”php”]

class foo {

    function do_foo()  {

        echo "Doing foo.";

    }

}

 

$bar = new foo;

$bar->do_foo();

[/codesyntax]

 

برای اعلام یک شیء جدید در Node.js از کد زیر استفاده می کنیم:

 

[codesyntax lang=”php”]

var foo = function () {

  return {

    do_foo: function () {console.log('Doing foo');}

  };

};

 

var bar = foo();

bar.do_foo();

[/codesyntax]

 

نکته: هیچ کلاسی در Node.js/JavaScript وجود ندارد زیرا object ها به صورت مستقیم از object های دیگر ارث بری می کنند (ارث بری وابسته به نمونه اصلی). الگوهای نمونه برداری مانند الگوهای شبه کلاسی (pseudo-classical)، تابعی (بالا) و کلاسی نیز وجود دارد.

کد مربوط به دیتابیس با کتابخانه ی ارتباطی PDO دیتابیس در php به این صورت است:

 

[codesyntax lang=”php”]

$pdo = new PDO('sqlite:users.db');

$stmt = $pdo->prepare('SELECT name FROM users WHERE id = :id');

$stmt->bindParam(':id', $_GET['id'], PDO::PARAM_INT); //<-- Automatically sanitized by PDO

$stmt->execute();

[/codesyntax]

 

همین اسکریپت با کتابخانه ی Mongoskin MongoDB در پلتفرم Node.js به این صورت خواهد بود:

 

[codesyntax lang=”php”]

//assuming we use Connect/Express middleware for req.query

var db = require('mongoskin').db('localhost:27017/db');

db.collection('users').find({_id: req.query.id}).toArray(function(err, results) {

    if (err) throw err;

    console.log(results);

});

[/codesyntax]

 

ادامه ی این مقاله را در آدرس زیر پیگیری نمایید:

مقایسه ی زبان های برنامه نویسی PHP و Node.js- قسمت دوم

برچسب‌ها, , , , , , , , ,

مطالب مرتبط

اشتباه کردن در مسیر فریلنسر شدن بخشی از منحنی یادگیری است. هیچ‌کس یک شبه فریلنسر نمی‌شود و دستۀ جدیدی از مشتریان پول‌ساز را به یکباره نمی‌یابد و باز هیچ‌کس ۱۰۰۰۰ دلار در یک هفته به چنگ نمی‌آورد تا بقیۀ ماه را به خوشگذرانی در ساحل رویایی با شن‌های سفید بگذراند. زمانی که من تازه کارم […]

بیانه لینکدین در روز افتتاح لینکدین لرنینگ: “امروز خوشحالیم تا آغاز فعالیت لینکدین لرنینگ را به عنوان یک پلتفرم یادگیری آنلاین اعلام کنیم  که افراد و سازمان ها را قادر می سازد تا به آمال و اهداف خود دست یابند. هدف ما کمک به افراد برای کشف  و توسعه  مهارت های مورد نیاز آنها ازطریق  یادگیری شخصی […]

نسخه‌ی ۳٫۱۲ تلگرام ساعاتی پیش منتشر شد و در این نسخه نیز همانند ورژن‌های قبلی امکانات جذاب و بسیار کاربردی جدیدی به این برنامه‌ی محبوب اضافه شد. سرنجام بعد از مدتی انتظار نسخه‌ی ۳.۱۲ تلگرام منتشر شد و امکاناتی همچون ساخت تصاویر گیف، ویرایشگر جدید عکس‌ها و امکان اضافه کردن ماسک و استیکر و متن […]

آی‌فون ۷ و ۷ پلاس اپل هفته جاری با چندین امکان جدید ارائه شد. در این مطلب نگاهی می‌اندازیم به مهم‌ترین ویژگی‌های نسل جدید آی‌فون‌ها که در آنها دیگر خبری از جک هدفون نیست؛‌ آغاز عصر فراگیری هدفون‌های بی‌سیم، به حکم اپل. کمپانی اپل به رسم هر ساله سپتامبر امسال هم در مراسم ویژه‌ای طیفی […]

نظراتتان را برایمان بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

مطالب ما تو این شبکه های اجتماعی هم پخش میشه