ホームページ >バックエンド開発 >PHPチュートリアル >PHP と Node.js、phpvsnode.js_PHP 教程
ネットワークは急速な発展の時代にあります。サーバーサイド開発者は、言語の選択に関して非常に混乱します。C、Java、Perl などの長い間主流の言語だけでなく、Ruby、Clojure、じゃ、行け。プロジェクトが順調に進んでいる限り、あなたの選択はそれほど重要ではないようです。
しかし、これらの新しい Web 開発者に正しい選択をさせるにはどうすればよいでしょうか?
PHP と NodeJ の 2 つの陣営の間で戦争を始めるつもりはありません。これら 2 つの言語の開発状況を比較します。
PHPRasmus Lerdorf は 1994 年に PHP を作成しました。これは、Web サーバー (Apache、Ngix) にインストールされたコンポーネントによって実行されます。
Node.jsRyan Dahl は 2009 年に Node.js を作成しました。これは、Google の V8 JavaScript 解釈エンジン (Chrome ブラウザでクライアント側の JavaScript コードを実行する役割を果たします) に基づいています。他の言語とは異なり、Node.js にはネットワークのリクエストと応答を処理するための関数ライブラリが組み込まれているため、別のサーバー (Apache、Ngix) やその他の依存関係は必要ありません。
また、私がどれだけ多くの言語を比較したとしても、私が自分たちの言語について言及しなかったことに文句を言う人は必ずどこかにいるでしょうから、問題ではありません。
SitePoint でのコンテスト
SitePoint Smackdowns は、「友人よ、自分にとって正しいものを選択する」という視点を採用しません。個人的な経験、要件、好みに基づいて推奨事項を作成します。私の言うことすべてに同意できないかもしれませんが、それは問題ではありません。重要なのは、あなたの意見が他の人がより情報に基づいた選択をするのに役立つということです。
評価方法
最も多くのラウンドに勝利した人が勝者となります。準備はできたか?戦いを始めましょう。 。 。 。 。 。
第1ラウンド:開始
リーリー
このコードは、PHP エンジンで解析できる任意のファイルに配置できます。通常は、.php 接尾辞が付いたファイルです。ブラウザに URL を入力するだけでファイルにジャンプします。これがすべてではないことは否定できません。このコードは、PHP がインストールされている Web サーバー上でのみ実行されます (PHP にはサーバーが組み込まれていますが、より堅牢なサーバーを使用する方が良いでしょう)。ほとんどのオペレーティング システムでは、Windows 上の IIS、Mac および Linux 上の Apache などのサーバー ソフトウェアが提供されていますが、起動と構成が必要です。通常は、XAMPP などの事前構築済みインストーラーまたは Vagrant などの仮想マシン イメージを使用します。より簡単な方法: ファイルを任意の Web ホストにアップロードします。
それに比べれば、Node.js のインストールは簡単です。インストーラーをダウンロードするか、パッケージ マネージャーを使用できます。 次に、hello.js で Web ページを作成しましょう:
リーリー
ブラウザで http://127.0.0.1:3000/ にアクセスする前に、ターミナルにnode hello.jsと入力してアプリケーションを起動する必要があります。上記の 5 行のコードで、驚くべきことに、クライアント側 JavaScript の経験が豊富な人でも理解するのが難しい小さな Web サーバーを作成しました。概念的に単純なため、PHP がこのラウンドで勝利します。 PHP 宣言について少しの知識がある人は、役立つものを開発できます。 PHP にはより多くのソフトウェア依存関係がありますが、PHP の概念は初心者にとってそれほど難しくありません。
JavaScript を理解することと、Node.js アプリケーションを開発することは別のことです。Node.js の開発方法は、ほとんどのサーバー側テクノロジとは異なります。まず、シャットダウン関数やコールバック関数など、いくつかの非常に複雑な概念を理解する必要があります。
公式ドキュメントやリソース(コース、フォーラム、スタックオーバーフロー)の助けがなければ、問題に直面するでしょう。 PHP はこのラウンドで簡単に勝ちました。彼女には大量のガイドと 20 年にわたる Q&A があります。あなたが何をしたいとしても、あなたの前に同じ問題に直面した人が必ずいます。
Node.js には優れたドキュメントがありますが、PHP よりも新しく、提供されるヘルプが少ないです。 JavaScript は PHP と同じくらい古くから市場に存在していますが、主なヘルプはブラウザー用に開発されており、基本的に役に立ちません。
宣言と構造は論理的でシンプルで使いやすいですか?
一部の言語やフレームワークとは異なり、PHP は特定の方法で書くことを制限しません。やりたいことは何でもできます。数行のプログラムから始めて、いくつかのメソッドを追加し、次にいくつかの単純な PHP4 モード オブジェクトを作成し、最後にエレガントなオブジェクト指向 MVC モードの PHP5+ アプリケーションを作成できます。コードは最初は混乱するかもしれませんが、うまく機能し、理解が深まるにつれてより良くなります。
PHP の構文はバージョン間でわずかに調整される場合がありますが、下位互換性は一般に非常に優れています。しかし、残念なことに、これは PHP がわかりにくいという問題にもつながります。たとえば、文字列内の文字数をカウントするにはどうすればよいでしょうか?カウントですか? str_len か strlen?あるいは、mb_strlen?PHP には何百もの関数があり、命名規則が完全に一貫していない可能性があります。ドキュメントを確認せずに、数行のコードを書いてみることができます。
JavaScript は比較的単純で、コアとなるステートメントは数十個しかありません。ただし、そのプロトタイプのオブジェクト モデルは親しみやすそうに見えて実際はそうではないため、この構文は開発者によってしばしば批判されます。また、さまざまな数学的エラー (0.1+0.2 != 0.3) や型変換の混乱 ('4' + 2 == '42' および '4' - 2 == 2) も多くの苦情を引き起こしましたが、これらの状況は非常に一般的です。世界ではそれが問題を引き起こすことはほとんどありませんが、ほとんどの言語にはこの言い訳があります。
PHP には利点がありますが、私は Node.js がこのラウンドに勝つと判断します。理由は以下の通りです
両方のテクノロジーに対応する優れたエディター、統合開発環境、デバッガー、バリデーター、その他のツールがいくつかあります。私はこれが同点だと思いますが、Node.js にわずかな優位性を与えるいくつかのツールを紹介します: NPM - パッケージ マネージャー。 NPM を使用すると、依存関係のインストールと管理、構成変数の設定、スクリプトの定義などを行うことができます。
PHP の Composer プロジェクトは NPM からインスピレーションを受けており、いくつかの点でより強力です。ただし、PHP はデフォルトでは提供されず、アクティブなライブラリが小さく、コミュニティへの影響も小さくなります。
NPM は、開発手法に革命をもたらした Grunt や Gulp などのビルド ツールの成長にも部分的に関与しています。 PHP 開発者は、node.js をインストールしたい、またはインストールする必要がある場合がありますが、これは後退ではありません。
そのテクノロジーはどこで利用、展開できるのでしょうか?どのようなプラットフォームとエコシステムがサポートされていますか? Web 開発者は、ビルド ツール、移行ツール、データベース変換スクリプトなど、Web ページを完全にターゲットにしていないアプリケーションを開発する必要があることがよくあります。
PHP にはデスクトップ アプリケーションやコマンド ライン ツールを開発する方法がありますが、それらは使用しません。 PHP は本質的にはサーバー側のテクノロジであり、その点では優れていますが、それを超えて拡張することはほとんどありません。
数年前、JavaScriptは非常に制限が厳しいと考えられており、いくつかのエッジテクノロジーがありましたが、その主戦場は依然としてブラウザでした。 Node.js はその感覚を変え、多くの JavaScript プロジェクトを生み出し、ブラウザー、サーバー、端末、デスクトップ、さらには組み込みシステムなど、あらゆる場所で JavaScript を使用できるようになり、JavaScript がユビキタスになりました。
データベースやドライバーと統合できない限り、開発技術は非常に限られています。 PHP はこの点で優れており、長年にわたって使用されており、その拡張機能により、主流の API やあまり普及していない API を使用してサーバーと直接通信することができます。
Node.js は追いつきつつありますが、古くて不人気なテクノロジーの成熟した統合コンポーネントを探すのは頭が痛いかもしれません。
素晴らしい新しいアプリケーションをオンライン Web サーバーにデプロイするのはどのくらい簡単ですか?これも PHP にとって大きな勝利です。ランダムな Web ホスティング会社に連絡すると、主に PHP のサポートが見つかり、場合によっては MySQL も無料でサポートされます。サンドボックス化の場合、PHP はより単純であると考えられており、危険な拡張機能は無効にすることができます。
Node.js は別の獣であり、サーバーサイド アプリケーションは永久に実行されます。物理/仮想/クラウド、またはカスタム サーバー環境が必要で、できれば root アクセスが必要ですが、一部のサーバー、特に共有サーバーにはアクセスできず、サーバー全体がダウンする危険があります。
Node.js のホスティングは簡単になりますが、PHP ファイルをアップロードするのに FTP ほど便利になることはないと思います。
PHP 很勤快,有很多项目跟选项可以使它跑得更快。即使那些对性能要求很严苛的 PHP 开发者也几乎不会担心速度问题, 但是 Node.js 性能通常更好一些。 当然,性能很大程度上决定于开发团队的经验以及是否上心, 但是 Node.js 还是有如下几条优势的:
更少的依赖
所有对 PHP 应用的请求都必须经过一个 WEB 服务器的路由,来启动 PHP 的解释器运行 PHP 代码。Node.js 不需要这些依赖, 而且你基本一定会使用一个带服务器的框架,像 Express,他很轻量,很好的扮演你应用的一部分。
更小更快的解释器
Node.js 的解释器比 PHP 的更小更灵活。 他并不受旧版语言遗留兼容问题的拖累,而且 Google 在 V8 引擎性能改善上出了大力。
应用永久在线
PHP 遵循标准客户端-服务端模型。 每个页面请求都会初始化应用; 你读取配置参数、连接数据库、读取信息、渲染 HTML。Node.js 应用持久运行,只需要启动一次。例如,你可以创建一个单独数据连接对象,然后所求请求一起复用。公认的,PHP 也有一些途径来实现,比如使用 Memcached ,但是这已经不是语言的标准特性了。
PHP 跟其他多数服务端语言采用阻塞执行的模型。 当你执行一个命令,比如从数据库取数据,那么必须等这个指令执行完成后,才会执行下面的内容。 Node.js 通常不会等的。 取而代之的是, 你需要提供一个回调函数,这个函数当指令执行完后会被调用一次。例如:
// fetch records from a NoSQL database DB.collection('test').find({}).toArray(process); console.log('finished'); // process database information function process(err, recs) { if (!err) { console.log(recs.length + ' records returned'); } }
这个例子中, 控制台会先输出‘finished’,然后输出‘N records returned’,因为 process 函数是所有数据返回的时候才被调用的。 换句话说,当解释器在其它进程处理的时候可以干些别的事情。
注意情况比较复杂,还有几个警告:
Node.js/JavaScript 只能在单线程上运行,但是大多数 web 服务器都是多线程,而且并发的处理请求。
一个用户长时间运行的 JavaScript 处理会阻止其它用户的代码执行,除非拆分任务或者使用Web Workers。
基准测试是主观的和有缺陷的;可以找到一些例子 Node.js 比较好,而一些相对的例子 PHP 比较好 。程序员只是在尝试证明他们的信仰!
书写异步的事件驱动的代码非常复杂,非常有挑战性。
我只能从我的经验来讲: 我的 Node.js 应用要明显比 PHP 的同等应用要快。你的可能不是,但是不试是永远不会知道的。
这会超出”常见网页开发挑战“这样的目标,但是这很重要。如果你恐惧每天写代码,那你无所谓哪门语言更好。
很难为此做出比较但是一些 PHP 开发者对 PHP 这门语言很有激情。你最近一次读到让你走心的 PHP 文章或幻灯片是什么时候?也许已无需再说?可能是更低的曝光度?或者我没找对地方?PHP7 有一些新的功能,但是该技术已经原地踏步很多年了,虽说如此,很少有开发人员对PHP发牢骚。
JavaScript 分离了社区,有人爱也有人恨,一些程序员在中间犹豫不决,经管如此,对 Node.js 的反馈大多积极,她正处于风口浪尖,一部分原因是因为她很新,赞誉不一定持续。目前,Node.js 赢得本轮。
您选择采用哪种服务端语言并不重要;即使她不再被更新也会照样继续工作(yay ColdFusion!)尽管使用量上趋于稳定但是很多人依然使用 PHP,我打包票她还能再坚挺二十年。
Node.js 崛起得很迅速,她提供了一种现代的开发方式,使用和客户端开发一样的语法同时支持 HTML5 变革式的特征,比如网络套接字和服务端发送事件。尽管大家对该语言的分叉函数有些争议,但是Node.js的使用量还是呈指数级增长。
Node.js 势必会蚕食 PHP 的市场份额,但是我不认为她能完全取而代之。两种技术都有光辉的未来。我宣布本轮平手。
最终分数:Node.js 赢得5轮,PHP 赢得4轮,一轮平手。原以为会倒向其中一方,结果比我预想的更中庸一些。
Node.js には一定の学習曲線があり、初心者には理想的ではありませんが、この決闘では彼女が勝利しました。また、あなたがこの言語を好むしっかりとした JavaScript プログラマーであれば、Node.js はあなたを失望させることはありません。より最新であり、独自の Web 開発エクスペリエンスを提供するため、PHP を見逃すことはありません。
しかし、PHP を軽視しないでください。PHP は依然として不可欠であり、Node.js の方が速い、新しい、またはトレンドであるという理由だけで Node.js のトレンドに従うべきではありません。 PHP は習得が簡単でありながら、プロのプログラミング スキルをサポートしており、ヘルプがどこにでもあり、開発が簡単です。熱心な Node.js 開発者であっても、単純な Web サイトやアプリケーションには PHP の使用を検討する必要があります。
私のアドバイスは、オプションを評価し、ニーズに基づいて言語を選択することです。これは、この記事のような「比較」記事よりもはるかに信頼性があります。
元のアドレス: http://www.sitepoint.com/sitepoint-smackdown-php-vs-node-js/
。