Menu

PHP vs JavaScript: serwer, przeglądarka i Node.js

PHP działa na serwerze i wysyła do przeglądarki gotowy HTML. JavaScript działa w przeglądarce, gdzie zmienia stronę po jej wczytaniu, a z Node.js także na serwerze. Większość stron używa obu: PHP do budowania stron i API, JavaScriptu do interakcji.

Na tej stronie są działające edytory: edytuj, uruchamiaj i od razu zobacz wynik.

PHP działa na serwerze: buduje stronę, wysyła gotowy HTML i kończy pracę. JavaScript działa w przeglądarce odwiedzającego, gdzie reaguje na kliknięcia i zmienia stronę po jej wczytaniu; z Node.js może też działać na serwerze. Te dwa języki to więc mniej rywale, a bardziej partnerzy: typowa strona używa PHP (albo Node.js) na serwerze i JavaScriptu w przeglądarce.

Ten kod PHP działa na serwerze. Przeglądarka dostaje tylko to, co wypisze, a karta Page pokazuje ten wynik:

Zajrzyj do karty Output: nie ma w niej już PHP, tylko HTML. Ta sama lista zbudowana przez JavaScript w przeglądarce wygląda tak:

const products = [
  { name: "Keyboard", price: 49 },
  { name: "Mouse", price: 19 },
  { name: "Monitor", price: 189 },
];

const ul = document.querySelector("#cart"); // an empty <ul id="cart"> in the HTML
for (const p of products) {
  const li = document.createElement("li");
  li.textContent = `${p.name}: $${p.price}`;
  ul.append(li);
}

Wersja w PHP wysyła kompletną stronę, którą wyszukiwarki i wolne telefony odczytują od razu. Wersja w JavaScripcie może później zaktualizować listę bez przeładowania, na przykład gdy odwiedzający usunie pozycję.

Gdzie działa każdy z języków

PHPJavaScript
Działa wserwerze WWW (albo terminalu)przeglądarce, a na serwerze z Node.js, Deno lub Bun
Widzipliki, bazy danych, środowisko, sekretystronę (DOM), kliknięcia, pamięć przeglądarki
Czas życiajedno uruchomienie na żądaniedopóki strona jest otwarta (przeglądarka) albo jeden długi proces (Node.js)
Typowe zadaniebudowa stron, obsługa formularzy, API, praca z bazą danychinteraktywność, aktualizacje na żywo, aplikacje jednostronicowe, serwery Node.js
Odwiedzający może przeczytać kodnietak, w przeglądarce

Ostatni wiersz ma znaczenie dla bezpieczeństwa: wszystko w JavaScripcie przeglądarki jest widoczne dla odwiedzającego, więc hasła, klucze API i sprawdzanie cen należą do serwera.

Składnia obok siebie

Oba języki wyglądają podobnie, bo oba zapożyczają z C: nawiasy klamrowe, if, for, while, function, return. Różnice tkwią w szczegółach:

ZadaniePHPJavaScript
Zmienna$name = "Ada";let name = "Ada";
Stałaconst MAX = 10;const MAX = 10;
Łączenie łańcuchów"Hi " . $name"Hi " + name
Łańcuch z szablonem"Hi $name"`Hi ${name}`
Lista["a", "b"]["a", "b"]
Klucz/wartość["id" => 1]{ id: 1 }
Długośćcount($list), strlen($s)list.length, s.length
Pętlaforeach ($list as $item)for (const item of list)
Funkcja strzałkowafn($x) => $x * 2(x) => x * 2
Wypisanieecho "Hi";console.log("Hi");

Oto funkcja z callbackiem w PHP:

I w JavaScripcie, gdzie map i filter to metody tablicy:

const prices = [12.5, 8, 30, 4.25];

const withTax = prices.map((p) => Math.round(p * 1.2 * 100) / 100);
const cheap = withTax.filter((p) => p < 15);

console.log(withTax.join(", "));
console.log("Under 15: " + cheap.join(", "));

Operator +: klasyczna pułapka

W JavaScripcie + zarówno dodaje liczby, jak i łączy łańcuchy, więc łańcuch w dowolnym miejscu zamienia dodawanie w konkatenację. PHP trzyma te operacje osobno: + zawsze dodaje, a . zawsze łączy.

console.log("10" + 5);  // "105"
console.log("10" - 5);  // 5
console.log("3" * "4"); // 12
console.log(0.1 + 0.2 === 0.3); // false

Oba języki mają też luźne == i ścisłe ===. Rada jest w obu ta sama: używaj ===, chyba że świadomie porównujesz różne typy.

Przekazywanie danych z PHP do JavaScriptu

PHP wykonuje się pierwszy, więc może wpisać dane prosto w stronę, żeby użył ich JavaScript w przeglądarce. json_encode zamienia tablicę PHP w poprawny JavaScript:

Karta Output pokazuje wygenerowany skrypt z już wstawionymi danymi. Flaga JSON_HEX_TAG escapuje < i >, więc wartość zawierająca </script> nie zakończy skryptu przedwcześnie. Więcej o opcjach w json_encode.

W drugą stronę działa to przez HTTP: JavaScript w przeglądarce wywołuje fetch("/api/cart.php"), skrypt PHP się wykonuje i odpowiada JSON-em:

<?php
// api/cart.php
header('Content-Type: application/json');
echo json_encode(['items' => 3, 'total' => 257]);
const res = await fetch("/api/cart.php");
const cart = await res.json();
console.log(cart.total); // 257

PHP vs Node.js na serwerze

Gdy JavaScript działa na serwerze przez Node.js, porównanie staje się prawdziwym wyborem.

PHPNode.js
Modelświeże uruchomienie na każde żądanie, nic współdzielonegojeden długo działający proces z pętlą zdarzeń
Czekanie na I/Oblokuje to żądanie (inne żądania działają w innych workerach)nieblokujące, async/await
Dobry wstrony renderowane na serwerze, CMS-y, klasyczne aplikacje CRUDaplikacje czasu rzeczywistego, websockety, wiele bezczynnych połączeń
Hostingkażdy hosting współdzielony, PHP-FPMmenedżer procesów Node albo platforma taka jak Vercel
Duże frameworkiLaravel, Symfony, WordPressExpress, NestJS, Next.js
Jeden język na froncie i backendzienietak

Model PHP wybacza błędy: błąd lub wyciek pamięci dotyczy tylko jednego żądania, a każde żądanie zaczyna od czystej karty. Model Node może trzymać stan i otwarte połączenia, co pasuje do czatu i dashboardów na żywo, ale awaria albo blokująca pętla dotyka każdego użytkownika tego procesu.

Czego się uczyć

JavaScript będzie Ci potrzebny na każdej interaktywnej stronie, bo to jedyny język, który uruchamiają przeglądarki. Pytanie brzmi, co działa na serwerze:

  • Ucz się PHP jako następnego, jeśli chcesz pracować z WordPressem, Laravelem albo licznymi istniejącymi stronami w PHP, albo jeśli chcesz najprościej postawić dynamiczną stronę na tanim hostingu. Zacznij od tego, czym jest PHP.
  • Zostań przy JavaScripcie (Node.js), jeśli chcesz jednego języka dla całego stosu albo budujesz funkcje czasu rzeczywistego.

Typowa ścieżka to HTML i CSS, potem JavaScript w przeglądarce, potem jeden język serwerowy. Niezależnie od wybranego języka serwerowego formularze, sesje, bazy danych i API w JSON opierają się na tych samych zasadach HTTP, więc wiedza się przenosi.

Najczęściej zadawane pytania

Czy JavaScript może zastąpić PHP?

Na serwerze tak: Node.js (z Express, Next.js lub podobnym) wykonuje te same zadania co PHP. W przeglądarce PHP w ogóle nie zastąpi JavaScriptu, bo przeglądarki uruchamiają tylko JavaScript. Dlatego wiele stron używa PHP albo Node na serwerze i JavaScriptu w przeglądarce.

Jak przekazać zmienną PHP do JavaScriptu?

Wypisz ją na stronę jako JSON: <script>const user = <?= json_encode($user, JSON_HEX_TAG) ?>;</script>. json_encode tworzy poprawny JavaScript dla łańcuchów, liczb, tablic i obiektów, a JSON_HEX_TAG sprawia, że </script> w danych nie zamknie znacznika.

Czy JavaScript może wywołać funkcję PHP?

Nie bezpośrednio, bo PHP działa na serwerze, a JavaScript w przeglądarce. JavaScript wysyła żądanie HTTP przez fetch('/api.php?id=3'), skrypt PHP się wykonuje i wypisuje odpowiedź (zwykle JSON), a JavaScript ją odczytuje.

Czy PHP jest szybszy od Node.js?

To zależy od obciążenia. Node.js dobrze radzi sobie z wieloma równoczesnymi wolnymi połączeniami (czat, websockety) dzięki pętli zdarzeń. PHP 8 z OPcache jest szybki przy zwykłych stronach typu żądanie i odpowiedź. Na większości stron wąskim gardłem jest baza danych, a nie język.

Ilustracja języków programowania w Coddy

Ucz się programowania z Coddy

ZACZNIJ