Słyszałem stwierdzenie, że Python będzie zbyt wolny, aby mógł być wykorzystywany w przeglądarkach.
Sądzę, że JavaScript jest lepszy pod tym względem tylko dlatego, że firmy takie jak Google potrzebują go szybko (i zrobiły to szybko), ponieważ potrzebują go, aby przetrwać, ale mogę się mylić.
Czy są jakieś różnice w sposobie projektowania Python i Javascript, które mają wpływ na to, jak będą (działały) w przeglądarkach?
Ponieważ na razie nie ma implementacji Pythona po stronie klienta, moje pytanie pochodzi od wypowiedzi, którą ktoś wypowiedział, więc może ma to coś wspólnego z samymi językami (chociaż nie wierzę w to).
javascript
python
browser
client-side
Profpatsch
źródło
źródło
would
?Odpowiedzi:
Na początek musimy wyraźnie rozróżnić języki i implementacje . Język jest rzeczą abstrakcyjną, implementacja jest konkretną rzeczą, którą można zmierzyć pod względem wydajności. Na przykład Lisp był kiedyś uważany za zbyt nieefektywny do praktycznego zastosowania, ale kompilatory ciągle dojrzewały, a ostatecznie opracowano dla niego dedykowany sprzęt; w pewnym momencie w latach 80. była to platforma programistyczna z wyboru do tworzenia stacji roboczych o wysokiej wydajności.
To powiedziawszy, najprostszą odpowiedzią jest to, że szybka implementacja Javascript, taka jak Google V8, wysadza standardową implementację Pythona (CPython) z wody . V8 to wysoce zoptymalizowana maszyna wirtualna z JITerem, który jest niesamowicie szybki, podczas gdy CPython jest dość prostą maszyną wirtualną w porównaniu. Istnieje implementacja Pythona z JIT, ale wciąż jest tylko około 5-6x szybsza.
Pięć lat temu byłaby inna historia. Przeglądarki miały uproszczone implementacje Javascript, ponieważ szybkość nie była problemem, ponieważ nikt nie zbudował z nim „prawdziwego” oprogramowania, a Python byłby równy, jeśli nie szybszy.
źródło
W dawnych czasach internetu, gdy aplety Java były
głównąjedyną formą interaktywnych treści po stronie klienta, ludzie zdali sobie sprawę, że musi istnieć sposób na uzyskanie formularzy na stronie internetowej, aby móc wchodzić w interakcje z apletami na stronie internetowej.Na tej podstawie utworzono język skryptowy do połączenia apletu Java ze stroną internetową o nazwie ... javascript.
Pozostałości tego dziedzictwa można zobaczyć dzięki pytaniom SO, takim jak [ 1 ], [ 2 ], [ 3 ] - oraz dwóm oficjalnym dokumentom: Wywoływanie kodu JavaScript z apletu i Wywoływanie metod apletu z kodu JavaScript
Przy takim języku dostępne przeglądarki czasu (przeważnie Netscape) udostępniły javascript jako przewagę konkurencyjną (javascript zaprojektowany w Netscape - Netscape był pierwszym javascript po stronie serwera z jego serwerem w 1994 roku - prawie dwie dekady przed węzłem .js). Inne przeglądarki poszły w tym samym kierunku. Ludzie piszą strony, które używają javascript, inne próby tworzenia skryptów po stronie klienta oznaczałyby całkowicie niekompatybilne strony między rzeczami, które działają, a rzeczami, które nie działają - lub powielaniem kodu (tutaj blok {wstaw język tutaj}, który robi to w przypadku kodu innego niż javascript przeglądarki i tutaj jest blok javascript dla wszystkich innych).
Ponieważ Netscape był przez pewien czas dominującą przeglądarką, JavaScript został utrzymany. Podczas gdy dziedzictwo Netscape zaginęło w przypisach plików źródłowych Mozilli, javascript żyje dalej i nic nie było w stanie go przerzucić.
Problem pozostaje w przypadku każdego innego języka skryptowego slajdów klienta. JavaScript jest obsługiwany w każdej przeglądarce. Jeśli ktoś stworzyłby przeglądarkę obsługującą Python (na przykład) zamiast javascript, nie byłby w stanie korzystać ze zdecydowanej większości stron internetowych. Ponadto, chyba że ta przeglądarka była w stanie uzyskać znaczny udział w ruchu przeglądarki, projektanci stron internetowych nie chcą tworzyć dwóch zestawów stron z różnymi językami skryptowymi dla tej samej strony.
Można spróbować stworzyć wtyczkę do skryptów Pythona dla niektórych przeglądarek, które włączyły skrypt Pythona na stronie ... podobnie jak dzisiaj działa vrml. Ale chyba, że słyszałeś i widziałeś stronę internetową, która używa vrml, jest równie prawdopodobne, że znajdzie zastosowanie dla innej strony internetowej dla innego języka skryptowego.
źródło
Nie sądzę, żeby Python był w ogóle zbyt wolny. Nie ma nic w języku, który uniemożliwia mu działanie wystarczająco szybko, aby przynajmniej pasowało do JavaScript. Można go skompilować do JavaScript, więc jeśli nic więcej, możesz dołączyć kompilator do przeglądarki i potencjalnie tylko wydłużyć czas ładowania strony.
AKTUALIZACJA: Przeczytaj poniższe komentarze omawiające, dlaczego kompilacja Pythona do JS byłaby znacznie bardziej kosztowna niż sugerowano tutaj.
Problemem jest próba przekonania dostawców przeglądarki i W3C, aby najpierw wybrali Python, zamiast Ruby lub innego fajnego języka skryptowego, a następnie zdefiniowali ustandaryzowany podzbiór, ponieważ nie mogą zezwolić na wywołania systemowe itp., A następnie dobrze go zaimplementowali, cały czas nadal obsługuje JavaScript. Tak się nie stanie, ale jeśli tak, wątpię, by prędkość okazała się poważnym problemem.
źródło
a = something(); frobincate(a); return quux
Iif condition: react()
są one pojedynczymi wierszami. N poziomów wcięcia potrzebuje tylko n spacji, a nie n * 4 spacji.Myślę, że Python ma własną maszynę wirtualną. Nie mam dużego doświadczenia z Pythonem, ale nie widzę żadnego powodu, dla którego nie działałby tak dobrze, jak niezoptymalizowany silnik JavaScript.
Kilka przypadkowych myśli:
(1) Prawdopodobnie można uruchomić Pythona lokalnie za pomocą apletu Java przy użyciu Jython. Trudność polega na tym, że aplety są bardzo restrykcyjne, więc może być konieczne zmodyfikowanie Jython w celu dopasowania do ograniczeń dostępu. Na przykład, jeśli zapisuje do pliku dziennika, może być konieczne usunięcie kodu logowania. Aplet nie musi być zauważalnie widoczny.
(2) Ktoś może zbudować „kompilator” / konwerter Pythona na JavaScript. To byłoby dużo pracy.
źródło
Someone could build a Python-to-JavaScript "compiler"/converter
Cóż, ktoś już to zrobił .Brython
działa interesująco szybko, przynajmniej w przypadku raczej odizolowanych części na stronach (mała interakcja zDOM tree
).Zależy to od implementacji języka, a niekoniecznie od samego języka. Większość interpreterów JavaScript jest znacznie szybsza niż prawie wszystkie implementacje Pythona.
Nie oznacza to, że języka Python nie można używać z prawie taką samą prędkością jak JavaScript. Opal implementuje prawie pełny język Ruby i standardową bibliotekę w przeglądarce, kompilując kod Ruby w kod JavaScript zawarty w zamknięciach. Pomijając koszty związane z włączeniem biblioteki Opal, jej szybkość jest znacznie bliższa prędkości prostego JavaScript niż jakikolwiek inny interpreter języka Ruby, który znam.
Nie wiem, czy istnieje opalowy odpowiednik Opala, ale taki projekt prawdopodobnie oznaczałby, że odpowiedź na twoje pytanie brzmi „nie”. Wraz ze wzrostem wykorzystania JavaScript jako „języka asemblera dla sieci”, nie zaskoczyłoby mnie, gdyby był on coraz częściej wykorzystywany jako platforma dla innych języków, zwłaszcza gdy zwiększa się moc obliczeniowa urządzeń mobilnych i narzut związany z posiadaniem języka zaimplementowany w JavaScript staje się coraz bardziej zaniedbany.
EDYCJA: Oto lista implementacji języka Python dla przeglądarki kompilującej / uruchamianej w JavaScript.
https://github.com/jashkenas/coffeescript/wiki/list-of-languages-that-compile-to-js#python
A jeśli jesteś zainteresowany, możesz sprawdzić Opal, który bardzo mi się podoba.
http://opalrb.org/
Ponieważ wątpię, aby przeglądarki kiedykolwiek oferowały obsługę oddzielnych tłumaczy, takie kompilatory są prawdopodobnie przyszłością pod względem używania języków innych niż JavaScript. Nawet teraz uzyskasz porównywalną wydajność w większości dziedzin. To jednak moja opinia, więc miej to na uwadze.
źródło
Nawet gdy zadałeś to pytanie, w javascript było już dostępnych wiele implementacji Pythona, których można dziś używać na stronach internetowych.
Zajrzyj na http://www.skulpt.org/ lub http://www.brython.info/ na początek.
Wydajność nie wydaje się być zła, ale powinieneś sam je przetestować i się dowiedzieć.
źródło
Python to język „konsoli”, działający na serwerze
JavaScript to język „przeglądarki” działający na kliencie
Jako takie nie konkurują bezpośrednio
... oczywiście jest plik node.js i prawdopodobnie wtyczki do przeglądarki Python, ale wtedy jest to bardziej pytanie o wydajność konkretnej implementacji.
Co więcej, w przypadku większości aplikacji python dobrze sobie radzi, z wyjątkiem sytuacji, gdy trzeba wykonać jakieś obszerne obliczenia i wycisnąć cykle procesora.
Ostatnia uwaga: python i javascript mają wiele podobieństw. Ze względu na ich dynamiczny charakter, oba muszą być interpretowane w czasie wykonywania i nie mogą być kompilowane tak silnie, jak języki o typie statycznym. Jako takie zakładam, że ich osiągalne wyniki byłyby podobne.
źródło
jsc
pozwala pracować z javascript jako konsolą, podobnie jak można by to zrobić, gdyby pisaćpython
na konsoli.