Czy naprawdę słabsza wydajność języków programowania jest naprawdę złą rzeczą? [Zamknięte]


18

Oto jak to widzę.

Jest kod maszynowy i to wszystko, czego potrzebują komputery, aby coś uruchomić. Komputery nie dbają o języki programowania. Nie ma dla nich znaczenia, czy kod maszynowy pochodzi z Perla, Pythona czy PHP. Języki programowania nie obsługują komputerów. Służą programistom.

Niektóre języki programowania działają wolniej niż inne, ale niekoniecznie dlatego, że coś jest z nimi nie tak. W wielu przypadkach dzieje się tak dlatego, że robią więcej rzeczy, które programiści musieliby zrobić (tj. Zarządzanie pamięcią) i robiąc te rzeczy, są lepsi w tym, co powinni robić - służą programistom.

Czy zatem wolniejsze działanie języków programowania jest naprawdę złe?


22
w jaki sposób wolniej? czas kompilacji, środowisko uruchomieniowe, czas zapisu, inne parametry?
Matt Ellen

1
Chciałbym tylko zauważyć, że szybkie komputery i kompilatory, które generują wydajny język maszynowy, są oczywiście dobre, z wyjątkiem tego, że pozwalają programistom być bardziej leniwymi. Gdy produkty mają problemy z wydajnością, często wynika to z założenia, że ​​pewne rzeczy są „szybkie”, takie jak zarządzanie pamięcią i powiadomienia.
Mike Dunlavey

5
@Mike: Alternatywnie, programy działają wolno z powodu postawy, którą Jeff podsumował ostatnio na swoim blogu: „Algorytmy są dla ludzi, którzy nie wiedzą, jak kupić pamięć RAM”. Jeśli program działa w czasie sześciennym zamiast O (N log n), moc komputera naprawdę nie ma znaczenia dla dużych problemów.
David Thornley,

2
@David: nie możemy uzyskać więcej niż 512 GB pamięci RAM na naszym serwerze, dlatego musimy teraz pisać lepsze algorytmy.
JBRWilkinson

2
Zależy od tego, gdzie są wąskie gardła. Jeśli program czeka na operacje we / wy 99,9% czasu, nie ma znaczenia, czy sam program jest 10 razy wolniejszy niż napisany w ręcznie wykonanym asemblerze.

Odpowiedzi:


50

Nie sądzę, że to automatycznie źle. Python działa wolniej niż C ++, ale gdy oba są wystarczająco szybkie , Python może być najlepszym wyborem dla danego problemu, nawet jeśli jest wolniejszy .

To zawsze jest kompromis. W przypadku małych, jednorazowych zadań pisanie skryptów w języku Python jest znacznie szybsze niż w przypadku aplikacji C ++, która robi to samo (typowym przykładem dla mnie jest przetwarzanie wsadowe tekstu lub chodzenie po drzewie katalogów i robienie czegoś z plikami), i tak naprawdę nie dbam o to, czy zajmuje to 10 ms, czy 1000 ms, mimo że jest 100 razy wolniejszy, ponieważ pisanie i testowanie może zająć połowę czasu.

Oczywiście byłoby miło, gdyby Python był tak szybki jak C ++, więc w tym sensie zgadzam się z twoim stwierdzeniem, że „slow = bad”. Ale wtedy mam raczej potężny język, który działa tak szybko, jak chcę, nie robiąc pewnych rzeczy (powiedzmy, sprawdzanie granic tablic na surowych tablicach), o ile pozwala mi zdecydować, kiedy dokonać tego kompromisu (powiedzmy, używając std: :wektor).


Nie powiedziałem, że „wolno = źle”. Niemniej jednak dziękuję za podzielenie się swoimi przemyśleniami.
Emanuil Rusev

9
+1 „wystarczająco szybko” Spowolnienie jest złe, gdy wdrożenie jest „zbyt wolne / zbyt szybkie”. Za każdym razem to nie ma znaczenia.
Kirk Broadhurst

4
+1 „wystarczająco szybko”. W zależności od tego, co robisz, czas programisty może być o wiele większy niż potencjalne oszczędności czasu realizacji.
Jonas

3
@Jonas: prawie nigdy tak nie jest, po prostu widzisz wynagrodzenie programisty; nie widzisz użytkowników frustrujących, gdy aplikacja czołga się z krzykiem, krzycząc „daj spokój, jak ciężko to, kupo gówna”. Gdyby opublikowali TCO wolnego oprogramowania i szybkiego oprogramowania - zobaczyłbyś, że twoje priorytety uległy natychmiastowej zmianie.
gbjbaanb

1
@mcmcc: Nie mówiłem o językach, ale o wrażeniach użytkowników. Po kliknięciu przycisku coś musi się wydarzyć od razu. Po uruchomieniu obliczeń dobrze jest, jeśli zajmie to trochę czasu, o ile będzie przydatny wskaźnik postępu.
Jonas,

18

Całkiem proste - powolność jest złą rzeczą

gdy program wymaga określonego poziomu wydajności

ponieważ bez tej wydajności nie spełniasz wymagań.

Może to być wszystko, od aplikacji biznesowej, która musi przetwarzać zapytania w dopuszczalnym czasie, po grę, która musi wyświetlać wiele informacji na ekranie w dowolnym momencie. Jeśli program nie jest wystarczająco szybki, to po prostu nie działa .


2
... i często wymagania są niepisane w ciągu „więcej niż X sekund, aby pobrać stronę, co powoduje, że przeciętny użytkownik witryny przechodzi na inną stronę”
JBRWilkinson

1
@JBRWilkinson tak, lub jeśli system jest zbyt wolny, nagle pojawią się nowe wymagania dotyczące wydajności;)
Kirk Broadhurst

12

Spójrz na to w ten sposób: komputery są głupie . Postępują zgodnie z instrukcjami, które może wykonać każdy kretyn ze stołem triggera. Uparcie nalegają na robienie tego, co powiedziałeś, zamiast tego, co miałeś na myśli. Ani strzępu kierunku i intuicji. To jest straszne.

JEDNA rzecz, do której zmierza komputer, jest szybka. Naprawdę! Knucklehead z szafką na dokumenty może wykonać to samo zadanie, co baza danych. Jakiś facet rozkręcający prasę drukarską mógłby zrobić to, co robi Apache. Poważnie! I tak się stało przez setki lat. Dlaczego komputer jest dobry na WSZYSTKO, to jego szybkość.

Tak więc język programowania, który (w porównaniu z innymi językami) nie wykorzystuje, nie ma TYLKO korzyści z używania komputerów.


13
Brakuje Ci jednego ważnego elementu : komputery są głupie, szybkie i uzasadnione , podczas gdy erratum humanum est. W wielu przypadkach ta przewidywalność jest o wiele ważniejsza niż zwykła prędkość.
SK-logic

5
Każdy język programowania wykorzystuje prędkość komputera. Python na jednym z oryginalnych komputerów OLPC robi rzeczy znacznie szybciej niż ja ręcznie. Pamiętaj, że mój obecny laptop (kupiony dwa lata temu, a więc nie na topie) jest w większości w przybliżeniu od stu tysięcy do miliona razy mocniejszy niż mój pierwszy komputer domowy.
David Thornley

4
Nie wspominając o tym, że komputer zużywa dużo energii (szczególnie serwery), i że odczuwa się niepokój związany ze zużyciem energii (zielona technologia) i że zwykle szybszy program robi więcej przy takiej samej ilości energii jak wolniejszy program, więc liczy się (szczególnie na serwerach, które zużywają dużo)
Coyote21

4
@ SK-logic Przewidywalność komputera jest zdecydowanie zawyżona. Jak bardzo dobrze zauważył Joseph Weizenbaum, duży system staje się tak skomplikowany, że nie jest w żaden sposób przewidywalny i nikt nie jest w stanie przewidzieć wyniku pewnej egzekucji. Staje się kwestią wiary lub nadziei. Nie można formalnie udowodnić, że program zawsze zrobi to, co zamierzał (dlatego nie jest to przewidywalne).
Omar Kohl

2
Jeśli jednak szybkość (wykonania) jest ostatecznym celem, dlaczego wszyscy nie piszemy naszych programów w kodzie maszynowym?
Emanuil Rusev

5

Język programowania może być bardzo wysoki, „robić dużo”, a jednocześnie być bardzo szybki. OCaml jest językiem wyższego poziomu niż PHP, ale wytwarza kod prawie tak szybko jak C. JavaScript jest tak dynamiczny jak PHP, ale można go wykonać naprawdę szybko. Jest to więc głównie problem z implementacją języka, a nie projekt. Języki dynamiczne trudniej jest wdrożyć wydajnie, ale nie jest to niemożliwe.


Czy uważasz, że języki, które są uważane za wolne (pod względem działania), takie jak PHP, mogą zostać zaimplementowane, aby działały szybciej?
Emanuil Rusev

1
Zend Optimizer ktoś?
user281377

Pozwól, że zapytam o to w inny sposób - co we wdrażaniu PHP powoduje, że działa on wolno?
Emanuil Rusev

6
Tak, można go lepiej wdrożyć. Będzie to wymagało dużego wysiłku - na przykład abstrakcyjna interpretacja w celu specjalizacji typów dynamicznych jest dość trudna i nie jest jeszcze dobrze zbadana. Język statyczny jest znacznie łatwiejszy do przetłumaczenia na wysoce wydajny kod. Tak więc PHP działa powoli, ponieważ jest dynamiczny. Cóż, początkowo miał bardzo słabą i nieprofesjonalną implementację, a także wiele innych języków skryptowych.
SK-logika

Kompilator HipHop, uruchomiony przez Facebook, może tłumaczyć PHP na kod C ++, więc jest naprawdę szybki.
JBRWilkinson

3

Szybkość można mierzyć w kategoriach czasu działania, początkowego czasu programowania i czasu konserwacji (czas potrzebny na odwrócenie problemów / błędów oraz przygotowanie nowego kodu i wdrożenie go).

Języki skryptowe mają zazwyczaj wolniejszy czas działania, ale krótszy czas konserwacji, ponieważ często można dokonać szybkiej zmiany i wdrożenia bez konieczności przebudowy całego systemu, a czasem nawet bez konieczności zatrzymywania się i ponownego uruchamiania.

Dlatego wiele zależy od równowagi, której potrzebujesz.

Kontekst jest również ważny. Ładowanie początkowej konfiguracji zajmuje 0,5 sekundy zamiast 0,1 sekundy nie jest niczym wielkim, ale w czasie wykonywania wykonanie zapytania zamiast 0,1 sekundy może być dużym problemem, jeśli musi obsłużyć 100 zapytań, a zatem zajmuje 50 sekund zamiast 10


100ms jest efektywny natychmiastowo w postrzeganiu użytkownika. 500 ms jest dość zauważalne. Jeśli użytkownik wykonuje zapytania, to zauważalna różnica w przepływie pracy.
David Thornley,

3

Proste - klienci uwielbiają szybkie oprogramowanie. W rzeczywistości głównym celem komputerów jest szybkie obliczanie.


11
właściwie źle. Klienci uwielbiają oprogramowanie spełniające wymagania i mieszczące się w budżecie. Nie obchodziło ich to mniej, jeśli ekran zajmuje 19 milisekund, a nie 15, ponieważ nigdy tego nie zauważają (jeśli budowanie zajmuje 15 sekund, to coś innego). Nie dbają też o to, czy używasz „szybkiego języka”, po prostu chcą czegoś, co działa zgodnie ze specyfikacjami i w ramach budżetu.
jwenting

4
19 ms w porównaniu z 15 ms może nie mieć znaczenia, ale 500 ms w porównaniu z 300 ms zdecydowanie robi i może mieć znaczenie między udanym produktem a awarią.
Nemanja Trifunovic

2
+1 „Klienci uwielbiają oprogramowanie spełniające wymagania i mieszczące się w ramach budżetu”. Z drugiej strony niektórzy użytkownicy końcowi, którzy nie płacą bezpośrednio za oprogramowanie, jak pracownicy dużej firmy, tak naprawdę nie dbają o koszty rozwoju. Oczywiście jako sprzedawca oprogramowania Twoim najważniejszym zadaniem jest sprawić, by ludzie byli szczęśliwi, którzy faktycznie ci płacą.
Zsolt Török

@Zsolt: To naprawdę zależy od rodzaju tworzonego oprogramowania. Zwykle pracuję nad produktami, w których użytkownicy końcowi płacą za produkty bezpośrednio lub wpływają na decyzje zakupowe - nie podają nam specyfikacji i nie dbają o nasz budżet. Może powinienem był użyć terminu „użytkownicy”, a nie „klienci”.
Nemanja Trifunovic

4
Mówiąc jako użytkownik (a nie jako programista), mogę powiedzieć, że ogólna reakcja (uwaga: inna niż szybkość) jest głównym czynnikiem w mojej decyzji o wyborze jednego programu zamiast drugiego. Jest to jeden z powodów, dla których używam na przykład kilku aplikacji Java; czas uruchamiania samej JVM powoduje, że aplikacje zaczynają się od -5000 punktów w tym obszarze;). Poważnie, jednak responsywność może (często powoduje) różnicę między interfejsem użytkownika produktu a jego niezrozumiałością lub skutecznością, a czasem może to być trudne do osiągnięcia, jeśli używany język powoduje zacinanie się lub długie operacje we / wy na dysku.
Billy ONeal

3

Wolność jest względna. Jeśli muszę czytać port 10 razy na sekundę, język, który nie może utworzyć pliku binarnego, który może to zrobić, jest zbyt wolny. Jeśli otoh piszę aplikację internetową, w której sekwencja żądania / odpowiedzi między serwerem a przeglądarką / klientem jest mierzona w sekundach, a użytkownik prawdopodobnie spędza minuty na ekranie przed kliknięciem przycisku, języka programowania, który może obsłużyć przetwarzanie żądania w ciągu 1 sekundy jest prawdopodobnie wystarczająco szybki (oczywiście są one znacznie szybsze).

Oczywiście język programowania może być czynnikiem determinującym szybkość wykonywania, ale to nie będzie sam język, ale kompilatory i / lub środowiska wykonawcze, które są z nim związane. Widać to wyraźnie w rozwoju Java, w którym wydajność JVM (nawet w identycznych środowiskach sprzętowych) z biegiem lat radykalnie wzrosła. I oczywiście zawsze jest możliwe pisanie strasznie wolnego kodu w dowolnym środowisku, które wybierzesz. Takie stwierdzenia, jak „C ++ jest dziesięć razy szybszy niż Java”, są automatycznie fałszywe, chyba że są kwalifikowane i określone ilościowo co do tego, które warunki zostały przetestowane i jak. Równie możliwe jest stworzenie testu, w którym Java jest szybsza niż C ++, wszystko zależy od tego, czego używasz jako kodu testowego i jak go wykonujesz.


3

Ponieważ języki programowania nie istnieją do obsługi programistów, istnieją po to, aby tworzyć programy do obsługi użytkowników.

Jeśli potrzebujesz tylko małego osobistego narzędzia do zrobienia czegoś za jednym razem, może być ono tak wolne, jak chcesz. Ale gdy zaczniesz wdrażać użytkowników, zależy im na szybkości i skalowaniu, zwłaszcza jeśli będą go używać wielokrotnie. (Na przykład instalator może być powolny; lepiej go nie instaluje.) I to nie tylko język; to ogólnie program. Jeśli twój program jest wolny, użytkownicy nie będą go lubić. A jeśli masz konkurencję, użytkownicy, którzy nie lubią twojego programu, są bardzo złe. Tak więc język, który przyczynia się do tego, że użytkownicy nie lubią twojego programu (spowalniając go) jest zły.

Należę do zespołu, który pisze oprogramowanie sterujące dla mediów nadawczych. Istnieje duża szansa, że ​​Twoja ulubiona stacja telewizyjna lub radiowa działa na nim, jeśli jesteś w USA. Wydajność to jedna z rzeczy, o których najczęściej słyszymy od klientów. Pierwotnie został napisany z myślą o małych operacjach jednostanowiskowych, ale teraz podpisujemy duże sieci nadawcze i kablowe z setkami kanałów, a skala zaczyna być problemem. Jeśli nie będziemy w stanie sprawić, by wszystko zaczęło działać szybko, przekażą swoje kontrakty o wartości wielu milionów dolarów ludziom, którzy mogą, a my skończymy z pracą. Dlatego używamy szybkiego, skompilowanego języka i optymalizujemy nasze bazy danych.


3

Ponieważ szybsze jest lepsze. Czas to pieniądz. Jeśli piszesz oprogramowanie serwera i używasz wolniejszego języka programowania, kupujesz więcej serwerów. Jeśli piszesz oprogramowanie w wersji termokurczliwej, tracisz klientów wobec rywali, którzy są szybsi.

W przypadku wszelkiego rodzaju trwałego oprogramowania, z którego korzystają ludzie, zwykle chcemy go jak najszybciej. Na poziomie montażu czas wprowadzania na rynek zwiększa się zbyt mocno, aby nie był opłacalny. To wszystko kompromisy. Z biznesowego punktu widzenia bardziej opłacalne może być pozwolenie biednym programistom debugować błędy pamięci w C ++, robiąc to jeszcze przez kilka miesięcy, jeśli oznacza to, że produkt jest szybszy niż twoi rywale.

Szybkość jest tak naprawdę ważna w wielu programach. Powolne języki są obecnie uważane za „złe”, ponieważ są naprawdę zbyt wolne (Python może być 50x - 100x wolniejszy, a to za dużo)


2

Istnieją języki programowania, które służą programistom.

Nie wiem, jak doszedłeś do tego wniosku. Powiedziałbym: inżynierowie używają języków programowania do swoich potrzeb.

Niektóre języki programowania są wolniejsze niż inne, ale nie dlatego, że coś jest z nimi nie tak.

To jest także płatne stwierdzenie. Zdefiniuj, co masz na myśli, używając tutaj słowa „wolniej”. Wolniej może oznaczać:

  1. Programy końcowe, które osiągają to samo, działają „wolniej” w jednym języku w porównaniu do innego.
  2. Czas potrzebny na utworzenie ostatecznego programu może być dłuższy (stąd niektórzy określiliby go jako „wolniejszy”).

Te dwie kwestie, które przychodzą na myśl, są również powiązane, gdy istnieje pewien rodzaj kompromisu między czasem poświęconym na rozwój i wydajność.


3
Masz rację mówiąc, że „inżynierowie oprogramowania używają języków programowania do swoich potrzeb”. Potwierdza to jedynie stwierdzenie, że „istnieją języki programowania do obsługi programistów”.
Emanuil Rusev

1
Powiedziałbym: inżynierowie oprogramowania używają języków programowania do rozwiązywania problemów (które zwykle nie są ich własnymi, ale ich klientami).
Péter Török

@Emanuil: Nie powiedziałbym, że „młot służy złotej rączce / człowiekowi”, ale że młot służy do wykonania zadania (np. Wbicie gwoździa, uderzenie kogoś, kogo nie lubisz itp.). @ Péter: Zastanawiam się, ile osób pisze „@Peter”. Ale jeśli możesz wymyślić termin „problem” dla wszystkiego , uważam, że nasze stwierdzenia są w rzeczywistości synonimem.
JK

1

Jak każde oprogramowanie, spowolnienie może być oznaką podstawowych problemów / złego projektu. Design jest wprawdzie trochę zeitgeist, ale to nie umniejsza faktu, że zasady projektowania, na których się teraz opiera, są nieaktualne i uważane za „złe”.

Weźmy na przykład klasyczną ASP i ASP.net.


1

Ktoś skomentował, że „Klienci uwielbiają oprogramowanie, które spełnia wymagania i mieści się w ramach budżetu”. Cóż, to prawda - ale ma to duży wpływ na wolne oprogramowanie, i to prawie z definicji oznacza wolniejsze języki programowania (i frameworki) oraz algorytmy i konfigurację. Powolny język programowania jest prawdopodobnie najważniejszą częścią tego wszystkiego po prostu dlatego, że jest to podstawa, z której najtrudniej będzie go zmienić. Jeśli używasz bazy danych Oracle i potrzebujesz większej wydajności, możesz zoptymalizować tabele / indeks / itp. Łatwo. Jeśli masz słaby algorytm w kodzie, możesz napisać inny kod. Jeśli twój framework jest powolny, możesz go wymienić - to nie jest takie proste, ale można to zrobić bez przepisywania wszystkiego. Jeśli twój język jest zbyt wolny, musisz praktycznie zacząć od nowa.

Zajrzyj na Facebooka, aby dowiedzieć się, na czym polega problem, aby PHP działało wystarczająco szybko, gdy trzeba było skalować.

Dla reszty z nas „niefunkcjonalne wymagania dotyczące wydajności” są często zapisywane w specyfikacjach, szczególnie w przypadku skalowalnych aplikacji internetowych. Niespełnienie strony „musi zostać wyświetlone użytkownikowi w ciągu 2 sekund od żądania”, a użytkownik traci umowę (lub płaci kary). Tak, tak, klienci uwielbiają oprogramowanie spełniające wymagania - a wymagania te mówią, że musi być szybki (może nie obchodzi Cię, jak długo użytkownicy spędzają wpatrywać się w klepsydrę, ale klient na pewno to robi - to ogromny koszt).

Na przykład w dużym call center powiedziano mi, że ustalili, że na każdą sekundę, którą można zaoszczędzić na procesie odbierania połączeń, 1 rozmówca może zostać „zredukowany”. To nagle prawdziwe pieniądze i ogromna zachęta dla szefów, aby uzyskać szybsze, wydajniejsze i bardziej użyteczne oprogramowanie.

Dużo czasu poświęca się martwiąc się, że programiści wypuszczają kod tak szybko, jak to możliwe (a następnie cały czas testują i refaktoryzują jednostki, lol). Przekonałem się, że nie jest to tak ważny czynnik, jak ludzie myślą - jeśli jesteś ekspertem w swoim języku, możesz go kodować znacznie szybciej niż niedoświadczony. Dlatego ekspert C ++ może pisać kod szybciej i dokładniej niż początkujący programista PHP. Myślę więc, że bycie ekspertem jest ważniejsze niż wybranie „łatwego” języka i dlatego nie lubię kultu „przepisywania w fajne, nowe rzeczy”, które wydają się być wszędzie dzisiaj.


1

Zaznaczę, że większość problemów z wydajnością istnieje, ponieważ programista wykonał złą pracę, a nie dlatego, że język był zbyt wolny. Naprawdę, istnieje wiele bardziej istotnych rzeczy, o które należy się martwić w wydajności niż w wybranym języku. To około 1,203,407 pozycji na mojej liście.


0

Czy zatem wolniejsze działanie języków programowania jest naprawdę złe?

Wszystko inne jest równe, szybsza jazda to dobra rzecz. W końcu nikt tak naprawdę nie chce dłużej czekać na niektóre wyniki, a gdy ten wynik zostanie osiągnięty, może zwolnić zasoby na inne rzeczy.

Ale nie wszystko inne jest równe. Na początek ważne jest również, aby uzyskać właściwy wynik lub przynajmniej odpowiedni. (Jeśli dozwolone są całkowicie niepoprawne wyniki, możesz je naprawdę szybko wygenerować i będą one miały dokładnie zerową wartość dla każdego.) Jeśli zmiana na nieco wolniejszy język zwiększa prawdopodobieństwo uzyskania właściwego wyniku, zwykle jest to wielki kompromis. Języki wyższego poziomu mają tutaj przewagę nad językami niższego poziomu, ponieważ ich bogatszy zestaw modeli zwykle ułatwia wyrażenie złożonego problemu bez nadmiernej ilości wyraźnych szczegółów.

Zwykle ważne jest również zarządzanie kosztami produkcji oprogramowania, dodawania nowych funkcji zgodnie z potrzebami i utrzymywania ich działania w miarę zmiany systemów bazowych. Języki wyższego poziomu zwykle pozwalają na szybsze przetwarzanie programów, a utrzymanie kosztów programowania w ramach budżetu ma dużą wartość. Rzeczywiście, utrzymywanie kosztów na niskim poziomie pozwala na osiągnięcie większej liczby różnych rzeczy, co ogólnie jest dobrą rzeczą.

Ostatnią kluczową kwestią, na którą należy zwrócić uwagę, jest to, że nie jest konieczne używanie tylko jednego języka i że w wielu systemach oprogramowania większość ich komponentów nie jest krytyczna pod względem wydajności. Użycie języka niskiego poziomu do produkcji wysokowydajnych komponentów dla bitów krytycznych jest rozsądne, podczas gdy pozostawienie mniej istotnych części językowi wysokiego poziomu (aby zminimalizować koszty ich wytworzenia) jest wyjątkowo rozsądne. Co więcej, funkcje, które tworzą dobry język niskiego poziomu (zdolność precyzyjnego kontrolowania tego, co robi maszyna), nie są funkcjami, które tworzą dobry język wysokiego poziomu (zdolność wnioskowania o szczegółach na podstawie znacznie mniejszych opisów): są diametralnie przeciwne, więc możliwość łączenia ich ze sobą i wykorzystywania ich ze względu na swoje mocne strony i unikanie słabości, to naprawdę świetna rzecz.

Które elementy należy poddać wysokowydajnej obróbce? Optymalizacja? Zmierz je. Profiluj je. Znajdź prawdę zamiast zgadywać. Skoncentruj swój wysiłek tam, gdzie robi to najlepiej.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.