>  기사  >  백엔드 개발  >  PHP와 Nodejs 간의 10가지 비교 과제

PHP와 Nodejs 간의 10가지 비교 과제

WBOY
WBOY원래의
2016-08-08 09:19:021362검색

최근 SitePoint PHP와 Node.js Smackdown 기사에서 Craig Buckler는 두 언어가 전체적으로 어느 언어가 더 나은지 결정하기 위해 일련의 10가지 과제를 어떻게 해결했는지 비교했습니다.

Craig는 책에서 이러한 비교가 항상 다소 모순적이라고 말합니다. 재미있는 후속 조치로 Bruno Åkvorc(SitePoint의 PHP 개발자)와 James Hibbard(SitePoint의 JavaScript 개발자)에게 각 라운드에 대한 의견을 요청했습니다.

자세한 견해는 다음과 같습니다...

PHP 和 Node.js 的角摔

1라운드: 시작

1라운드 도전은 얼마나 잘할 수 있는지 확인하는 것입니다. 각 언어를 사용하여 "Hello World" 페이지를 빠르게 구축할 수 있습니다. 여기에는 서버 환경을 설정하는 데 소요된 시간이 포함됩니다.

Craig는 PHP가 "개념적으로 더 단순하고" "새로운 개발자에게 덜 위협적"인 언어가 부분적으로 이번 라운드에서 승리했다고 평가했습니다.

Bruno:

PHP가 "시작" 라운드에서 승리한 이유는 더 많은 호스트가 해당 언어를 지원하므로 시작하기가 매우 쉽기 때문입니다. 추가 작업 없이 바로 사용할 수 있습니다. 더 많은 호스트가 Node 명령줄 사용을 무시하고 바로 파일 업로드와 제어판의 간단한 "앱 다시 로드" 키로 이동했다면 둘 다 동일할 것입니다. 그러나 화면에 내용을 표시하는 실제 구문 측면에서는 PHP가 더 간단합니다. 특히 프로그래밍 경험이 없는 사람들에게는 더욱 그렇습니다.

제임스:

로컬 컴퓨터에서 개발할 때 둘 사이에 큰 차이는 없습니다. 브라우저에서 PHP 스크립트를 실행하려면 일부 서버 소프트웨어를 설치해야 합니다. Node 스크립트를 실행하려면 Node를 설치해야 하며, 가급적이면 Express와 같은 웹 프레임워크를 설치해야 합니다. 그러나 Craig가 말했듯이 PHP는 "개념적으로 더 간단합니다." 진입장벽이 더 높습니다. 이에 대해서는 논쟁의 여지가 없습니다.

2차: 도움말 및 지원

2차에서는 두 언어 모두에서 도움과 지원을 받는 것이 얼마나 쉬운지 고려할 것입니다. PHP가 이번 라운드에서 승리한 이유는 더 오랜 시간이 걸렸기 때문입니다.

브루노:

이건 조용히 하세요.

제임스:

이 말에 동의합니다. Node는 새로운 기술이므로 현재로서는 도움이 덜 될 것입니다. 하지만 Node가 점점 더 성숙해지면 이 측면은 더 이상 문제가 되지 않을 것입니다.

3차: 문법

3차에서는 두 언어의 문법 이해의 어려움을 비교합니다. Craig는 Node가 이번 라운드에서 승리했다고 결정했습니다.

브루노:

저는 이 관점에 크게 동의하지 않습니다. 실제로 PHP 구문에는 몇 가지 문제가 있으며 그 중 많은 부분이 수정되었으며 새 버전에서는 더 많은 부분이 제거될 예정입니다. 한편, JS에는 "this"라는 문제도 있습니다~

글머리 기호 3에 관해서(개발할 때 js를 사용하면 클라이언트 측 개발과 서버 측 개발 간에 전환할 필요가 없습니다) , 저는 이 개념에 동의하지 않습니다. 서버 환경과 클라이언트 개발 환경은 완전히 단절되어 있고 여전히 두뇌에서의 전환이 필요합니다. 브라우저에서 사용할 수 없는 새로운 구문이 항상 존재하며 그 반대의 경우도 마찬가지이므로 어떤 면에서는 언어 전환이기도 합니다.

4번 항목 (JS를 이해하면 더 사용해보고 싶게 됩니다.) 어느 정도 동의합니다. 저는 수년 동안 직장에서 JS와 PHP를 사용해왔고 JS를 훨씬 더 오랫동안 사용해왔지만 별로 좋아하지 않습니다. 순전히 개인적인 취향이긴 하지만요.

제임스:

저는 JavaScript를 좋아합니다. 나는 그것이 특이한 점을 가지고 있다는 것을 알고 있으며, 어떤 이유에서는 ECMAScript 2015가 상황을 뒤흔들고 언어에 몇 가지 흥미로운 새로운 기능을 가져올 것이라는 것을 알고 있습니다. JavaScript는 강력하고 유연하며 다양한 프로그래밍 스타일을 수용할 수 있습니다. 저는 PHP가 아닌 JavaScript를 사용하는 것을 좋아합니다. Node(Node.js)도 그 중 하나입니다.

4라운드: 개발 도구

4라운드: 이 두 기술이 사용하는 개발 도구를 고려하면 npm 개발 도구가 있기 때문에 Node가 조금 더 좋습니다.

Bruno:

개발자들이 처음에는 npm에서 영감을 받았지만 이제는 npm보다 사용하기 더 편리한 도약과 경계가 있으며 컴퓨터에 동일한 라이브러리가 모두 설치되어 있는 경우 이 버전에서는 도약과 한계로 인해 시스템이 충돌하지 않습니다. 그리고 npm과 비교하면 도약과 경계를 통해 디자이너는 재귀적 사고를 사용할 수 있으며 재귀적 사고는 개발자가 패키지 관리자를 구축할 준비가 되었을 때 가장 먼저 고려하는 사항일 만큼 중요합니다.

npm에도 치명적인 결함이 있습니다. 저는 이를 "개발자 협업 친화성"이라고 부릅니다. npm의 경우 개발자 자신만이 이를 이해할 수 있습니다. 마지막으로, npm은 Vagrant와 잘 작동하지 않습니다. 이는 npm이 사용자의 요구에 주의를 기울이지 않는다는 점은 말할 것도 없고 스스로 작업을 시작하는 것을 직접적으로 방해합니다. npm에는 수년 동안 존재해 온 버그가 있는데, 이로 인해 기본적으로 Windows에서 소프트웨어를 사용할 수 없게 되는데 이는 작은 문제가 아닙니다. 물론 PHP에는 어리석은 버그가 많이 있지만 이러한 버그는 시스템에 문제를 일으키지 않습니다.

PHP에 컴파일러가 제공되지 않는 것은 사실이지만, 그래야 한다고는 생각하지 않습니다. 이러한 편리함은 패키지 관리자나 독립 실행형 응용 프로그램을 통해 달성되어서는 안 됩니다. 언젠가 누군가가 좋은 Node용 패키지 관리자를 개발한다면 이를 기존 컴파일러로 교체하는 것은 극히 어려울 것입니다. 비교적 독립적으로 만들면 사람들이 쉽게 전환할 수 있습니다. 게다가 설치하려면 터미널에 코드 한 줄을 입력하거나 설치 프로그램을 다운로드하기만 하면 됩니다.
컴파일러가 거의 영향을 미치지 않는다는 책의 진술은 명백한 실수입니다. 컴파일러는 PHP가 개발된 이후 모든 새로운 PHP 개발자에게 영향을 미쳤으며 최고의 개발자 중 일부는 이를 기존 파이프라인에 추가해야 했습니다. 컴파일러가 존재하기 전에 PHP 사용자가 많았다고 해서 컴파일러의 유용성이 떨어지는 것은 아닙니다. 실제로 도입 이후 큰 영향을 미쳤습니다. "커뮤니티에 거의 영향을 미치지 않을 것"이라는 일부 사람들의 주장은 실제로 근거가 전혀 없습니다.
이제 대부분의 PHP 개발자가 Node 설치를 원한다는 사실에 대해서는 이의를 제기할 수 없습니다. 이는 사실입니다. 안타깝게도 처음에는 Node를 기반으로 좋은 도구가 많이 개발되었지만 Node-free 개발 환경처럼 BowerPHP를 개발하는 데에도 사용할 수 있기를 바랍니다.

James:

누군가 Node.js에 합류하게 되어 기쁘네요.

저는 npm을 좋아합니다. 설치와 사용이 간편하며 거의 모든 요구 사항에 사용할 수 있는 수천 개의 패키지가 있습니다. 나는 또한 npm이 전역 및 로컬 패키지를 선택할 수 있다는 사실을 좋아합니다(표준에서 Ruby 버전과 함께 패키지를 설치해야 하는 Ruby와 같은 일부 언어와 비교하여). 도구도 훌륭합니다. Bower 및 Grunt와 같은 일부 도구는 내 작업 흐름에 영구적인 위치를 차지하며 생산성을 기하급수적으로 향상시켰습니다.
npm이 버전 3의 베타 버전을 개발했다는 ​​점도 언급할 가치가 있습니다. 중첩된 node_modules 메소드 오류 등과 같이 Bruno가 언급한 많은 문제를 해결합니다.

다음은 전체 smackdown에서 인용된 내용입니다.

PHP 개발자는 특정 경우에 Node.js를 설치하기를 원하거나 필요로 할 수 있습니다. 그 반대는 사실이 아닙니다.

5라운드: 환경

5라운드는 기술의 가용성과 배포, 그리고 이를 지원하는 플랫폼과 생태계에 관한 것입니다. Craig는 이에 대해 명확하지 않지만 Node.js를 선호하는 것 같습니다.

Bruno:

Craig는 웹에서 PHP와 Node의 장점(일반적인 웹 개발 문제)을 비교한 다음 JS가 모든 곳에서 사용된다고 말했습니다. 첫째, JS 자체가 아닌 Node.js를 비교하고, 둘째, 두 언어가 모두 실행될 수 있는 환경을 비교합니다. 물고기는 너무 멍청해서 나무에 오르지 못하기 때문에 원숭이가 물고기보다 강하지만, 원숭이와 물고기 모두 헤엄을 칠 수 있습니다. 그럼 얼마나 잘하는지 비교해보자.

웹 개발 환경에서는 PHP가 승리합니다. 다음은 PHP 기반 데스크톱 프로그램 도구입니다. 예, 아마도 사용하지 않을 수도 있지만 이러한 PHP 기반 명령줄 프로그램은 확실히 사용하게 될 것입니다.

제임스:

Craig와 저는 다시 같은 생각을 하고 있습니다. Node.js를 인기 있게 만든 일부 기능(속도, 확장성, JSON과의 긴밀한 연결, 낮은 리소스 사용 공간) 덕분에 Node.js는 강력한 IoT 장치와 같은 다양한 유형의 애플리케이션에 적합합니다. 로봇을 좋아하지 않는 사람이 누가 있을까요?

Node는 HTML 및 JavaScript로 기본 앱을 작성할 수 있는 NW.js(Chromium 및 Node.js 기반 애플리케이션)와 같은 프로젝트를 지원합니다. 정말 신난다!

6라운드: 통합

6라운드에서는 데이터베이스와 드라이버의 통합이 주로 오래되었기 때문에 승리합니다.

Bruno:

통합 측면에서 보면 PHP는 나이가 많고 옵션이 더 많다는 장점이 있지만 다음과 같은 많은 오래된 기술을 처리해야 한다는 뜻이기도 합니다. mysql 확장——우리 PHP7로 업그레이드하면 제거할 수 있지만 수년 동안 사용할 수 없었습니다.

James:

모호해 보이지만 이 말에 확실히 동의합니다. "구식이고 대중적인 기술"이라는 예가 마음에 듭니다. 이는 또한 JSON에 대한 기본 지원이라는 Node의 큰 장점을 강조합니다. JSON은 아마도 웹에서 가장 중요한 데이터 전송 형식이며 최신 NoSQL 데이터베이스의 공통 구조입니다. JavaScript 프로그램에서 JSON을 사용하는 것은 매우 쉽습니다. 즉, Node로 작업할 때 형식 변환 없이 데이터를 매우 간결하게 전송할 수 있습니다. 하나의 구문(JSON 형식)만 사용하여 브라우저, 서버 및 데이터베이스 간에 전달할 수 있습니다.

7라운드: 호스팅 및 배포

7라운드에서는 새 애플리케이션을 웹 서버에 배포하는 것이 얼마나 쉬운지 살펴보겠습니다. Craig의 의견으로는 이 점에서 PHP가 확실한 승자입니다.

브루노:

브루노는 다시 한번 침묵을 지켰습니다.

제임스:

이것은 노드가 작업해야 하는 영역입니다. 웹 호스팅을 제공하는 모든 회사는 PHP와 MySQL을 제공합니다. 출력을 보려면 ".php" 확장자를 가진 파일을 생성하고 사이에 유효한 코드를 작성한 후 업로드하고 브라우저로 액세스하면 됩니다. 그러나 동일한 접근 방식은 Node.js에서는 작동하지 않습니다. 물론 노드 호스팅에는 다양한 옵션이 있지만 더 많은 설정과 명령줄 액세스가 필요하므로 초보자에게는 불편할 수 있습니다. 이번 라운드에서 PHP가 승리했다는 것은 의심의 여지가 없습니다.

8라운드: 성능

8라운드는 속도에 중점을 둡니다. 이것은 종종 경험과 개발팀의 헌신에 달려 있지만 Craig는 Node가 일부 영역에서 이점을 가지고 있다고 지적했습니다.

브루노:

실수는 많습니다. 첫째, 이 문서에서는 개발자 경험과 애플리케이션 유형이 성능에 미치는 영향을 제외하고 성능에 대해 자세히 설명합니다. 문맥을 벗어나 성능에 대해 이야기하는 것이 얼마나 어리석은 일인지 이 기사가 여전히 이해하지 못한다면 내 관점을 공유해 보겠습니다.

  • PHP에는 다중 스레드 서버가 내장되어 있습니다. 이를 통해 외부 서버를 완전히 우회할 수 있지만 아직 권장되지는 않습니다. 또한, PHP를 시작하고 요청을 전달하는 전체 프로세스를 무시할 수 있을 정도로 빠르게 만드는 일부 초고속 서버(예: Nginx)가 있습니다.
  • PHP의 기본 비동기(비차단 I/O) 지원은 PHP7에 도입될 예정이며 ReactPHP는 몇 년 전에 비슷한 패턴을 구현했기 때문에 이것도 의미가 없습니다.
  • PHP 단일 요청 라이프 사이클 모드가 가장 큰 부담입니다. 실제로 순전히 속도만을 추구한다면 Memcached 및 Craig가 말한 유사한 방법뿐만 아니라 Ajax와 유사한 방법을 통해서도 이 문제를 쉽게 우회할 수 있습니다. 그런데 서버 측 JS 애플리케이션도 기본적으로 단일 요청입니다. 또한 이 단일 요청 수명 주기는 각 요청에 대해 애플리케이션을 다시 빌드하여 많은 메모리 문제를 방지하고, 가비지 메모리를 지우고, 슬림하고 깔끔하게 유지하는 이점도 있습니다. 안정적이고 오래 실행되며 메모리 누수 없는 Javascript 애플리케이션(프론트엔드 또는 백엔드)을 마지막으로 사용한 때는 언제입니까?

성능 논의는 항상 무승부입니다(Java를 사용하지 않는 한, 이 경우 Java가 패함).

James:

Node is 고성능 및 저지연 런타임 환경으로 잘 알려져 있으며 일부 Fortune 500대 기업의 코드 스택에 내장되는 자체 방식도 찾았습니다. 비차단 I/O 메커니즘과 Google Chrome V8 엔진 기술 덕분에 Node는 이제 "빠름"과 "확장 가능"의 동의어가 되었습니다. 현재 인터넷에는 Node를 통해 기업이 어떻게 더 나은 성능 향상을 얻고 개발자에게 더 높은 생산성을 제공하는지 등의 많은 이야기가 있습니다. 이번 라운드에서 노드가 승리해서 기쁘지만, 일부 사람들이 이에 대해 의문을 제기한다는 점도 이해합니다.

9라운드: 프로그래머복잡함

9라운드에서는 Craig가 생각하는 일반 프로그래머가 PHP와 Node.js에 대해 얼마나 애정을 가지고 있는지 살펴볼 것입니다. , 노드가 승리합니다.

Bruno:

잘못 보셨나 봐요. Craig. PHP 커뮤니티는 믿을 수 없을 정도로 열정적이고 활동적이며 매년 20회가 넘는 컨퍼런스와 매우 흥미로운 주제 토론을 진행하고 있습니다. 이렇게 HHVM의 PHP7이 완성되었습니다.

또한 개발 6년이 지났는데도 Node 개발자들이 어떤 버전을 작업하고 있는지(v0.12.5는 이미 작성되어 있습니다) 궁금하다는 말씀을 드리고 싶습니다. 이것은 미성숙하고 위험하며(맙소사, 불안정한 기술을 사용하고 있으며 고의로 비즈니스를 중단시키는 것입니까?) 운영 체제의 일부 오래된 버그를 무시하고 일부 중요한 개발자가 언어 생태계를 떠나게 만듭니다.

Npm 때문에 몇몇 부정적인 경험으로 인해 Node를 싫어하게 되었습니다. 앞으로는 바뀔 수도 있겠지만, 지금은 Node를 사용할 때마다 겁이 나고 실망스럽습니다. 우리 모두는 선호하는 것이 있지만 객관적인 태도를 유지하고 작업에 적합한 도구를 선택하는 것이 중요합니다. 하지만 다른 사람들이 시도하고 실수를 하도록 허용하는 것도 중요합니다. 왜냐하면 모든 사람이 뒤늦게 실수를 하고 있기 때문입니다. 그러니 크레이그의 말, 짐의 말, 내 말을 듣지 마세요. 계속해서 실험하고 무엇이 효과가 있는지 확인하고 무엇이 사용하기에 좋은지 찾으십시오. 궁극적으로 가장 좋은 것은 단지 로드 시간을 절약하는 것이 아니라 생산성을 느끼게 하는 것입니다.

James:

Node는 매우 인기가 있고 Node 분야에는 많은 혁신이 있습니다. 열정이 객관적이지는 않지만 이번 라운드에서 Node가 승리하게 되어 기쁩니다.

10라운드: 미래

10라운드에서는 두 언어의 전망을 살펴보고, 현 단계에서 두 언어 모두 강력한 미래를 기대하고 있는 가운데 Craig는 이번 라운드에서 다음과 같은 결론을 내렸습니다. 무승부입니다.

Bruno:

Bruno는 서둘러서 PHP에 대한 더 많은 기사를 작성하고 놀라운 SitePoint PHP 채널을 유지해야 합니다.

James:

James도 자신이 사랑하는 JavaScript 채널로 돌아가고 싶어 다음과 같은 댓글을 남겼습니다.

이번 라운드에서는 무승부가 공평합니다. Node는 떠오르는 스타이지만 PHP를 왕좌에서 몰아내려면 해야 할 일이 많습니다.

요약하자면, 망치가 유일한 도구라면 모든 문제는 못처럼 보입니다. 물론 Node가 모든 솔루션에 완벽하게 적합한 것은 아닙니다. 물론 많은 경우 Node를 사용하지 않는 것이 매우 합리적입니다. 그러나 Node가 할 수 있는 일은 매우 잘 할 수 있습니다. 정보를 바탕으로 결정을 내리고 프로젝트에 가장 적합한 도구를 선택하는 것은 전적으로 귀하에게 달려 있습니다.

브루노와 제임스가 각자의 의견을 밝혔으니 이 문제에 대해 어떻게 생각하시나요?

Bruno Skvorc

크로아티아 프로그래머인 Bruno는 컴퓨터 과학, 영어, 문학 분야에서 3개의 석사 학위를 보유하고 있습니다. 그는 SitePoint의 PHP 칼럼니스트이자 Diffbot.com의 개발 전도사입니다. 그는 전염병과 같은 레거시 코드를 피하고 최신 기술을 사용하는 프로젝트를 선택합니다. 그는 또한 러닝머신 데스크 매니아이자 게이머이기도 합니다.

James Hibbard

저는 현재 화창한 북부 독일에 살고 있는 웹사이트 개발자입니다. 저는 JavaScript와 Ruby로 프로그래밍하는 것을 좋아하며 SitePoint의 javascript 포럼에서 저를 자주 찾을 수 있습니다. 코딩을 하지 않을 때는 달리기를 즐깁니다.

위 내용은 모든 측면을 포함하여 PHP와 Nodejs 간의 10가지 비교 과제를 소개합니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.