Node.js vs. PHP : 개발자 마인드 셰어를위한 장대 한 전투

그것은 고전적인 할리우드 음모입니다. 서로 다른 길을 갔던 두 오랜 친구 사이의 전투입니다. 종종 마찰은 한 친구가 항상 다른 친구의 무언 영역에 관심을 불러 일으킬 때 시작됩니다. 이 영화의 프로그래밍 언어 버전에서 Node.js의 소개는 버디 영화를 원한의 대결로 바꾸는 것입니다 : PHP와 JavaScript, 한때 인터넷을 함께 지배했지만 이제는 개발자의 마음을 공유하기 위해 두 파트너.

예전에는 파트너십이 간단했습니다. JavaScript는 브라우저에서 약간의 세부 사항을 처리하는 반면 PHP는 포트 80과 MySQL 사이의 모든 서버 측 작업을 관리했습니다. 인터넷의 많은 중요한 부분을 계속 지원하는 행복한 조합이었습니다. WordPress, Drupal 및 Facebook 사이에서 사람들은 PHP를 사용하지 않고는 웹에서 1 분도 갈 수 없습니다.

그런 다음 일부 영리한 아이가 서버에서 JavaScript를 실행할 수 있음을 발견했습니다. 갑자기 차세대 서버 스택을 구축하기 위해 PHP를 사용할 필요가 없었습니다. 하나의 언어로 Node.js와 클라이언트에서 실행되는 프레임 워크를 빌드 할 수있었습니다. "모든 곳의 자바 스크립트"는 일부 사람들에게 만트라가되었습니다.

그 발견 이후 JavaScript는 폭발적으로 성장했습니다. Node.js 개발자는 이제 React, Vue, Express, Angular, Meteor 등 계속해서 확장되는 우수한 프레임 워크 및 스캐 폴딩 컬렉션 중에서 선택할 수 있습니다. 목록이 길고 가장 큰 문제는 우수한 옵션 중에서 선택하는 것입니다.

어떤 사람들은 Node.js의 붐을 JavaScript가 결정적으로 승리하고 있다는 증거로보고 있으며, 그 관점을 강화할 수있는 많은 원시 데이터가 있습니다. GitHub는 자바 스크립트가 리포지토리 컬렉션에서 가장 인기있는 언어이며 자바 스크립트의 사촌 인 TypeScript도 빠르게 성장하고 있다고보고합니다. 가장 멋진 프로젝트 중 상당수는 JavaScript로 작성되었으며 가장 인기있는 해시 태그 중 상당수가이를 참조합니다. 그 동안 PHP는이 순위에서 3 위에서 4 위로 떨어졌고 아마도 보도 자료, 제품 출시 및 기타 심하게 마케팅 된 순간의 수에서 훨씬 더 하락했을 것입니다.

그러나 과대 광고는 사라지고 소프트웨어는 수십 년 동안 지속될 수 있습니다. 대부분의 PHP 코드베이스는 마이그레이션되지 않으며 매일 읽는 텍스트의 상당 부분을 계속해서 제공합니다. 일부 추정에 따르면, 우리가 보는 페이지의 40 %는 어떤 형태로든 PHP로 시작합니다. 이것의 일부는 PHP가 계속해서 다시 태어나 기 때문입니다. 지난 몇 년 동안 PHP를 실행하는 시스템의 내장이 완전히 재 작성되었습니다. 조부모의 웹 사이트를 운영했던 PHP 코드와는 다릅니다.

PHP의 기민한 Just-In-Time 컴파일러는 Node.js 혁명을 이끈 동일한 스마트 기술 덕분에 그 어느 때보 다 빠르게 답변을 제공하고 있습니다. 이제 PHP 7.2와 HHVM은 V8이 Chrome 및 Node.js에 가져온 것과 동일한 영리한 즉석 최적화를 제공합니다. 뿐만 아니라 HHVM에는 람다, 제네릭 및 컬렉션과 같은 정교한 프로그래밍 기능을 완벽하게 지원하는 영리한 PHP 방언 인 Hack이 있습니다. 따라서 이러한 기능이 필요한 경우 더 완전한 기능을 갖춘 스택을 검색 할 필요가 없습니다.

물론 엔딩은 아직 작성되지 않았습니다. Node.js의 순수함과 젊음, 어디서나 JavaScript의 단순성에 대해 우는 모든 코더에게 PHP의 깊은 코드 기반과 오랫동안 이해되어 온 안정성에 만족하는 사람이 있습니다. 오래된 코 저가 서버 측 신생 기업을 이길까요? 자바 스크립트가 오랜 친구를 넘어서 세계를 장악할까요? 팝콘 한 묶음을 전자 레인지에 넣고 앉으세요.

PHP의 장점 : 코드와 콘텐츠의 혼합

당신은 타이핑을하면서 웹 사이트의 텍스트에 생각을 쏟아 붓고, URL의 매개 변수에 따라 예쁘게 보이게 만드는 약간의 if-then 문을 프로세스에 추가하려고합니다. 또는 데이터베이스의 텍스트 나 데이터를 혼합하고 싶을 수도 있습니다. PHP를 사용하면 마법의 PHP 태그를 열고 몇 초 안에 코드 작성을 시작할 수 있습니다. 템플릿이 필요 없습니다. 모든 것이 템플릿입니다! 추가 파일이나 정교한 아키텍처가 필요 없으며 프로그래밍 가능한 물류 기능 만 손끝에서 할 수 있습니다.

Node가이기는 곳 : 우려 사항 분리

코드와 콘텐츠를 섞는 것은 결국 당신을 마비시킬 수 있습니다. 물론 처음 두세 번 코드를 HTML과 혼합하는 것은 재미 있습니다. 그러나 곧 코드 기반이 복잡한 논리가됩니다. 실제 프로그래머는 구조를 추가하고 논리 레이어에서 코스메틱 레이어를 분리합니다. 새로운 프로그래머가 이해하기 쉽고 유지 관리하기 쉽습니다. Node.js에서 실행되는 프레임 워크는 모델, 뷰 및 컨트롤러가 분리되어있을 때 삶이 더 좋다는 것을 알고있는 프로그래머에 의해 구축됩니다.

PHP가이기는 곳 : 심층적 인 코드 기반

웹은 PHP 코드로 가득 차 있습니다. 웹 사이트 구축을위한 가장 인기있는 플랫폼 (WordPress, Drupal, Joomla)은 PHP로 작성되었습니다. 플랫폼은 오픈 소스 일뿐만 아니라 대부분의 플러그인도 마찬가지입니다. 어디서나 PHP 코드가 있으며 필요에 따라 다운로드, 수정 및 사용하기를 기다리고 있습니다.

Node가이기는 곳 : 더 현대적인 기능

물론 수천 개의 훌륭한 오픈 소스 PHP 파일이 있지만 일부는 누군가가 다운로드하기를 바라며기도하는 12 년 된 WordPress 플러그인입니다. 모든 최신 버전의 Symfony에는 아무도 업데이트하지 않는 먼지가 많고 오래 잊혀진 라이브러리가 있습니다.

몇 년 동안 업데이트되지 않은 코드를 사용하여 몇 시간, 며칠 또는 몇 주를 보내고 싶습니까? Node.js 플러그인은 최신 버전 일뿐만 아니라 최신 아키텍처 접근 방식에 대한 완전한 지식으로 구축되었습니다. 최신 웹 앱이 대부분의 인텔리전스를 클라이언트에 제공해야한다는 것을 이해하는 프로그래머가 구축했습니다.

그리고 자바 스크립트는 약간의 미쳤던 작은 특이점이 많지만, 대부분의 경우 현대적인 구문과 클로저와 같은 몇 가지 유용한 기능을 자랑하는 현대적인 언어입니다. 쉽게 재구성하고 확장하여 jQuery와 같은 강력한 라이브러리를 만들 수 있습니다. 객체처럼 함수를 전달할 수 있습니다. 왜 자신을 제한합니까?

PHP의 장점 : 단순성 (일종)

PHP에는 그다지 많지 않습니다. 문자열과 숫자를 저글링하기위한 몇 가지 변수와 기본 함수입니다. 데이터를 포트 80에서 데이터베이스로 이동했다가 다시 이동하는 것 외에는 많은 일을하지 않는 얇은 레이어입니다. 그게해야 할 일입니다. 최신 데이터베이스는 마법의 도구이며 무거운 짐을 맡기는 것이 합리적입니다. PHP는 복잡하지 않아야하는 작업에 적합한 복잡성입니다.

다시 말하지만, 데이터베이스와 상호 작용하고 결과를 형식화하는 것 이상을 원하는 프로그래머라면 이제 코를 잡지 않고 PHP로 더 많은 작업을 수행 할 수 있습니다. Facebook의 HHVM은 유형 주석, 제네릭 및 람다 식과 같은 최신 기능으로 채워진 완전한 언어 인 Hack에 대한 지원을 추가합니다. 이를 사용하면 코드가 HHVM에서만 실행되도록 제한되지만, 이것이 세상에서 가장 나쁜 것은 아닙니다. 매우 빠릅니다.

Node가이기는 곳 : 수십 가지 언어 옵션

PHP 사용자가 Hack에 액세스하는 것에 만족한다면, 많은 주요 언어가 JavaScript에서 실행되도록 크로스 컴파일 될 수 있으므로 Node.js의 세계로 이동하는 것을 고려해야합니다. Java, C # 또는 Lisp와 같은 잘 알려진 옵션과 Scala, OCaml 및 Haskell과 같은 수십 가지 옵션이 있습니다. 향수를 불러 일으키는 BASIC 또는 Pascal 애호가를위한 선물도 있습니다. Jeremy Ashkenas에서 JavaScript로 컴파일되는이 언어 목록은 상당히 포괄적입니다. 또한 TypeScript 및 CoffeeScript와 같은 JavaScript 사촌은 동일한 게임에 대해 약간 다르고 개선 된 접근 방식을 제공합니다.

PHP의 장점 : 클라이언트 앱이 필요하지 않음

브라우저와 서버에서 동일한 언어를 사용하는 것에 대한 모든 이야기는 좋지만 브라우저에서 어떤 언어도 사용할 필요가 없다면 어떻게 될까요? 데이터를 HTML 형식으로 제공하면 어떻게됩니까? 인터랙티브 블링없이 필요한 것을 엄격하게 제공하기 위해 스파르타의 정적 웹 사이트를 구축하고 있다면 어떨까요? 브라우저가 팝업을 띄우고, 웹 서비스 호출 24 번에서 브라우저에 페이지를 생성하려는 JavaScript 스레드를 잘못 실행하여 발생하는 골칫거리 나 결함이 없습니다. 순수한 HTML은 무엇보다 자주 작동하며 PHP는이를 생성하도록 최적화되어 있습니다. 브라우저에서 JavaScript를 사용하는 이유는 무엇입니까? 서버에 모든 것을 구축하고 작은 휴대 전화에서 작은 브라우저에 과부하가 걸리지 않도록하십시오.

Node가이기는 곳 : 서비스 호출은 HTML이 많은 PHP 호출보다 얇습니다.

AJAX에 열광하는 HTML5 웹 앱은 움직이는 부분이 너무 많을 수 있지만 멋지고 매우 효율적입니다. JavaScript 코드가 브라우저 캐시에 있으면 새 데이터 만 연결됩니다. HTML 마크 업이 많지 않으며 전체 페이지를 다운로드하기 위해 반복되는 여행도 없습니다. 데이터 만 변경되었습니다. 매끄러운 브라우저 측 웹 앱을 만드는 데 시간을 할애하려는 경우 큰 보상이 있습니다. Node.js는 웹 서비스를 통해 데이터 만 전달하도록 최적화되어 있습니다. 앱이 복잡하고 데이터가 풍부한 경우 효율적인 제공을위한 좋은 기반이됩니다.

PHP의 장점 : SQL

PHP는 MySQL 및 MariaDB와 같은 다양한 변형과 ​​공존하도록 구축되었습니다. MySQL이 정확하지 않다면 Oracle과 Microsoft의 다른 훌륭한 SQL 데이터베이스가 있습니다. 쿼리를 약간 변경하여 코드를 전환 할 수 있습니다. 방대한 SQL 세계는 경계에서 끝나지 않습니다. 가장 안정적이고 잘 개발 된 코드 중 일부는 SQL 데이터베이스와 상호 작용하므로 모든 기능을 PHP 프로젝트에 쉽게 통합 할 수도 있습니다. 완벽하고 행복한 가정은 아니지만 큰 가족입니다. 뿐만 아니라 개발자가 데이터베이스에 더 많은 인텔리전스를 추가하는 방법을 찾음에 따라 데이터베이스 세계는 서서히 개선되고 있으므로 열심히 일할 필요가 없습니다.

Node.js가이기는 곳 : JSON

SQL에 대한 액세스 권한이 있어야하는 경우 Node.js에는이를위한 라이브러리가 있습니다. 그러나 Node.js는 또한 많은 최신 NoSQL 데이터베이스와 상호 작용하는 언어 인 JSON을 사용합니다. PHP 스택에 대한 JSON 라이브러리를 얻을 수 없다는 것은 아니지만 JavaScript를 사용할 때 JSON 작업의 단순성에 대해 유동적입니다. 브라우저에서 웹 서버, 데이터베이스에 이르는 하나의 구문입니다. 콜론과 중괄호는 모든 곳에서 동일한 방식으로 작동합니다. 그것만으로도 몇 시간의 좌절에서 벗어날 수 있습니다.

PHP의 장점 : 코딩 속도

대부분의 개발자는 웹 앱용 PHP를 작성하는 것이 더 빠릅니다. 컴파일러, 배포, JAR 파일 또는 전 처리기없이 좋아하는 편집기와 디렉토리에있는 일부 PHP 파일 만 있으면됩니다. 귀하의 마일리지는 다양하지만 프로젝트를 빠르게 진행할 때 PHP는 사용하기에 좋은 도구입니다.

Node.js가이기는 곳 : 애플리케이션 속도

중괄호와 괄호를 계산할 때 JavaScript 코드를 작성하는 것이 조금 더 어렵지만 완료되면 Node.js 코드가 날아갈 수 있습니다. 콜백 메커니즘은 스레드를 저글링하지 않아도되므로 훌륭합니다. 코어는 잘 제작되었으며 모든 작업을 수행하도록 설계되었습니다. 모두가 원하는 것이 아닌가?

PHP가이기는 곳 : 경쟁

PHP 개발자의 마음과 마음을위한 싸움은 여전히 ​​진행 중입니다. HHVM 팀과 Zend 팀은 모든 사람에게 빠른 코드를 제공하기 위해 열심히 노력하고 있습니다. 독립적 인 벤치 마크가 나타나고 있으며 모두가 코드베이스를 한계까지 밀어 붙이고 있습니다. 이것은 더 나은 성능을 의미합니다.

Node.js가이기는 곳 : 연대

정말로 두 개의 다른 코드베이스를 원하십니까? 물론 경쟁은 도움이되지만 곧 단편화가 뒤 따릅니다. 코드가 둘 중 하나에서만 실행되면 어떻게됩니까? 코드를 다시 작성하는 데 몇 주 또는 몇 달을 소비해야하는 경우 경쟁은 아무 소용이 없습니다. Node.js는 몇 년 전 io.js가 출시되면서 자체적으로 분열을 경험했지만 Node.js 유니버스는 그 이후로 재결합하여 PHP 개발자가 곧 갈망 할 수있는 언어 연대성을 제공했습니다.

PHP의 장점 : 기본 앱

지난 몇 년 동안 몇몇 개발자는 웹 앱을 시작했고 느린 동작에 좌절했습니다. 움직이는 모든 부분을 구동하는 JavaScript는 수만 바이트, 때로는 수십만 바이트가 될 수 있습니다. 모든 패킷이 도착하면 파싱, 컴파일 및 최종 실행을 거쳐 온도 및 예측과 같은 몇 바이트를 제공해야합니다.

이 로코코 광기에 대한 반발은 정적 사이트 생성기 (이 글에서는 463 개)를 구축하고 AMP 형식의 웹 페이지를 제거하는 팀에서 찾을 수 있습니다. PHP는 서버에 인텔리전스를 집중하여 클라이언트에 부담을주지 않으려는 모든 팀에게 자연스러운 선택입니다.

Node.js가이기는 곳 : 풍부함

건물 설계자 인 Ludwig Mies van der Rohe는“적은 것이 그 이상”이라고 말했습니다. 또 다른 건축가 인 Robert Venturi가 와서“Less is a bore”라고 반박했습니다. 스마트 폰은 Cray 컴퓨터로 가득 찬 방보다 더 많은 전력을 가지고 있습니다. 데스크탑에는 모든 처리 과정에서 냉각 상태를 유지하기 위해 여러 팬이있는 비디오 카드가 있습니다. 왜 우리는 코드를 제거하고 Steinbeck 소설에서 우울증 시대의 피해자처럼 살아야할까요? 인생을 즐기다. JavaScript 코드로 가득 찬 크고 매끄러운 웹 사이트는 눈길을 사로 잡고 드라마틱하며 무엇보다도 재미 있습니다. 물론 몇 비트의 데이터에 그렇게 많은 대역폭을 낭비하는 것은 다소 외설적이지만 대역폭이 그 어느 때보 다 저렴합니다. 조금 살다!

둘 다 승리하는 곳 : 헤드리스

"headless"라는 단어는 서버에서 실행되는 PHP 코드를 나타냅니다. 최근 Drupal과 같은 일부 최고의 PHP 애플리케이션이 통로 전체를 들여다 보았고 React, Angular 또는 Vue와 같은 JavaScript 프레임 워크로 구축 된 정교한 사용자 인터페이스에 놀랐습니다. 그들과 경쟁하려고하는 대신 클라이언트의 제어권을 넘기고 서버의 백엔드로 좋은 일을하는 데 집중하고 있습니다.

서버에서 실행되는 PHP 코드에 상당한 투자를했다면 두 가지 방법을 모두 활용할 수있는 방법이 될 수 있습니다. 기존의 확립 된 PHP 코드는 데이터베이스의 현관 문 역할을하며 요청을 다시 확인하고 데이터를 정리하며 일반적으로 모든 비즈니스 로직을 제공합니다. 클라이언트 측은 최신 JavaScript 프레임 워크로 작성된 점진적 웹 앱입니다. 정보가 필요할 때 AJAX 요청을 PHP 코드로 보냅니다.

이것은 처음부터 시작하는 사람에게는 말이되지 않을 수 있지만, PHP에 수년간 의존해 왔고 점진적으로 발전하고 싶다면 행복한 타협이 될 수 있습니다.

둘 다이기는 곳 : 마이크로 서비스와 서버리스

떠오르는 마이크로 서비스 또는 서버리스 패러다임은 JavaScript 및 PHP 코드가 서버를 동거하고 잘 지낼 수있는 방법을 제공합니다. 두 솔루션 모두 작업을 수십 개의 작은 서비스 또는 기능으로 분할하고 이들은 독립적으로 실행되고 차선에 머물 수 있습니다. 일반적으로 앱의 가장 오래되고 안정적인 섹션 인 일부 부분은 PHP를 실행할 수 있습니다. 다른 부분 (종종 최신 부분)은 Node.js로 작성됩니다. POST또는 의 언어는 GET그들 모두를 통합하는 언어가 될 수 있습니다.