Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
00297 005608 18999459 na godz. na dobę w sumie
Szybsza Sieć z językami PHP, MySQL i JavaScript. Zaawansowane aplikacje z wykorzystaniem najnowszych technologii - książka
Szybsza Sieć z językami PHP, MySQL i JavaScript. Zaawansowane aplikacje z wykorzystaniem najnowszych technologii - książka
Autor: Liczba stron: 216
Wydawca: Helion Język publikacji: polski
ISBN: 978-83-283-5521-7 Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> webmasterstwo >> php - programowanie
Porównaj ceny (książka, ebook (-35%), audiobook).

Termin Szybsza Sieć (ang. Faster Web) powstał stosunkowo niedawno. Koncepcja ta skupia się na rozwijaniu wszystkich elementów technologii internetowych oraz interfejsu użytkownika, tak aby przyśpieszyć interakcję między klientem a serwerem oraz działanie samej aplikacji. Efektem tych optymalizacji powinna być poprawa jakości pracy systemu. Aby w pełni przyswoić ideę Szybszej Sieci, trzeba dobrze zrozumieć takie pojęcia jak wydajność, efektywność i postrzegana wydajność. Konieczne jest również opanowanie większości nowych technologii webowych.

Dzięki tej książce dowiesz się, w jaki sposób poprawić działanie każdej aplikacji WWW, aby odpowiadała kryteriom Szybszej Sieci. Wkrótce rozpoczniesz pracę z najnowszymi narzędziami do mierzenia wydajności, profilowania i monitorowania dla PHP, MySQL i JavaScriptu. Omówiono tu wszystkie istotne zagadnienia związane z ideą Szybszej Sieci, w tym optymalizację kodu PHP 7, programowanie asynchroniczne i programowanie funkcyjne w JavaScripcie. Sporo miejsca poświęcono najlepszym strategiom optymalizacji. Opisano też techniki profilowania skryptów, pomiaru wydajności bazy danych, optymalizacji zapytań SQL oraz podnoszenia wydajności serwera WWW. Przekonasz się, że dzięki optymalizacji można przekraczać granice efektywności aplikacji!

W tej książce między innymi:

Przekraczaj granice wydajności. Projektuj szybszy kod!

Znajdź podobne książki Ostatnio czytane w tej kategorii

Darmowy fragment publikacji:

Tytuł oryginału: Mastering the Faster Web with PHP, MySQL and JavaScript: Develop state of the art Web applications using the latest Web technologies Tłumaczenie: Krzysztof Bąbol ISBN: 978-83-283-5521-7 Copyright © Packt Publishing 2018. First published in the English language under the title ‘Mastering The Faster Web with PHP, MySQL, and JavaScript – (9781788392211)’. Polish edition copyright © 2019 by HELION SA. All rights reserved. All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from the Publisher. Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu niniejszej publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą kserograficzną, fotograficzną, a także kopiowanie książki na nośniku filmowym, magnetycznym lub innym powoduje naruszenie praw autorskich niniejszej publikacji. Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli. Autor oraz Helion SA dołożyli wszelkich starań, by zawarte w tej książce informacje były kompletne i rzetelne. Nie biorą jednak żadnej odpowiedzialności ani za ich wykorzystanie, ani za związane z tym ewentualne naruszenie praw patentowych lub autorskich. Autor oraz Helion SA nie ponoszą również żadnej odpowiedzialności za ewentualne szkody wynikłe z wykorzystania informacji zawartych w książce. Helion SA ul. Kościuszki 1c, 44-100 Gliwice tel. 32 231 22 19, 32 230 98 63 e-mail: helion@helion.pl WWW: http://helion.pl (księgarnia internetowa, katalog książek) Pliki z przykładami omawianymi w książce można znaleźć pod adresem: ftp://ftp.helion.pl/przyklady/szysie.zip Drogi Czytelniku! Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres http://helion.pl/user/opinie/szysie Możesz tam wpisać swoje uwagi, spostrzeżenia, recenzję. Printed in Poland. • Kup książkę • Poleć książkę • Oceń książkę • Księgarnia internetowa • Lubię to! » Nasza społeczność Spis treści Przedmowa O autorze O recenzentach Wstęp Rozdział 1. Wprowadzenie do koncepcji Szybszej Sieci Istota Szybszej Sieci Pojęcie Szybszej Sieci a wydajność Pomiar Szybszej Sieci Instalacja i konfiguracja użytecznych narzędzi Podsumowanie Bibliografia Rozdział 2. Ciągłe profilowanie i monitorowanie Czym jest Blackfire.io? Instalacja i konfiguracja narzędzia Blackfire.io Ręczne profilowanie za pomocą Blackfire.io Testy wydajnościowe przy użyciu Blackfire.io Monitorowanie wydajności dzięki TICK Stack Podsumowanie Bibliografia Rozdział 3. Korzystanie z potencjału struktur danych i funkcji PHP 7 Usprawnienia języka PHP 7 Silne typowanie Tablice niemodyfikowalne i upakowane 9 11 12 13 17 18 18 19 30 40 41 43 43 44 50 56 58 70 70 71 72 72 75 Kup książkęPoleć książkę Spis treści Przydział pamięci na liczby całkowite i zmiennoprzecinkowe Interpolacja i łączenie ciągów znaków Referencje w parametrach Identyfikacja dalszych możliwych optymalizacji Programowanie funkcyjne oraz spamiętywanie Podsumowanie Bibliografia Rozdział 4. Wybiegamy w przyszłość dzięki asynchronicznemu kodowi PHP Asynchroniczna i nieblokująca obsługa wejścia/wyjścia Wielowątkowość z użyciem biblioteki pthreads Korzystanie z biblioteki ReactPHP Podsumowanie Rozdział 5. Pomiar i optymalizacja wydajności bazy danych Wydajność zapytań SQL Struktura indeksów Plan wykonania zapytań Podstawowa optymalizacja zapytań Schemat wydajności i zaawansowana optymalizacja zapytań Zaawansowane narzędzia do testowania DBT2 SysBench Podsumowanie Rozdział 6. Efektywne zapytania do bazy danych w Nowoczesnym SQL-u Nowoczesny SQL Definicja Podsumowanie Rozdział 7. Język JavaScript i programowanie sterowane zagrożeniami Obiekt globalny i zmienne lokalne Unikanie zmiennych globalnych Obliczanie wartości zmiennych lokalnych Unikanie szkodliwych wyrażeń i zwracanie uwagi na najsłabsze strony języka Szkodliwe wyrażenia Szkodliwe konstrukcje: instrukcja with Szkodliwe konstrukcje: instrukcja eval Szkodliwe konstrukcje: try-catch-finally Unikanie nieefektywnych pętli Lintery i tryb ścisły Efektywne korzystanie z modelu DOM Modyfikacja drzewa dokumentu Zmienianie niewidocznego elementu Dokonywanie zmian stylów Wyszukiwanie węzłów Badanie dużej liczby węzłów 6 77 78 79 81 87 91 91 93 94 102 105 112 113 113 113 115 117 120 125 125 129 131 133 133 134 150 151 152 152 155 155 155 156 156 157 157 159 160 160 161 161 162 163 Kup książkęPoleć książkę Zarządzanie referencjami do innych dokumentów Buforowanie wartości z modelu DOM Strukturyzowanie i ładowanie aplikacji JavaScript Ograniczanie czasochłonnych operacji Oczyszczanie, minifikacja i kompresowanie zasobów Ładowanie zasobów strony Buforowanie zasobów strony Podsumowanie Rozdział 8. Funkcyjny JavaScript Upraszczanie funkcji Zasady programowania funkcyjnego Funkcje jako typy pierwszoklasowe Postępowanie z efektami ubocznymi Niezmienność Techniki programowania funkcyjnego Funkcja map Funkcja filter Funkcja reduce Optymalizacja ogonowa Inne zapowiadane możliwości języka JavaScript Funkcje asynchroniczne Generatory asynchroniczne i pętle for-await-of Operator potoku Częściowe wywołanie Podsumowanie Rozdział 9. Zwiększanie wydajności serwera WWW MOD_SPDY i HTTP/2 Multipleksowanie i priorytetyzacja strumieni Wypychanie zasobów przez serwer Kompresja nagłówków HTTP/2 PHP-FPM i OPCache PHP-FPM Zend OPcache ESI i Varnish Cache Edge Side Includes (ESI) Varnish Cache Buforowanie po stronie klienta Buforowanie w przeglądarce Sieci dystrybucji treści (sieci CDN) Inne narzędzia związane z ideą Szybszej Sieci Podsumowanie Bibliografia Spis treści 163 163 164 164 164 165 165 165 167 167 167 169 169 170 171 171 171 171 172 177 177 177 178 178 179 181 181 182 182 183 183 185 185 186 187 187 190 194 195 196 197 200 200 7 Kup książkęPoleć książkę Spis treści Rozdział 10. Przekraczamy granice wydajności Czas zegarowy i postrzegany Percepcja szybkości Rozsądne opóźnienia i czasy odpowiedzi Zasady i wzory projektowania interfejsu użytkownika Narzędzia pozwalające przekraczać granice wydajności Podsumowanie Bibliografia Skorowidz 201 201 203 204 205 207 212 212 213 8 Kup książkęPoleć książkę 1 Wprowadzenie do koncepcji Szybszej Sieci „Szybsza Sieć” (ang. Faster Web) to określenie używane już od kilku lat do opisywania wielu różnych aspektów wydajności sieci WWW. W książce przyjrzymy się temu zagadnieniu bli- żej. Dlaczego jest ważne? Czy jest tym samym, co wydajność? Jak je mierzyć? Od jakiego momentu powinno brać się je pod uwagę podczas pracy nad nowym projektem? Jakie tech- nologie leżą u jego podstaw i jak wykorzystać ich możliwości, by uczynić swój projekt inter- netowy częścią środowiska Szybszej Sieci? Pierwszy rozdział tej książki rozpoczniemy od zdefiniowania pojęcia „Szybszej Sieci” i pró- by lepszego zrozumienia jego formalnych aspektów. W treści książki przedstawię wiele przykładów kodu, które pozwolą Ci lepiej zrozumieć koncep- cje leżące u podstaw Szybszej Sieci. Poświęcimy trochę czasu, aby przyjrzeć się jej źródłom, ocenić jej bieżący rozwój i spojrzeć w przyszłość, ku następnemu ważnemu etapowi. Na razie rozpoczniemy od instalacji wewnątrz kontenera Docker narzędzi do mierzenia wy- dajności i profilowania, abyś nauczył się ich używać. Zajmiemy się mierzeniem wydajności oraz ustalaniem, czy strona lub aplikacja WWW jest już częścią środowiska Szybszej Sieci. W rozdziale tym poruszymy następujące tematy:  zrozumienie idei Szybszej Sieci i jej znaczenia;  odróżnianie pojęcia „Szybszej Sieci” od wydajności;  poznanie sposobów mierzenia szybkości sieci;  instalacja, konfiguracja i użycie narzędzi do testów porównawczych i profilowania. Kup książkęPoleć książkę Szybsza Sieć z językami PHP, MySQL i JavaScript Istota Szybszej Sieci W 2009 roku firma Google zapowiedziała swoje zamiary przyspieszenia sieci[1] i podjęła odpowiednią inicjatywę, w ramach której zaprosiła społeczność sieci WWW do zastanowie- nia się, jak można przyspieszyć internet. Główną przyczyną inicjatywy firmy Google miało być to, że „ludzie chcą szybszych, lepiej reagujących aplikacji”. Oświadczenie to zawierało rów- nież wykaz zidentyfikowanych przez Google wyzwań, którymi planowano się zająć w pierw- szej kolejności. Główne z nich to:  aktualizacja przestarzałych protokołów;  poprawa wydajności języka JavaScript;  wynalezienie nowych narzędzi pomiarowych, diagnostycznych i optymalizacyjnych;  zapewnienie lepszego dostępu do szerokopasmowego internetu na całym świecie. Pojęcie Szybszej Sieci a wydajność Szybszą Sieć można zdefiniować jako szereg cech jakościowych rozwijanych we wszystkich dziedzinach technologii internetowych w celu przyspieszenia transakcji między klientem a serwerem. Na ile ważna jest szybkość? Dla firmy Google jest bardzo istotna, ponieważ w 2010 roku jej specjaliści odkryli, że każde spowolnienie ma bezpośredni wypływ na ruch na stronie firmy i zyski z reklam. Udało im się określić korelację statystyczną między ruchem a przychodem z reklam, a także liczbę wyników i czas potrzebny na ich uzyskanie. Badania pokazały, że w sytu- acji, gdy strona zawierająca więcej wyników ładowała się przez 0,9 sekundy, nastąpił spadek ruchu oraz przychodów z reklam rzędu 20 w stosunku do strony z mniejszą liczbą wyników, ale wyświetlanej w ciągu 0,4 sekundy. Również firma Yahoo potwierdziła, że od 5 do 9 jej użytkowników opuszcza stronę WWW, która ładuje się przez ponad 400 milisekund. Usługa Microsoft Bing notowała 4-procentowy spadek przychodu wtedy, gdy wyniki wyszukiwania do- starczała jedynie o 2 sekundy później. Widać więc wyraźnie, że szybkość nie tylko zapewnia za- angażowanie użytkowników, ale ma też duży wpływ na przychód i ogólne wyniki firmy. Na pierwszy rzut oka wydaje się, że pojęcie „Szybszej Sieci” jest synonimem wydajności sieci WWW. Ale czy jest tak naprawdę? Wydajność definiuje się jako sposób działania mechanizmu. Według André B. Bondi [2], „wy- dajność systemu komputerowego często określa się jako jego zdolność do wykonywania określonych serii działań w szybkim tempie i z krótkim czasem odpowiedzi”. Z kolei w książce J. D. Meier i innych, poświęconej testom wydajnościowym [3], stwierdzono, że „testy wy- dajnościowe to rodzaj testów służących określeniu responsywności, przepustowości, nieza- wodności i/lub skalowalności systemu przy danym obciążeniu”. Widać więc bardzo wyraźnie, że wydajność jest podstawą koncepcji Szybszej Sieci. Czy jednak zawsze jest jej jedyną właściwością? Jeśli aplikacja ma wykonać dokładną analizę dysku twardego i kończy ją w ciągu niespełna 5 sekund, z pewnością pomyślimy, że coś poszło nie tak. 18 Kup książkęPoleć książkę Rozdział 1. • Wprowadzenie do koncepcji Szybszej Sieci Według Denysa Mishunova [4] wydajność ma również związek z percepcją. Stéphanie Walter [5] w jednej z prezentacji na temat postrzegania wydajności stwierdziła, że „pomiar czasu zależy od chwili i może się różnić w zależności od złożoności wykonywanego zadania, stanu psychicznego użytkownika (stresu) oraz jego oczekiwań określonych przez to, jaki program wykonujący dane zadanie uważa za wzorcowy”. Tak więc dobre działanie aplikacji oznacza również, że musi ona sprostać oczekiwaniom użytkownika co do tego, jak powinien działać program komputerowy. Mimo że wysiłki w ramach koncepcji Szybszej Sieci skoncentrowano najpierw na przyspieszeniu rozmaitych technologii internetowych, w wyniku różnych studiów mających na celu dokładne zmierzenie, jak wydajność stron WWW wpłynęła na przyzwyczajenia i ogólne zachowanie internautów, badacze odeszli od koncepcji czasu obiektywnego, odmierzanego przez zegar, na rzecz czasu subiektywnego, odczuwanego. W książce tej opiszę koncepcję Szybszej Sieci w odniesieniu do głównych technologii sieci WWW, czyli tych, na których działa od 70 do 80 serwerów WWW na świecie, a mianowicie Apache, PHP, MySQL i JavaScript oraz wszystkich najważniejszych przeglądarek. Te głów- ne technologie sieciowe omówię nie tylko z punktu widzenia programisty, ale także admini- stratora systemów, opisując w ostatnich rozdziałach protokół HTTP/2 i buforowanie zwrotne (ang. reverse proxy caching). Pomimo że większa część tej książki dotyczy tylko wydajności sieci WWW, ostatni rozdział obejmuje inne aspekty Szybszej Sieci, dotyczące dobrego, spełniają- cego oczekiwania internautów projektu interfejsu użytkownika (ang. user interface — UI). Pomiar Szybszej Sieci Zrozumiałeś już, dlaczego wydajność sieci WWW jest bardzo ważnym składnikiem całej koncepcji Szybszej Sieci, która jednak odnosi się nie tylko do wydajności i szybkości, ale zaspo- kojenia wszystkich oczekiwań użytkowników. Warto teraz postawić sobie pytanie, jak obiektyw- nie zmierzyć parametry Szybszej Sieci i jakie narzędzia najlepiej się do tego nadają. Przed pomiarem Przy omawianiu pomiaru szybkości należy zawsze pamiętać, że zależy ona ostatecznie od sprzętu i że problem niekoniecznie musi leżeć w niezbyt wydajnym oprogramowaniu, jeśli zostało uruchomione na mało wydajnej infrastrukturze sprzętowej. Za większą część łącznego opóźnienia infrastruktury sprzętowej odpowiadają oczywiście zawsze operacje wejścia i wyjścia (ang. input and output — I/O). Głównymi „wąskimi gardłami”, jeśli chodzi o szybkość, są sieć i system plików. Dostęp do danych na dysku jest na przykład do stu razy wolniejszy niż do pamięci RAM (ang. random access memory), a bardzo obciążona sieć może spowodować praktyczną niedo- stępność usług WWW. Ograniczenia wielkości pamięci RAM również zmuszają do pewnych kompromisów w zakresie szybkości, skalowalności i dokładności. Aby uzyskać najwyższą możliwą wydajność można przecież buforować większą część danych aplikacji i ładować wszystko do pamięci operacyjnej. Czy jednak w każdych okolicznościach będzie to rozwiązanie optymalne? Czy da się utrzymać 19 Kup książkęPoleć książkę Szybsza Sieć z językami PHP, MySQL i JavaScript szybkość w przypadku dużego obciążenia? Czy w przypadku dużej zmienności danych będą one właściwie odświeżane? Na te pytania niemal na pewno nie da się odpowiedzieć pozy- tywnie. Optymalna szybkość to zrównoważenie czystej prędkości, rozsądnego zużycia pa- mięci i akceptowalnej trwałości danych. Mierzenie wydajności w celu określenia optymalnej szybkości programu komputerowego to sztuka znalezienia idealnej równowagi w ramach konkretnych reguł biznesowych oraz do- stępnych zasobów dzięki implementacji właściwych kompromisowych rozwiązań i później- szemu ich dopracowaniu. Pierwszym krokiem w zakresie oceny wydajności powinna być zatem analiza dostępnych zaso- bów i określenie dolnej i górnej granicy wydajności sprzętu. Ponieważ pracujemy nad wy- dajnością sieci WWW, to w celu wykonania tego pierwszego kroku musimy przeprowadzić testy samego serwera. Kolejny etap to profilowanie aplikacji WWW w celu analizy wydajności każdego z jej elementów składowych oraz określenie, jakie fragmenty kodu aplikacji są dalekie od doskonałości i po- winny zostać zoptymalizowane. Testy porównawcze i profilowanie Testowanie serwera WWW polega na ocenie jego wydajności przy pewnym obciążeniu. Profi- lowanie oprogramowania to analiza zużycia pamięci i czasu wykonywania w celu optymali- zacji wewnętrznej struktury programu. W tej części rozdziału zainstalujemy i przetestujemy kilka narzędzi do testowania wydajno- ści serwera i profilowania kodu źródłowego, które zostaną opisane w kolejnych rozdziałach. Praktyczne wymagania wstępne Aby uruchomić zawarte w tej książce kody źródłowe, należy zainstalować program Docker (https://docs.docker.com/engine/installation/). Docker to platforma kontenerów z oprogramowaniem, pozwalająca łatwo łączyć się ze znajdują- cymi się w komputerze narzędziami w izolowanym, zaawansowanym środowisku, podobnym do trybu chroot. W odróżnieniu od maszyn wirtualnych, kontenery nie zawierają całego systemu operacyjnego, ale tylko pliki binarne wymagane do uruchomienia danego oprogramowania. Program Docker można zainstalować w systemie Windows, Linux lub na komputerze Mac. Należy jednak zauważyć, że niektóre jego funkcje, między innymi w pełni funkcjonalne usługi sieciowe, w systemie macOS są wciąż niedostępne (https://docs.docker.com/docker- for-mac/networking/#known-limitations-use-cases-and-workarounds). Zasadniczą wersją obrazu platformy Docker używaną w tej książce jest Linux for PHP 8.1.3 (https://linuxforphp.net/), z niezapewniającą bezpieczeństwa wątków wersją środowiska PHP 7.3.0 i bazą danych MariaDB (MySQL) 10.2.8 (asclinux/linuxforphp-8.1:7.3.0-nts). Najpierw za- instaluj na komputerze program Docker i pobierz z serwera FTP wydawnictwa Helion przykłady kodu z książki. Następnie, w celu uruchomienia właściwego kontenera, w Terminalu obsługującym składnię powłoki bash wydaj następujące polecenia: 20 Kup książkęPoleć książkę Rozdział 1. • Wprowadzenie do koncepcji Szybszej Sieci # cd fasterweb # docker run --rm -it \ -v ${PWD}/:/srv/fasterweb \ -p 8181:80 \ asclinux/linuxforphp-8.1:7.3.0-nts \ /bin/bash Po wykonaniu tych poleceń pokaże się interfejs linii poleceń kontenera Linux for PHP: Uwaga dla użytkowników systemu Windows: W powyższym wywołaniu narzędzia docker zamień (w opcji dotyczącej współdzielonych woluminów) fragment ${PWD} na pełną ścieżkę do katalogu ro- boczego (np. /c/Users/fasterweb), bo inaczej nie uda się uruchomić kontenera. Upewnij się też, że w ustawieniach narzędzia Docker zostało włączone współdzielenie woluminów. Ponadto jeśli program Docker został uruchomiony w systemie Windows 7 lub 8, kontener nie będzie dostępny pod adresem localhost:8181, a tylko http://192.168.99.100:8181. Wszystkie przykłady podane w tej książce są zawarte w folderach o nazwach zgodnych z nume- rem rozdziału. Aby uruchomić kod z danego rozdziału, powinieneś najpierw zmienić katalog roboczy. W przypadku tego rozdziału wprowadź więc w wierszu poleceń kontenera poniższe polecenia: # mv /srv/www /srv/www.OLD # ln -s /srv/fasterweb/r01 /srv/www Po przejściu do kolejnego powinieneś wprowadzić następujące komendy: # rm /srv/www # ln -s /srv/fasterweb/r02 /srv/www W przypadku kolejnych rozdziałów postępuj podobnie. Jeśli zaś podczas optymalizacji kodu chciałbyś używać technologii wielowątkowych, skorzystaj z bezpiecznej wątkowo wersji kontenera Linux for PHP (asclinux/linuxforphp-8.1:7.3.0-zts). Jeśli chcesz, możesz uruchomić kontener w trybie odłączonym (opcja -d). Pozwala to wyko- nywać komendy docker exec w stosunku do tego samego kontenera w wielu powłokach po- leceń oraz utrzymywać jego działanie niezależnie od tego, czy masz uruchomiony Terminal. Ponadto w celu stworzenia nowych obrazów wszelkie zmiany wprowadzone do kontenera należy zatwierdzić poleceniem docker commit. Obrazy można później uruchomić poleceniem docker run. Jeśli nie jesteś obeznany z wierszem poleceń programu Docker i komendą run, zapoznaj się z dokumentacją (w języku angielskim) dostępną na stronie https://docs.docker.com/engine/ 21 Kup książkęPoleć książkę Szybsza Sieć z językami PHP, MySQL i JavaScript reference/run/. Możesz także skorzystać z którejś spośród opublikowanych przez wydawnic- two Helion książek na ten temat (np. Docker. Praktyczne zastosowania Karla Matthiasa i Seana P. Kane’a). W celu uruchomienia wszystkich usług, które będą potrzebne podczas lektury tej książki, stwo- rzymy skrypt testowy, który pozwoli upewnić się, że wszystko działa tak jak powinno. Wprowadź poniższe polecenia: # cd /srv/www # /etc/init.d/mysql start # /etc/init.d/php-fpm start # /etc/init.d/httpd start # touch /srv/www/index.php # echo -e ?php phpinfo(); /srv/www/index.php Następnie przejdź w swojej ulubionej przeglądarce na stronę http://localhost:8181/, a zoba- czysz poniższy wynik: Jeśli nie widzisz tej strony, spróbuj rozwiązać problem z instalacją programu Docker. Pamiętaj ponadto, że jeśli nie zatwierdzisz zmian poleceniem docker commit, bo wolisz uży- wać oryginalnego obrazu dystrybucji Linux for PHP, to będziesz musiał wydawać powyższe polecenia przed każdym rozpoczęciem pracy z kodem zawartym w tej książce. Możemy już przystąpić do testów porównawczych serwera. Poznajemy Apache Bench (AB) Istnieje wiele narzędzi do mierzenia wydajności serwera WWW. Do najbardziej znanych należą Apache Bench (AB), Siege, JMeter i Tsung. JMeter (https://jmeter.apache.org/) i Tsung 22 Kup książkęPoleć książkę Rozdział 1. • Wprowadzenie do koncepcji Szybszej Sieci (http://tsung.erlang-projects.org/) to bardzo interesujące narzędzia do pomiaru obciążenia, warte zbadania przez administratorów przy okazji bardziej zaawansowanych testów. Pro- gramistom wystarczy jednak skupić się na programach AB and Siege. Program AB jest dostarczany wraz z narzędziami programistycznymi serwera WWW i w ob- razach dystrybucji Linux for PHP zawierających pliki binarne PHP jest domyślnie zainstalowa- ny. W większości innych dystrybucji systemu Linux program AB znajduje się w oddzielnym pakiecie instalacyjnym narzędzi programistycznych serwera Apache. Warto wiedzieć, że Apache Bench nie wspiera wielowątkowości, co może powodować problemy podczas testów o dużym stopniu współbieżności. Podczas pomiaru wydajności trzeba unikać często pojawiających się problemów. Przede wszystkim:  nie należy uruchamiać równocześnie na testowanym komputerze aplikacji pochłaniających dużo zasobów;  nie należy testować wydajności zdalnych serwerów, ponieważ połączenia sieciowe mogą być głównym źródłem mierzonych opóźnień, zwłaszcza w przypadku testów współbieżnych;  nie należy testować stron WWW buforowanych za pomocą akceleratorów ruchu sieciowego ani pośredników (ang. proxies), bo wyniki będą wypaczone i nie pokażą prawdziwej wydajności serwera;  nie powinno się sądzić, że pomiar wydajności i testy obciążeniowe będą dokładnie odzwierciedlać interakcję użytkowników z serwerem, bo ich wyniki są tylko orientacyjne;  trzeba zdawać sobie sprawę, że wyniki testów dotyczą tylko danej architektury sprzętowej i na każdym komputerze będą inne. Podczas testów będziemy korzystać z przełączników -k, -l, -c i -n programu Apache Bench. Oto opis tych parametrów:  -k włącza funkcję KeepAlive (podtrzymywania aktywności), pozwalającą na wykonywanie wielu żądań HTTP w jednej sesji;  -l wyłącza raportowanie błędów w sytuacji, gdy kolejne odpowiedzi mają różny rozmiar;  -c uaktywnia współbieżność, pozwalając wykonywać wiele żądań jednocześnie;  -n określa liczbę żądań wykonywanych w ciągu bieżącej sesji testowej. W celu uzyskania dalszych informacji na temat opcji narzędzia AB zapoznaj się z odpowiednim wpisem w dokumentacji serwera Apache (https://httpd.apache.org/docs/2.4/programs/ab.html). Zanim uruchomisz testy porównawcze, otwórz nowe okno Terminalu i poleceniem docker exec otwórz w kontenerze nową powłokę bash. Dzięki temu będziesz mógł sprawdzić zużycie zasobów za pomocą narzędzia top. Na początek odczytaj nazwę kontenera. Pojawi się na ona na liście wyników polecenia: # docker ps 23 Kup książkęPoleć książkę Szybsza Sieć z językami PHP, MySQL i JavaScript Będziesz mógł wówczas podłączyć się do kontenera i zacząć obserwować zużycie zasobów komendą: # docker exec -it [tutaj nazwa kontenera] /bin/bash W wierszu poleceń kontenera, do którego uzyskałeś dostęp, uruchom polecenie top: # top Teraz w pierwszym oknie Terminalu uruchom test porównawczy: # ab -k -l -c 2 -n 2000 localhost/index.html Po jego wykonaniu uzyskasz raport zawierający informację o średniej liczbie żądań na sekundę, które serwer zdołał obsłużyć (Requests per second), przeciętnym czasie odpowiedzi na żą- danie (Time per request) i rozkładzie czasu odpowiedzi (Percentage of requests served within a certain time (ms)). Twój raport powinien być podobny do tego: 24 Kup książkęPoleć książkę Rozdział 1. • Wprowadzenie do koncepcji Szybszej Sieci Uruchom teraz nowy test porównawczy, wykonując zapytanie o plik index.php: # ab -k -l -c 2 -n 2000 localhost/index.php Można zauważyć, że spadła średnia liczba żądań na sekundę, a wzrósł przeciętny czas odpowie- dzi i wartość odchylenia standardowego. Na moim komputerze średnia liczba żądań spadła z 800 do około 300, przeciętny czas odpowiedzi wzrósł z 2 do 6 milisekund, a czas dla 100 obsłużonych żądań z 8 do 24 milisekund: 25 Kup książkęPoleć książkę Szybsza Sieć z językami PHP, MySQL i JavaScript Te wyniki dają ogólne pojęcie o granicach wydajności naszego sprzętu i pozwalają określić różne wartości progowe, z którymi będziemy mieli do czynienia próbując zwiększyć wydaj- ność skryptów PHP generujących treści dynamiczne. Wniknijmy teraz nieco głębiej w wydajność serwera WWW dzięki najlepszemu narzędziu do testowania osiągów i obciążenia — Siege. Poznajemy Siege Siege jest narzędziem do testowania obciążenia i wydajności, które pozwala na dalszą anali- zę osiągów serwera WWW. Zacznijmy od zainstalowania go wewnątrz kontenera Docker. Z poziomu wiersza poleceń kontenera pobierz i zdekompresuj wersję 4.0.2 programu Siege: # wget -O siege-4.0.2.tar.gz http://download.joedog.org/siege/siege–4.0.2.tar.gz # tar -xzvf siege-4.0.2.tar.gz Następnie wejdź do katalogu z kodem źródłowym Siege w celu skompilowania i instalacji oprogramowania: # cd siege-4.0.2 # ./configure # make # make install Podczas testów z użyciem Siege będziemy korzystać z opcji -b, -c i -r. Oto opis tych para- metrów:  -b włącza tryb testu wydajnościowego, co oznacza, że pomiędzy jego powtórzeniami nie ma opóźnień;  -c włącza współbieżność w celu wykonywania jednocześnie wielu żądań;  -r określa liczbę żądań wykonywanych przez każdego z równocześnie symulowanych użytkowników. Aby uzyskać więcej informacji na temat opcji programu Siege, możesz z wiersza poleceń kontenera wywołać jego podręcznik systemowy: # man siege Rozpocznij test porównawczy Siege: # siege -b -c 3000 -r 100 localhost/index.html Uzyskasz po nim raport podobny do przedstawionego na rysunku na następnej stronie. Jak widać, wyniki odpowiadają rezultatom zwróconym przez narzędzie AB. Nasz test wyka- zuje, że wskaźnik transakcji wynosi prawie 800 zapytań na sekundę. Do programu Siege dołączono poręczne narzędzie o nazwie Bombard, pozwalające automaty- zować testy i weryfikować skalowalność serwera. Bombard uruchamia Siege z ciągle rosnącą liczbą równocześnie symulowanych użytkowników. Przyjmuje kilka argumentów opcjonalnych. 26 Kup książkęPoleć książkę Rozdział 1. • Wprowadzenie do koncepcji Szybszej Sieci Są to: nazwa pliku z adresami URL używanymi podczas przeprowadzania testów, początko- wa liczba równoczesnych klientów, liczba klientów do dodania przy każdym wywołaniu pro- gramu Siege, liczba wywołań Siege oraz odstęp w sekundach pomiędzy zapytaniami. Możemy zatem potwierdzić wyniki poprzednich testów, wydając w kontenerze polecenia: # cd /srv/www # touch urlfile.txt # for i in {1..4}; do echo http://localhost/index.html urlfile.txt ; done # bombardment urlfile.txt 10 100 4 0 Na koniec powinieneś uzyskać raport podobny do przedstawionego na rysunku na następnej stronie. Wyniki wskazują, że przy ponad 210 użytkownikach transakcje są znacznie wydłużone: Powtórz próbę, wykonując tym razem zapytanie o plik PHP: # echo http://localhost/index.php urlfile.txt # for i in {1..3}; do echo http://localhost/index.php urlfile.txt ; done # bombardment urlfile.txt 10 100 4 0 Wyniki tego testu powinny być zbliżone do zaprezentowanych na rysunku na stronie 29. Wydaj- ność serwowania treści dynamicznych jest analogiczna, jak w przypadku zawartości statycznej, ale wskaźnik transakcji jest dużo niższy. 27 Kup książkęPoleć książkę Szybsza Sieć z językami PHP, MySQL i JavaScript 28 Kup książkęPoleć książkę Rozdział 1. • Wprowadzenie do koncepcji Szybszej Sieci Komenda top uruchomiona w drugim oknie Terminalu pokazuje teraz na moim komputerze użycie obu dostępnych procesorów na poziomie 50 oraz wykorzystanie prawie 50 pa- mięci RAM (patrz rysunek na następnej stronie). 29 Kup książkęPoleć książkę Szybsza Sieć z językami PHP, MySQL i JavaScript Dowiedzieliśmy się, że jeśli nie ma zbyt wielu równoczesnych zapytań, sprzęt ten zapewnia dobrą wydajność w ograniczonej skali: 800 transakcji na sekundę przy plikach statycznych oraz około 200 transakcji na sekundę na stronach z zawartością generowaną dynamicznie. Skoro poznaliśmy lepiej bazowe osiągi serwera WWW, oparte wyłącznie na jego zasobach sprzętowych, możemy przystąpić do prawdziwego pomiaru szybkości i wydajności genero- wania przez niego treści dynamicznych w drodze profilowania. Przejdziemy teraz do instalacji i konfiguracji narzędzi pozwalających profilować i optymalizować kod PHP. Instalacja i konfiguracja użytecznych narzędzi Zainstalujemy i skonfigurujemy narzędzia do mierzenia wydajności bazy MySQL oraz pro- filowania kodu JavaScript. Zacznijmy jednak od instalacji i konfiguracji programu xdebug, debugera i profilera kodu PHP. Profilowanie kodu PHP — instalacja i konfiguracja programu xdebug Jak wspomnieliśmy, zaczniemy od instalacji i konfiguracji xdebug, narzędzia do debugowania i profilowania kodu PHP. To rozszerzenie można pobrać, zdekompresować, skonfigurować, skompilować i zainstalować w bardzo prosty sposób, używając dostarczanego z PHP narzędzia PECL (https://pecl.php.net/). W tym celu w oknie Terminalu kontenera należy wprowadzić następujące polecenia: # pecl install xdebug # echo -e zend_extension=$( php -i | grep extensions | awk {print $3} )/xdebug.so\n /etc/php.ini # echo -e xdebug.remote_enable = 1\n /etc/php.ini # echo -e xdebug.remote_enable_trigger = 1\n /etc/php.ini # echo -e xdebug.remote_connect_back = 1\n /etc/php.ini # echo -e xdebug.idekey = PHPSTORM\n /etc/php.ini # echo -e xdebug.profiler_enable = 1\n /etc/php.ini # echo -e xdebug.profiler_enable_trigger = 1\n /etc/php.ini # /etc/init.d/php-fpm restart # tail -50 /etc/php.ini 30 Kup książkęPoleć książkę Rozdział 1. • Wprowadzenie do koncepcji Szybszej Sieci Ostatnie wiersze pliku /etc/php.ini w Twoim kontenerze powinny teraz wyglądać następująco: Na koniec odśwież w swojej ulubionej przeglądarce stronę http://localhost:8181. Powinna teraz zawierać informację o załadowaniu rozszerzenia xdebug i przedstawiać się tak: 31 Kup książkęPoleć książkę Szybsza Sieć z językami PHP, MySQL i JavaScript Jeśli przewiniesz stronę do dołu, zobaczysz sekcję xdebug: Można też zauważyć, że są aktywne opcje profilowania: 32 Kup książkęPoleć książkę Rozdział 1. • Wprowadzenie do koncepcji Szybszej Sieci Skonfigurujemy teraz program PHPStorm w roli serwera debugowania. Pozwoli to używać tego środowiska IDE jako centrum sterowania sesjami debugera. Zanim zaczniemy, udostępnij cały folder fasterweb jako katalog główny serwera WWW, wpro- wadzając w kontenerze następujące polecenia: # rm /srv/www # ln -s /srv/fasterweb /srv/www # cd /srv/www Uruchom teraz program PHPStorm i ustaw jako katalog główny projektu folder fasterweb. W tym celu wybierz polecenie Create New Project from Existing Files (utwórz nowy projekt z istniejących plików), zaznacz Source files are in a local directory (pliki źródłowe znajdują się w lokalnym katalogu), jako Project root (katalog główny projektu) wybierz folder fasterweb, a następnie kliknij przycisk Finish. Po utworzeniu projektu wybierz z menu File (plik) polecenie Settings (ustawienia). W sekcji Languages Frameworks (języki programowania i frameworki) rozwiń pozycję PHP i kliknij Servers (serwery). Wprowadź odpowiednie informacje zgodnie ze specyfiką własnych usta- wień. Opcja Host ma zawierać adres IP kontenera Linux for PHP. Jeśli nie jesteś pewny co do tego adresu, w wierszu poleceń kontenera wprowadź następującą komendę: # ifconfig Na koniec zatwierdź ustawienia, klikając przyciski Apply (zastosuj) i OK: 33 Kup książkęPoleć książkę Szybsza Sieć z językami PHP, MySQL i JavaScript Teraz w menu Run (uruchom) poszukaj pozycji Edit Configurations… (edycja konfiguracji). Polecenie to można również znaleźć po prawej stronie okna środowiska IDE: Klikając zielony znak plus w lewym górnym narożniku okna możesz dodać pozycję PHP Remote Debug (zdalne debugowanie aplikacji PHP). Wybierz serwer, który dodałeś w poprzed- nim kroku i upewnij się, czy właściwość Ide key(session id) [klucz środowiska IDE( identyfi- kator sesji)] ma wartość PHPSTORM: 34 Kup książkęPoleć książkę Rozdział 1. • Wprowadzenie do koncepcji Szybszej Sieci Możesz już uaktywnić serwer debugowania środowiska PHPStorm, klikając w menu u góry po prawej stronie przycisk Listen to debugger connections (nasłuchuj połączeń z debugera), ustawić punkt przerwania, klikając wolne miejsce po prawej stronie dowolnego numeru wiersza pliku index.php oraz uruchomić narzędzie debugowania, korzystające z utworzonej w poprzed- nim kroku konfiguracji: Jeśli w górnym prawym narożniku ekranu brakuje paska narzędzi, należy w menu View (wi- dok) zaznaczyć pozycję Toolbar (pasek narzędziowy), a na ekranie pokażą się przyciski. Mają one też odpowiedniki w poleceniach menu Run. Otwórz teraz swoją ulubioną przeglądarkę i wczytaj tę samą stronę WWW, wprowadzając adres IP kontenera Docker: http://[IP_ADDRESS]/?XDEBUG_SESSION_START=PHP STORM. Można dostrzec, że przeglądarka wpadła w nieskończoną pętlę, oczekując na wznowienie lub zakończenie sesji debugowania (patrz pierwszy rysunek na następnej stronie). Zapewne zauważyłeś też, że w środowisku IDE pokazały się informacje dotyczące debugo- wania. Można stamtąd również kontrolować sesję i wznawiać wykonanie kodu. Zanim wznowisz wykonywanie aplikacji, wciskając w tym celu znajdujący się po lewej stronie ekranu zielony przycisk odtwarzania, sprawdź dokładnie zawartość zmiennych. Aby zakoń- czyć sesję debugowania, wystarczy kliknąć znajdujący się w tej samej grupie ikon różowy przycisk zatrzymania (patrz drugi rysunek na następnej stronie). 35 Kup książkęPoleć książkę Szybsza Sieć z językami PHP, MySQL i JavaScript Po zakończeniu sesji debugowania możesz zajrzeć do katalogu /tmp kontenera. W pliku o nazwie cachegrind.out powinny być dane wyjściowe profilera. Możesz bezpośrednio przejrzeć ten plik w edytorze tekstu albo posłużyć się wyspecjalizowanym oprogramowaniem, takim jak 36 Kup książkęPoleć książkę Rozdział 1. • Wprowadzenie do koncepcji Szybszej Sieci Kcachegrind, które zainstalujesz przy pomocy menedżera pakietów swojej dystrybucji systemu Linux. Oto przykładowe dane wyjściowe oglądane za pomocą programu Kcachegrind: Oprócz tych programów, których będziemy używać do optymalizacji przykładowych kodów w następnych rozdziałach, zawsze możesz dodatkowo korzystać z narzędzia do profilowania xdebug. A w następnym rozdziale przyjrzymy się właśnie bardziej zaawansowanym programom profilującym, między innymi Blackfire.io. Jeśli skończyłeś testowanie narzędzia xdebug, możesz z powrotem ustawić jako katalog główny serwera WWW folder r01: # rm /srv/www # ln -s /srv/fasterweb/r01 /srv/www # cd /srv/www Przyjrzyjmy się teraz narzędziom do testowania szybkości bazy SQL. Testowanie szybkości bazy SQL Chociaż serwer PostgreSQL bywa często uważany za najszybszy na świecie — zaraz po bazie danych Oracle — system zarządzania relacyjnymi bazami danych, to MariaDB (odgałęzie- nie serwera MySQL) wciąż należy do najszybszych i najpopularniejszych systemów bazoda- nowych, zwłaszcza w przypadku stosowania prostych zapytań SQL. Omawiając w tej książce optymalizacje języka SQL, będę się więc głownie odnosił do bazy MariaDB. Do sprawdzania wydajności serwera MariaDB będziemy używać narzędzia mysqlslap, dostar- czanego z serwerem MySQL od wersji 5.1.4. Aby rozpocząć testy, załadujemy najpierw de- monstracyjną bazę danych Sakila. W wierszu poleceń kontenera wprowadź następujące komendy: 37 Kup książkęPoleć książkę Szybsza Sieć z językami PHP, MySQL i JavaScript # wget -O sakila-db.tar.gz \ https://downloads.mysql.com/docs/sakila-db.tar.gz # tar -xzvf sakila-db.tar.gz # mysql -uroot sakila-db/sakila-schema.sql # mysql -uroot sakila-db/sakila-data.sql Po załadowaniu bazy danych możesz uruchomić pierwszy test porównawczy: # mysqlslap --user=root --host=localhost --concurrency=20 --number-of-queries=1000 --create-schema=sakila --query= SELECT * FROM film; --delimiter= ; --verbose --iterations=2 --debug-info Uzyskane wyniki powinny być podobne do tych: Testy możesz powtórzyć przy wyższym poziomie współbieżności celem porównania wyników: # mysqlslap --user=root --host=localhost --concurrency=50 --number-of-queries= 1000 --create-schema=sakila --query= SELECT * FROM film; --delimiter= ; --verbose --iterations=2 --debug-info Oto wyniki drugiego testu (patrz pierwszy rysunek na następnej stronie). Wyniki testów wskazują, że przy zapytaniu obejmującym całą tabelę zawierającą około 1000 pozycji wydajność drastycznie się zmniejsza, jeśli do serwera trafia ponad 50 jednoczesnych zapytań. O użyteczności tego typu testów oraz wielu innych, bardziej zaawansowanych narzędzi, przekonasz się podczas omawiania optymalizacji zapytań SQL w rozdziałach poświęconych temu zagadnieniu. 38 Kup książkęPoleć książkę Rozdział 1. • Wprowadzenie do koncepcji Szybszej Sieci Narzędzia dla programistów JavaScript W celu zmierzenia wydajności i profilowania kodu JavaScript zamieszczonego w tej książce bę- dziemy korzystać z narzędzi dla programistów, które są zintegrowane z przeglądarką Google Chrome. Chrome zapewnia rejestrację zdarzeń w linii czasu oraz śledzenie czasu wykony- wania operacji, co pozwala identyfikować „wąskie gardła” w kodzie JavaScript. Aby uaktywnić te narzędzia, kliknij symbol trzech kropek w prawym górnym narożniku przeglądarki i z pod- menu Więcej narzędzi wybierz pokazaną poniżej opcję Narzędzia dla programistów: 39 Kup książkęPoleć książkę Szybsza Sieć z językami PHP, MySQL i JavaScript Użycie profilera sprowadza się do kliknięcia przycisku nagrywania i odświeżenia profilowa- nej strony. Można potem przeanalizować wyniki w celu identyfikacji potencjalnych proble- mów z kodem: W rozdziałach 7., „Język JavaScript i programowanie sterowane zagrożeniami” oraz 8., „Funk- cyjny JavaScript”, w większym stopniu wykorzystamy to narzędzie do mierzenia wydajności i ogólnej optymalizacji kodu JavaScript. Podsumowanie W tym rozdziale zdefiniowałem pojęcie Szybszej Sieci, pokazałem, dlaczego jest ważne i jak odróżnić je od czystej wydajności. Opisałem, jak w celu pomiaru szybkości zainstalować i skon- figurować narzędzia do testów porównawczych i profilowania, a także pokazałem, jak z nich korzystać. W następnym rozdziale odkryjesz automatyczne profilowanie za pomocą narzędzia Blackfire.io. Nauczysz się też monitorowania, instalując i konfigurując zestaw programów TICK Stack oraz Grafana na fikcyjnym serwerze produkcyjnym, wdrożonym na drugim kontenerze Docker. 40 Kup książkęPoleć książkę Rozdział 1. • Wprowadzenie do koncepcji Szybszej Sieci Bibliografia [1] https://googleblog.blogspot.ca/2009/06/lets-make-web-faster.html [2] Bondi André B., Foundations of Software and System Performance Engineering: Process, Performance Modeling, Requirements, Testing, Scalability, and Practice, Addison-Wesley, Upper Saddle River 2015. [3] Meier J. D. et al., Performance Testing Guidance for Web Applications, Microsoft Corporation, Redmond 2007. [4] https://www.smashingmagazine.com/2015/11/why-performance-matters-part-2-perception- management/ [5] https://speakerd.s3.amazonaws.com/presentations/2ece664392024e9da39ea82e 3d9f1139/perception-performance-ux-confoo-3-4.pdf 41 Kup książkęPoleć książkę Szybsza Sieć z językami PHP, MySQL i JavaScript 42 Kup książkęPoleć książkę Skorowidz profilowanie, 50, 51, 53, 55 wtyczka PHP, 44, 47, 48 Blackfire Companion, 48 Bombard, 26 Bondi André, 18 buforowanie w przeglądarce, 195 zwrotne, 19 C call graph, Patrz: graf wywołań CDN, 188, 194, 196 implementacja, 197 child processes, Patrz: proces potomny ciąg znaków, 78 ciągła integracja, 57 Common Table Expression, Patrz: CTE Content Delivery Network, Patrz: CDN CTE, 135, 136, 140 currying, Patrz: funkcja rozwijanie czas obiektywny, 201 odczuwanie, 203 postrzeganie, 202 subiektywny, 202 zegarowy, 202 D Danger-Driven Development, Patrz: programowanie sterowane zagrożeniami dead code, Patrz: kod martwy demultiplekser zdarzeń, 105 Denial of Service, Patrz: atak DoS deskryptor pliku, 105 Docker, 20 Document Object Model, Patrz: DOM DOM, 160, 161, 162, 163 drzewo AST, 72 DOM, Patrz: DOM składni abstrakcyjnej, Patrz: drzewo AST zrównoważone, 114 dyrektywa KeepAlive, 182 Protocols, 184 E event loop, Patrz: pętla zdarzeń execution plan, Patrz: zapytanie SQL plan wykonania F Faster Web, Patrz: Szybsza Sieć First Meaningful Paint, Patrz: FMP A AB, 22 przełącznik -c, 23 -k, 23 -l, 23 -n, 23 Abstract Syntax Tree, Patrz: drzewo AST Alshanetsky Ilia, 185 animacja, 206 Apache Bench, Patrz: AB Arbezzano Gianluka, 59 atak DoS, 184 B Bakaus Paul, 203 baza danych, 113 B-drzewo, 114 Berg Anders, 190 biblioteka Amp, 112 FastClick, 206 POSIX Threads, Patrz: biblioteka pthreads pthreads, 102, 103 ReactPHP, 105, 106, 108, 110 Blackfire, 43 agent, 44, 45, 46 klient, 44, 46, 48 Kup książkęPoleć książkę Skorowidz first-class citizens, Patrz: funkcja:jako typ pierwszoklasowy FMP, 205 format gzip, 183 JSON, 145, 146 framework Symfony, 188, 189 funkcja Array.sort, 169 Array.splice, 169 callback, 171 CASE, 140 czysta, 168, 169 Date, 169 delete, 169 efekt uboczny, 168, 169 filter, 171 GROUPING SETS, 143 jako typ pierwszoklasowy, 169 JSON, 145, 146 LATERAL, 149, 150 map, 171 mapowanie, 169 Math.random, 169 microtime, 74 Object.assign, 169 okna, 141, 142 ORDER BY, 142 OVER, 141, 142 PARTITION BY, 141 przejrzysta referencyjnie, 87, 88, 168, 169 reduce, 171 RegExp.exec, 169 rekurencyjna, 88 rozwijanie, 169 upraszczanie, 167, 169 WITH, 135 WITH RECURSIVE, 135, 137 wywołanie częściowe, 169, 178 ogonowe, 172, 175, Patrz też: rekurencja potokowe, 178 zmienna, Patrz: zmienna funktor, 169 214 G generator, 94, 98, 177 asynchroniczny, 177 graf wywołań, 48 H heap, Patrz: sterta I indeks, 113, 114 InfluxDB, 58, 61 instrukcja eval, 156 pętli, 157 try-catch-finally, 157 with, 156 interfejs użytkownika, Patrz: UI Intermediate Representation, Patrz: kod źródłowy reprezentacja pośrednia interpreter, 153 invokable object, Patrz: obiekt wywoływalny IR, Patrz: kod źródłowy reprezentacja pośrednia iterator asynchroniczny, 177 J język deklaratywny, 87 ESI, 187 znacznik HTML, 188 imperatywny, 87 JavaScript, 151, 152 aplikacja, 164 kompresowanie plików, 164 minifikacja, 164 referencja, 163 szkodliwe konstrukcje, 155, 156, 157 tryb ścisły, 155, 159 wydajność, 151, 159, 164, 165 kompilowany dynamicznie, 72, 81 statycznie, 72, 75, 83 PHP 7, 72 kompilator, 72 SQL, 134, 135 Nowoczesny, Patrz: Nowoczesny SQL synchroniczny, 94 ścieżek XPath, 162 znaczników Edge Side Includes, Patrz: język ESI JMeter, 22 K Kamp Poul-Henning, 184, 190 klauzula FILTER, 149 GROUP BY, 143, 144 NOT IN, 121, 123 ROLLUP, 143, 144 UNION, 145 WHERE, 115 kod asynchroniczny, 96, 99, 102 Huffmana, 183 martwy, 72 PHP, Patrz: skrypt PHP refaktoryzacja, 81 skryptu PHP, 186 złożoność cyklomatyczna, 159, 170 źródłowy reprezentacja pośrednia, 72 kompilator AOT, 72 JIT, 74 L liczba, 77 licznik czasu, 105 linter, 159 lista dwukierunkowa, 113 M maszyna wirtualna, 20 menedżer procesów FastCGI, 185 PHP-FPM, 185, 187 metoda HPACK, 183 Kup książkęPoleć książkę Mishunov Denys, 19 model dokumentu obiektowy, 160 Modern SQL, Patrz: Nowoczesny SQL monada, 170 multitasking, Patrz: wielozadaniowość multithreading, Patrz: wielowątkowość MySQL wydajność, Patrz: wydajność bazy MySQL N nagłówek, 183 niezawodność, 18 Nowoczesny SQL, 133 O obiekt globalny, 152 iterowalny, 177 konwersja niejawna, 157 wywoływalny, 98 obiektowy model dokumentu, Patrz: DOM obietnica, 159, 177 operacja wejścia/wyjścia, 19, 94, 95, 105 opóźnienia, 94 operator potoku, 178 wiązania, 178 P packed array, Patrz: tablica upakowana pamięć operacyjna, 19 podręczna HTTP po stronie klienta, 194, 195 OPcache, 75 Zend OPcache, 186, 187 RAM, 19 realokacja, 77 parent process, Patrz: proces macierzysty Skorowidz partial application, Patrz: funkcja wywołanie częściowe pasek postępu, 206 performance schema, Patrz: wydajność serwera schemat pętla zdarzeń, 105 PHP, 185 skrypt, Patrz: skrypt PHP plik protokół HTTP, 181 HTTP/2, 183, 184 SPDY, 181, 182, 183 TLS, 181 przeorganizowanie, 160 przepustowość, 18 przerysowanie, 160 przypisanie pojedyncze statyczne, deskryptor, Patrz: deskryptor 72 R RDBMS, 134 reflow, Patrz: przeorganizowanie rekurencja, 172 relational database management systems, Patrz: RDBMS repaint, Patrz: przerysowanie responsywność, 18 reverse proxy caching, Patrz: buforowanie zwrotne S samozłączenie, 136 unikanie, 142 Schmidt Douglas, 105 self-join, Patrz: samozłączenie serwer Apache, 185 Boa, 185 buforowania wstecznego, 190 gniazd, 108 lighttpd, 185 MariaDB, 37, 146 MySQL, 37 NGINX, 185 PostgreSQL, 37, 146, 147 pośredników HTTP, 188 thttpd, 185 Tux, 185 Varnish Cache, 188, 189, 190, 191, 192 sieć dystrybucji treści, 188 szybsza, Patrz: Szybsza Sieć wydajność, Patrz: wydajność sieci 215 pliku index.php, 25 polecenie docker commit, 21, 22 docker exec, 23 docker run, 21 proces, 102 program AB, Patrz: AB Blackfire.io, Patrz: Blackfire Chronograf, 58, 59 cURL, 95 DBT2, 125 ESLint, 159 Grafana, 59, 61 Graphite, 59 JSLint, 159 Kapacitor, 58, 59 mysqlslap, 37, 125 PageSpeed Insights, 197, 198 phpMyAdmin, 134 phpPgAdmin, 147, 148, 149 PHPStorm, 33, 35 Prettier, 159 Prometheus, 59 Squid, 190 SysBench, 129 Telegraf, 58, 59, 61 TICK Stack, 58, 59, 68 Travis CI, 57 Webpack, 164 xdebug, 30, 37 programowanie asynchroniczne, 99, 102, 106, 177 funkcyjne, 87, 88, 167, 171, 177, 178 niezmienność, 170 sterowane zagrożeniami, 151 promise, Patrz: obietnica Kup książkęPoleć książkę Skorowidz Siege, 22, 26 parametr -b, 26 -c, 26 -r, 26 skalowalność, 18, 19 skrypt parallel-download.php, 106 PHP, 30, 186 scalability.php, 110 tcp-chat.php, 108 skrypt PHP, 186 słowo kluczowe profilowanie, 50, 51, 53, 55 async, 177 await, 177 const, 170 EXPLAIN, 115 let, 155, 170 new, 155 var, 155, 170 Smørgrav Dag-Erling, 190 spamiętywanie, 88, 91 SQL język, Patrz: język SQL Nowoczesny, 133 zapytanie, Patrz: zapytanie SQL stack, Patrz: stos Static Single Assignment, Patrz: przypisanie pojedyncze statyczne sterta, 72 Stogow Dmitrij, 72 stos, 72, 172 strumień, 182 system zarządzania relacyjnymi bazami danych, Patrz: RDBMS szereg czasowy, 58 Szybsza Sieć, 17, 18 parametry, 19 Ś środowisko IDE, 33 T tablica, 75 tail recursion, Patrz: rekurencja ogonowa 216 tail-call optimization, Patrz: TCO tail-calling, Patrz: funkcja wywołanie ogonowe TCO, 172, 173, 174 technologia wielowątkowa, 21 test bazy MySQL, 30 języka PHP 7, 71, 72 pierwsze wyrenderowanie elementu znaczącego, Patrz: FMP serwera pomiar, 22, 23, 24, 25, porównawczy, 125, 129 wydajnościowy, 18, 56, 57, 58, 59, 68, 118, 119, 125, 129 26, 27 schemat, 120 WWW, 22, 59 sieci, 20 zapytań SQL, 113, 114, 118, 120 wyrażenie tablicowe nierekurencyjne, 135 rekurencyjne, 135, 136, 140 wspólne, Patrz: CTE wzorzec Reaktor, 105 Z zapytanie, 136, 137 SQL optymalizacja, 114, 117, 118, 120, 123, 124 plan wykonania, 114, 115, 123, 124, 138 wydajność, Patrz: wydajność zapytań SQL zdarzenie connection, 108 demultiplekser, 105 złączenie, 136 zmienna deklaracja, 155, 170 globalna, 152 unikanie, 152, 154 lokalna, 155 przekazywanie przez referencje, 79 typowana silnie, 74 słabo, 72 znacznik HTML, 188 throbber, Patrz: wskaźnik aktywności timer, Patrz: licznik czasu time-series, Patrz: szereg czasowy tryb chroot, 20 odłączony, 21 Tsung, 22 typ dynamiczny, 72, 81 wnioskowanie, 72 type inference, Patrz: typ wnioskowanie U UI, 19 projektowanie, 205 user interface, Patrz: UI usługa blokada, Patrz: atak DoS Cloudflare, 198 W Walter Stéphanie, 19 wielowątkowość, 23, 93, 102, 105 wielozadaniowość, 93, 102, 105 Winand Markus, 134 window function, Patrz: funkcja okna wnioskowanie o typie, Patrz: typ wnioskowanie wskaźnik aktywności, 206, 207, 208, 210 wydajność, 18, 19, 20, 201, Patrz też: test wydajnościowy aplikacji, 20, 204, 205, 207 optymalizacja, 72, 75, 77, 79, 81, 83, 86 PHP, 71 Kup książkęPoleć książkę
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

Szybsza Sieć z językami PHP, MySQL i JavaScript. Zaawansowane aplikacje z wykorzystaniem najnowszych technologii
Autor:

Opinie na temat publikacji:


Inne popularne pozycje z tej kategorii:


Czytaj również:


Prowadzisz stronę lub blog? Wstaw link do fragmentu tej książki i współpracuj z Cyfroteką: