<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"><channel><title>b4rtaz.blog :: komentarze do wpisu &quot;Flush concept – strumieniowy system szablonów, kod roboczy&quot;</title><link>http://b.nano2.pl/2008/03/26/flush-concept-strumieniowy-system-szablonow-kod-roboczy/</link><description>Wpisy z dziennika internetowego Jogger, wspomaganego przez Jabbera</description><lastBuildDate>Wed, 08 Sep 2010 17:58:03 +0200</lastBuildDate><generator>JoggerPL</generator><item><title>BTM</title><link>http://b.nano2.pl/2008/03/26/flush-concept-strumieniowy-system-szablonow-kod-roboczy/#c1119516</link><description>Chwilkę, nie zgodzę się z Tobą już we wstępie, zanim przeczytam całość ;-)

Oczywiście, że dane np. z PHP&amp;#8217;owego echo wysyłane są strumieniowo &amp;#8211; to, że na końcu masz czas egzekucji, oznacza, że tyle czasu zajęło skryptowi dojście do tego miejsca, nie oznacza to, że czekał aż tyle i dopiero wtedy wysłał. 

Przykład? Proszę &amp;#8211; zobacz sobie skrypt wysyłający plik &amp;#8222;download&amp;#8221; do przeglądarki &amp;#8211; najpierw wysyła nagłówek a potem odczytuje plik i wysyła na standardowe wyjście &amp;#8211; jeżeli będziesz miał wolne łącze to plik będzie leciał pomału i cały czas będzie żył wątek PHP który do Ciebie pcha plik!</description><pubDate>Wed, 26 Mar 2008 20:27:21 +0100</pubDate><guid>http://b.nano2.pl/2008/03/26/flush-concept-strumieniowy-system-szablonow-kod-roboczy/#c1119516</guid></item><item><title>b4rtaz</title><link>http://b.nano2.pl/2008/03/26/flush-concept-strumieniowy-system-szablonow-kod-roboczy/#c1119522</link><description>BTM: Wysyłanie pliku ma się do tego nijak. Miałem na myśli systemy generowania treści (fora, portale itd). Proces wysyłania zaczyna się dopiero po wywołaniu metody display() klasy szablonów.
A dopiero w tej metodzie występuje echo, więc dopiero wtedy zaczyna się proces wysyłania sparsowanego szablonu na wyjście. Nie ważne czy ob_flush() jest włączone.</description><pubDate>Wed, 26 Mar 2008 20:30:33 +0100</pubDate><guid>http://b.nano2.pl/2008/03/26/flush-concept-strumieniowy-system-szablonow-kod-roboczy/#c1119522</guid></item><item><title>BTM</title><link>http://b.nano2.pl/2008/03/26/flush-concept-strumieniowy-system-szablonow-kod-roboczy/#c1119524</link><description>Zakładając, że używasz takiej zbiedzonej klasy szablonów, to tak ;-)

Ale mówię &amp;#8211; proste echo już wysyła strumieniowo &amp;#8211; nawet najprostsza pętla while(1) { echo &amp;#8216;!&amp;#8217;; } będzie Ci wysyłać do przeglądarki wykrzykniki, a skrypt przecież nie zakończył działania ;-)</description><pubDate>Wed, 26 Mar 2008 20:32:11 +0100</pubDate><guid>http://b.nano2.pl/2008/03/26/flush-concept-strumieniowy-system-szablonow-kod-roboczy/#c1119524</guid></item><item><title>b4rtaz</title><link>http://b.nano2.pl/2008/03/26/flush-concept-strumieniowy-system-szablonow-kod-roboczy/#c1119528</link><description>BTM: Otóż nie będzie. Wypróbuj sobie oto ten kod:


echo &quot;1&quot;
sleep(3); // Trzy sekundy pauzy.
echo &quot;2&quot;;


Należy włączyć ob_flush(), który domyślnie jest wyłączony.

PS. trochę nieładnie, ale edytowałem wcześniejszego posta &amp;#8211; swojego ofc. Warto doczytać. ;)</description><pubDate>Wed, 26 Mar 2008 20:35:15 +0100</pubDate><guid>http://b.nano2.pl/2008/03/26/flush-concept-strumieniowy-system-szablonow-kod-roboczy/#c1119528</guid></item><item><title>BTM</title><link>http://b.nano2.pl/2008/03/26/flush-concept-strumieniowy-system-szablonow-kod-roboczy/#c1119532</link><description>Nie wiem jak z CLI ale:

[btm@~] echo &amp;#8216;&amp;#8217; | php5

Zasypuje mi ekranik 1&amp;#8217;dynkami a nie ma tu żadnego ob_start() &amp;#8211; ale mówię, może CLI ma inaczej to rozwiązane.

Dla pewności (ob&amp;#8217;owej):

[btm@~] echo &amp;#8216;&amp;#8217; | php5
Array
(
)
[btm@~] echo &amp;#8216;&amp;#8217; | php5
Array
(
    [level] =&gt; 1
    [type] =&gt; 1
    [status] =&gt; 0
    [name] =&gt; default output handler
    [del] =&gt; 1
)</description><pubDate>Wed, 26 Mar 2008 20:38:25 +0100</pubDate><guid>http://b.nano2.pl/2008/03/26/flush-concept-strumieniowy-system-szablonow-kod-roboczy/#c1119532</guid></item><item><title>b4rtaz</title><link>http://b.nano2.pl/2008/03/26/flush-concept-strumieniowy-system-szablonow-kod-roboczy/#c1119557</link><description>BTM: CLI to inna bajka. [:

Zakładając, że używasz takiej zbiedzonej klasy szablonów [...]

Nie do końca takiej zbiedzonej. Bo praktycznie wszystkie klasy szablonów jakie istnieją działają na tej samej zasadzie. Różnią się głównie implementacją &amp;#8211; w poprzednim wpisie o tym pisałem.</description><pubDate>Wed, 26 Mar 2008 20:56:46 +0100</pubDate><guid>http://b.nano2.pl/2008/03/26/flush-concept-strumieniowy-system-szablonow-kod-roboczy/#c1119557</guid></item><item><title>talen</title><link>http://b.nano2.pl/2008/03/26/flush-concept-strumieniowy-system-szablonow-kod-roboczy/#c1119784</link><description>Projekt jest jak najbardziej szczytny i doskonale rozumiem Twoje intencje, ale wydaje mi się, że gra nie jest warta świeczki. Dlaczego ?

1. Wprowadzenie kompresji Gzip jest niemożliwe.
2. Przechwytywanie wyjątków i wyświetlenie ładnej strony jest niemożliwe (choć aktualnie Smarty też tego nie robią).
3. Porównywalną poprawę wydajności uzyskasz przy wykorzystaniu cache&amp;#8217;a stron &amp;#8211; a korzyści będą z takiego rozwiązania większe.
4. Optymalizacja transferu (trochę ad.1) &amp;#8211; zobacz w jaki sposób protokół TCP/IP wysyła dane, a powinieneś dojść do wniosku, że lepiej jest wysłać wszystko za jednym razem.

Opisywaną przez Ciebie funkcjonalność można łatwo zaimplementować w Smartach (zamiast stringów przekazać obiekty, które dopiero kiedy będziemy potrzebować konkretnych danych będą robiły zapytaniado bazy) i uzyskać bardzo podobną funkcjonalność.

Osobiście bardziej poszedł bym w kierunku eksperymentu z nagłówkiem &amp;#8216;Expires&amp;#8217; i składaniu strony przez JavaScript (z opcją optymalizacji pod przeglądarki).

Generalnie &amp;#8211; pomysł naprawdę dobry, ale pójście w kierunku nowego systemu szablonów jest chyba niepotrzebne &amp;#8211; większą &amp;#8216;skuteczność&amp;#8217; (popularyzację pomysłu) chyba uzyskał byś jeśli byłby to plugin do Smartów lub opis techniki korzystania z systemu szablonów który pozwoli na wcześniejsze rozpoczęcie zwracania kodu strony.</description><pubDate>Wed, 26 Mar 2008 23:08:05 +0100</pubDate><guid>http://b.nano2.pl/2008/03/26/flush-concept-strumieniowy-system-szablonow-kod-roboczy/#c1119784</guid></item><item><title>b4rtaz</title><link>http://b.nano2.pl/2008/03/26/flush-concept-strumieniowy-system-szablonow-kod-roboczy/#c1119896</link><description>talen: Muszę się przyznać, że już od samego początku miałem takie wrażenie, że może być &amp;#8222;nie warto&amp;#8221;.

Samo istnienie takiej klasy raczej nie spowoduje, że nagle wszyscy zaczną przepisywać swoje aplikacje. Jak już to wypadało by ją zaprezentować z jakimś mechanizmem &amp;#8211; np. CMS&amp;#8217;em.

Zaimplementować do Smarty? Jest to nie możliwe &amp;#8211; strasznie różniąca się mechanika. Góra to można by, nazwy metod czy tagów ala Smarty zaimplementować.

1. Z gzip&amp;#8217;em to nie do końca tak wiadomo. Jako że jest to algorytm kompresji słownikowej z algorytmem Hoffmana. Na zasadzie własnego budowy drzewa oraz własnego słownika można by ten problem pominąć. Chociaż jakość kompresji by spadła.
2. Tak, to jest nie do ominięcia.
4. Tutaj nie wiem co masz na myśli. Przeglądarka zamyka socket połączenia dopiero po zakończeniu pobierania (w HTTP 1.0 to na znak zamknięcia socketu na serwerze) z HTTP 1.1 wystarczył by Keep-alive.</description><pubDate>Thu, 27 Mar 2008 07:41:58 +0100</pubDate><guid>http://b.nano2.pl/2008/03/26/flush-concept-strumieniowy-system-szablonow-kod-roboczy/#c1119896</guid></item><item><title>talen</title><link>http://b.nano2.pl/2008/03/26/flush-concept-strumieniowy-system-szablonow-kod-roboczy/#c1120499</link><description>Ad1. O ile gzip jest realizowany z poziomu php, a nie gdzieś później (serwer WWW, serwer cache).
Ad4. Pakiet = nagłówki + ilość danych. Nagłówki idą zawsze, a ilość danych zmienia się. To trochę naciągana teoria &amp;#8211; wpływ na szybkość transmisji jest marginalny, ale mimo wszystko: lepiej przegrywać jeden duży plik, niż wiele małych.</description><pubDate>Thu, 27 Mar 2008 23:11:10 +0100</pubDate><guid>http://b.nano2.pl/2008/03/26/flush-concept-strumieniowy-system-szablonow-kod-roboczy/#c1120499</guid></item></channel></rss>