Niezalogowany [ logowanie ]
Subskrybuj kanał ATOM Kanał ATOM

Autor wpisu: matipl, dodany: 13.01.2017 12:43, tagi: php

W pewnym momencie życia naszej aplikacji przychodzi taka chwila, że staje się dla nas ważna wydajność. Często jest to powiązane ze wzrostem ilości zapytań/użytkowników lub danych w bazie. Ale nie zawsze wiemy jak zabrać się do pomiarów naszej aplikacji (obciążenia procesora, zużycie pamięci, czasu przebiegu).

W odległych czasach często obudowywano fragmenty kodu PHP w taki sposób:

$start = microtime(true);
someFunction();
$end = microtime(true);
$executionTime = number_format($end - $start, 10);

Dzięki temu uzyskiwaliśmy pewną wiedzę na temat czasu wykonywania metod, funkcji, fragmentów kodu. W podobny sposób uzyskiwano informacje np. odnośnie pamięci. Następnie zapisywaliśmy dane do bazy, pliku etc. Całość jednak powodowała dość duży narzut prac, aby sprawdzić wydajność aplikacji, a jednocześnie w pewnych sytuacjach powodowała zwiększenie złożoności kodu (dodatkowe modele, biblioteki, klasy).

Xdebug

Jeśli ktoś znał Xdebuga i miał możliwość włączenia na serwerach developerskich/testowych rozszerzeń PECL bardzo szybko przenosił się na to rozwiązanie. Profilowanie w Xdebug jest bardziej uniwersalne, nie musimy osobno „badać” każdej metody, ale robi to sam Xdebug na poziomie wykonywania kodu PHP i zbiera naprawdę sporo informacji o wszelakim wykonanymi kodzie. Wystarczy tylko odpowiednio skonfigurować mechanizm profilowania w php.ini:

xdebug.profiler_enable = 1
xdebug.profiler_output_dir = /tmp/profiler

Po każdym request do aplikacji otrzymujemy plik cachegrind.out we wskazanym katalogu, który możemy przenalizować za pomocą narzędzi graficznych, np. takim jak KCachegrind. Jest to dobre rozwiązania na maszynie developerskiej, gdzie jest ograniczona ilość użytkowników, możemy kontrolować ilość requestów, ponieważ w innym wypadku bylibyśmy zawaleni przez pliki z proflowania. Poza tym narzędzie Xdebug nie jest zalecane do zastosowań produkcyjnych. Co w takim wypadku?

XHProf (Hierarchical Profiler) / XHGui

XHProf został stworzony przez developerów Facebooka i udostępniony publicznie w marcu 2009 roku. Tak jak Xdebug jest również napisane w C jako PHP Zend Extension (PECL). Ale zadaniem XHProf jest wyłącznie profilowanie naszej aplikacji (zbiera takie metryki jak czas, czas CPU czy użycie pamięci). Został stworzony z myślą, aby działać na środowiskach produkcyjnych (stabilność, mały narzut na zbieranie informacji). XHProf dostarcza również prosty mechanizm do tworzenia raportów HTML, w którym możemy przeglądać rezultaty profilowania, jak również zobaczyć graf przejścia. Rozszerzenia znajduje się w oficjalnym katalogu PECL, dlateg aby zainstalować XHProf wystarczy wydać komendę:

pecl install xhprof

Bazując wyłącznie na XHProf możemy wykorzystać dość toporny sposób na zbieranie informacji:

//operations, collecting
xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);
for ($i = 0; $i < = 1000; $i++) {
    $a = $i * $i;
}
$xhprof_data = xhprof_disable();

//writing
$XHPROF_ROOT = "/tools/xhprof/";
include_once $XHPROF_ROOT . "/xhprof_lib/utils/xhprof_lib.php";
include_once $XHPROF_ROOT . "/xhprof_lib/utils/xhprof_runs.php";

$xhprof_runs = new XHProfRuns_Default();
$run_id = $xhprof_runs->save_run($xhprof_data, "xhprof_testing");

//URI with data:
//http://127.0.0.1/xhprof/xhprof_html/index.php?run={$run_id}&source=xhprof_testing

Myślicie, że to skomplikowane i dużo nie ułatwia? Zgadzam się! Dlatego od razu polecam zapoznać się z XHGui, który cały proces upraszcza i niweluje tworzenie wielu małych plików dostępnych pod unikatowym ID, bez których nie jesteśmy w stanie szybko zapoznać się z analizą.

XHGui napisany jest w PHP i jest to forma nakładki na profiler. Cały kod XHGui umieszczamy w miejscu dostępnym tylko dla nas przez WWW i robimy zmianę w php.ini (lub przeciążamy zmienną w naszym kodzie):

Czytaj dalej tutaj (rozwija treść wpisu)
Czytaj dalej na blogu autora...

Autor wpisu: batman, dodany: 03.01.2017 04:00, tagi: internet

Pierwszy artykuł na blogu Hello World! pojawił się 14 września 2009 roku. Od tamtej pory popełniłem 630 artykułów (z dzisiejszym będzie 631) – jedne lepsze, inne gorsze. Część postów była celowo kontrowersyjna, część napisana na kolanie, pojawiło się kilka konkursów, w których rozdawałem książki, artykuły o Windows Azure pozwoliły mi pojechać do Las Vegas na konferencję Microsoftu, a dzięki podjęciu kilku tematów, otrzymałem wiele interesujących ofert współpracy. Później przyszła niemoc twórcza i na blogu pojawiały się luźne tematy, związane z muzyką, podróżami i innymi przyziemnymi... [[ This is a content summary only. Visit my website for full links, other content, and more! ]]

Autor wpisu: JoShiMa, dodany: 22.12.2016 00:50, tagi: mysql, php

Pisałam ostatnio o tym jak można edytować projekt zdalnie, jednak doskonale wiem, że to nie jest najlepsze rozwiązanie i o wiele lepiej jest pracować na lokalnym serwerze a dopiero ukończoną wersję umieszczać na serwerze produkcyjnym. Do pracy na serwerze lokalnym potrzebny jest pakiet oprogramowania zwany w skrócie LAMP. L jak Linux A jak Apache (serwer […]

Autor wpisu: zleek, dodany: 13.12.2016 09:00, tagi: css

Today I have found an interesting code snippet with changing layout of radio buttons using only css. Snippet is available on codepen. All code and view is available on the codepen. However I put a code snippets here in case

Autor wpisu: batman, dodany: 11.12.2016 15:13, tagi: internet

Dobrych kilka lat temu, lubiłem zaglądać na polskie strony poświęcone tzw. współczesnym technologiom, ponieważ oferowały one coś więcej niż suche fakty i oderwane od rzeczywistości „testy”. Dosyć często można było znaleźć rzeczowa opinię, kompletny test usługi, wartościowe komentarze do opisywanej usługi. Taki stan rzeczy utrzymywał się dosyć długo i spośród dostępnych źródeł informacji na temat nowych technologii, miałem co najmniej kilkanaście polskich. Do czasu. W mediach tzw. mainstreamu zaobserwowałem to już dawno i liczyłem, że nigdy nie trafi do blogów o tematyce IT.... [[ This is a content summary only. Visit my website for full links, other content, and more! ]]

Autor wpisu: cichy, dodany: 03.12.2016 06:25, tagi: css, javascript

Dziś wszystkie strony jakie powstają powinny być „responsywne” i wyświetlać się poprawnie na wszystkich urządzeniach począwszy od telewizorów / telebimów a na telefonach skończywszy. Takie podejście w 2016 roku nie powinno nikogo dziwić, jednak co ze starymi projektami, no cóż trzeba je przepisać według nowych zasad. Właśnie podczas pracy nad nową wersją jednego z projektów, którym zajmuje się w pracy, przyszło mi zmierzyć się z koniecznością użycia różnego kodu JavaScript w zależności od aktualnych styli używanych przez twitter bootstrap. W tym poście chciałbym przedstawić pokrótce jak można to osiągnąć za pomocą biblioteki Responsive Bootstrap Toolkit.

Biblioteka do której link umieściłem we wstępie jak sam jej opis mówi, jest narzędziem pozwalającym na łatwe kontrolowanie przepływu kodu JavaScript w zależności od aktualnie aktywnego „breakpointu”.

Można by zapytać czym w takim razie są owe breakpointy postaram się wyjaśnić to jak najdokładniej potrafię. Wyobraźmy sobie sytuację w której piszemy stronę internetową, jednak aby wyświetlała się ona poprawnie musimy mieć mechanizm pozwalający na ukrycie lub wyświetlenie niektórych elementów tylko i wyłącznie dla określonego rozmiaru ekranu, jest to naturalna potrzeba i większość frameworków CSS takich jak bootstrap taki mechanizm posiada.

Przykładowe breakpointy mogłyby wyglądać tak:

@media (max-width: 180px) {
.pokaz-dla-malych-urzadzen { display: block; }
.ukryte-na-malych-urzadzeniach { display: none; }
}
@media (min-width: 181px){
.pokaz-dla-malych-urzadzen { display: none; }
.ukryte-na-malych-urzadzeniach { display: block; }
}

podsumowując powyższy zapis oznacza, że dla ekranu o szerokości <=180 pikseli elementy z klasą pokaz-dla-malych-urzadzen mają ustawioną właściwość display na block dla ekranów o szerokości >=181 pikseli te same elementy będą ukryte (display:none) w zasadzie to cała teoria i magia owych breakpointów.

Przejdźmy zatem do rzeczy, co z kodem JavaScript, tutaj wkracza przytoczona przeze mnie biblioteka Responsive Bootstrap Toolkit.

Myślę że nie ma sensu rozwodzić się nad tym jak ta biblioteka działa, najważniejsze to stwierdzić o niej 2 zasadnicze rzeczy: po pierwsze biblioteka naprawdę działa, po drugie choć w nazwie biblioteki widnieje bootstrap to możemy jej używać z każdym frameworkiem CSS. Na stronie repozytorium, widnieją doskonałe przykłady tego jak biblioteki używać, więc uznałem, że nie ma sensu w przepisywaniu tego jeszcze raz.

Autor wpisu: batman, dodany: 12.11.2016 10:38, tagi: php

Na rynku mamy dostępny szereg narzędzi do zarządzania projektami. Nietrudno znaleźć firmę, która dostarczy kompleksowe rozwiązanie, wystarczy tylko za nie zapłacić. Jeśli mamy do dyspozycji duży budżet, wówczas koszt takiego narzędzia nie zrobi na nas wrażenia. Sytuacja wygląda zupełnie inaczej, gdy chcemy zapanować nad niewielkim zespołem, a nasza firma (lub grupa znajomych) nie jest gotowa finansowo i organizacyjnie na rozwiązanie klasy enterprise. Na szczęście z pomocą przychodzą darmowe narzędzia, które wymieniłem w tytule – Trello, Toggl, Bitbucket oraz Bugsnag. Slack stanowi tutaj... [[ This is a content summary only. Visit my website for full links, other content, and more! ]]
Wszystkie wpisy należą do ich twórców. PHP.pl nie ponosi odpowiedzialności za treść wpisów.