LINUX.ORG.RU

PHP масштабируется не хуже Java


0

0

В этой статье рассматривается вопрос расширяемости веб сервисов построенных на PHP.

Автор приходит к выводу, что разработка больших проектов на PHP является быстрой и дешевой.

"Это просто не правда, что Java лучше скриптовых языков в плане расширяемости веб приложений. Я не буду делать далёко идущих выводов о том, что PHP лучше Java, потому что обычно не всё так просто."

>>> Статья

★★★★

Проверено: Shaman007 ()

Ответ на: Печально от a-x

>Печально, что из-за того, что некоторые криворукие недопрограммеры пишут с register globals или из-за того что некоторые криворукие недоадмины register globals ставят по умолчанию для сайтов. которым он нафиг не нужен к РНР программерам стали относиться как к программерам на басике.

Угу, ещё magic quotes, как на хостиге у mail.ru. На кой они им сдались?

gloomdemon
()
Ответ на: комментарий от gloomdemon

> Странно, на C/C++/Java никто сразу не лезет ничего сложнее hello world писать, а про php думают, щас я изучу как тут скобочки расставлять и я крутой web кодер.

Ну хз, на перле он тоже страничек раньше не писал. Хотя никакой он не программер, он админ (почти), а програмить умеют только ленивые админы :) (за исключением программеров, работающих админами).

Ну а я действительно на С кодить с ХВ начинал, а с явой познакомился когда одна старшекурсница попросила помоч с курсаком, где на жабе (под виндой) нуно было, в часности, чтобы оч много паралельных процессов бегали и не спотыкались :) Когда я все это написал я и вправду подумал "какой крутой язык", но потом я узнал что такое мультипоточность в С/перле под линуксом... :))) После этого я на жабу смотрю действительно как на жабу (зеленую такую :)

А помимо паралельных процессов вспоминается проблема с дописыванием данных в конец существующего файла... Или уже решили?

arsi ★★★★★
()

Суть пролблемы в том, что php кодерам платять больше и они более повостребованней, чем ждабобылокодерки. Поэтому последние и скулят.

anonymous
()
Ответ на: комментарий от anonymous

> Суть пролблемы в том, что php кодерам платять больше и они более повостребованней, чем ждабобылокодерки. Поэтому последние и скулят.

Точно! Ёптеть, а программерам на asm под z80 вообще работать надо не больше месяца в год, им такие деньги платят!

gloomdemon
()
Ответ на: комментарий от anonymous

> ПОЧЕМУ ОНА, ГАДИНА, ТАКАЯ ТОРМОЗНАЯ??????? Она жрет много памяти. И работает с данными, которые лежат в памяти. Если мало оперативы, такие данные обычно неудачно попадают в swap на винт.

Почему она ест много памяти... Потому что Sun выставила приоритет на дефрагментированности памяти, нежели на оптимальности ее использования. Она использует сборщик мусора, требующий выделения в 2 раза больше памяти, нежели это необходимо.

mutable
()
Ответ на: комментарий от mutable

>Да, жаба жрет немеренно памяти, да это недосмотр (а может вынужденный ход) санычей, но она НЕ МЕДЛЕННЕЕ

Гы. А кто, вообще, начал про то, что Java жрёт больше памяти, чем php на той же задаче? - http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&lang=php&...

Про скорость работы непосредственно кода - это вообще смешно. PHP и Java по этому параметру может только больной сравнивать.

У PHP есть преимущества перед Java. Это, например, более простой процесс отладки. Богатый набор библиотек с базовой поставке. Но что касается скорости или затрат памяти - тут PHP Жабе не конкурент.

Вообще, у каждого из этих языков своя ниша. Собственно, у меня на сервере они вполне себе сосуществуют успешно.

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

> У PHP есть преимущества перед Java. Это, например, более простой процесс отладки.

Уважаемый, не смешите мои тапки. Отладка более-менее завернутого кода на пхп штатными средствами едва возможна, а нештатными делается через афедрон.

shimon ★★★★★
()
Ответ на: комментарий от KRoN73

>Гы. А кто, вообще, начал про то, что Java жрёт больше памяти, чем php на той же задаче? - http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&lang=php&......

>Про скорость работы непосредственно кода - это вообще смешно. PHP и Java по этому параметру может только больной сравнивать.

>У PHP есть преимущества перед Java. Это, например, более простой процесс отладки. Богатый набор библиотек с базовой поставке. Но что касается скорости или затрат памяти - тут PHP Жабе не конкурент.

Чёто нет на сайте ни упоминания на каком железе тестили, ни что тестили (в смысле исходиники тестов), а от указания версии php толку не очень.

И опять же, идём на сайт zend.com, смотрим что нам обещаются от zend optimizer (где то +40% производительности) и думает что будет если это к тесту применить.

gloomdemon
()
Ответ на: комментарий от anonymous

>ПОЧЕМУ ОНА, ГАДИНА, ТАКАЯ ТОРМОЗНАЯ???????

=== fib.java ===
import java.lang.*;
class fib
{
    static int fibn(int n)
    {
        return n>2 ? 1 : fibn(n-1) + fibn(n-2);
    }

    public static void main(String[] args)
    { 
        System.out.println(fibn(42));
    }
}
=== fib.java ===

=== fib.cpp ===
#include [stdio.h]

int fib(int n)
{
      return n>2 ? 1 : fib(n-1)+fib(n-2);
}


void main(void)
{
    int f42=fib(42);
    printf("%d",f42);
}
=== fib.cpp ===

Компиляция первого - javac fib.java (JDK 1.5)
Второго - cl /Ox /O2 /Fa /FAsc /G6 /Gr fib.cpp (VC7)

Время работы первого - 4.6 сек.
Время работы второго - 7.0 сек.

P4, 2800, WinXP.

Что я не так делаю? :)
(заодно напомню, что GCC3.x делает, в среднем, более тормозной код, чем VC7)

KRoN73 ★★★★★
()
Ответ на: комментарий от shimon

> Уважаемый, не смешите мои тапки. Отладка более-менее завернутого кода на пхп штатными средствами едва возможна, а нештатными делается через афедрон.

Штатными может и да, только вот вопрос, а что штатного есть у java? Да и что занчит более-менее завёрнутый код?

ЗЫ Есть такое дало как ZendStudio + ZendServer (Debug server), вряд ли найдётся что-то на php что этими средствами отладить нельзя.

gloomdemon
()
Ответ на: комментарий от shimon

>Уважаемый, не смешите мои тапки. Отладка более-менее завернутого кода на пхп штатными средствами едва возможна, а нештатными делается через афедрон.

Речь именно о завёрнутом коде. Через "echo-debug". В PHP оно делается по принципу "изменение, F5 в браузере", в Java - "изменение, перекомиплляция, (опционально - рестарт сервера), F5 в браузере".

KRoN73 ★★★★★
()
Ответ на: комментарий от gloomdemon

>Чёто нет на сайте ни упоминания на каком железе тестили, ни что тестили

Ну, народ пошёл... Вам ещё и разжевать и в рот положить? Там всё есть, и исходные тексты, и описания железа, и указания на версии, и даже возможность отправить им свои, улучшенные и более оптимальные версии тестов (что, собственно, фанаты тех или иных языков и делают, так что результаты - весьма достоверны получаются).

Вот же, блин...

KRoN73 ★★★★★
()
Ответ на: комментарий от gloomdemon

>смотрим что нам обещаются от zend optimizer (где то +40% производительности)

А ничего не будет. 1. Все нормальные люди знают, на сколько нужно делить обещания. 2. 40% не помогут там, где проигрышь в 20, 50, 100, 200 раз (очень рекомендую посмотреть на колонку "Faster").

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

Нашёл =), только читать много про то как с ними пообщаться, прикольный портальчик.

gloomdemon
()
Ответ на: комментарий от KRoN73

По тестам вроде вмдно что php сливает по мат. вычислениям, так никто не говрит что он для этого предназначен =) Сразу видно над чем работать и работать =).

gloomdemon
()
Ответ на: комментарий от gloomdemon

>По тестам вроде вмдно что php сливает по мат. вычислениям, так никто не говрит что он для этого предназначен =)

Дык, с тем, что PHP востребован адекватные люди и не спорят :D Как и Java. Более того, лично я активно использую и то, и другое.

Результаты теста - это ответ тем фатантикам, которые про скорость PHP что-то говорят. О чём тут говорить, когда PHP даже Perl'у заметно сливает на чистой вычислялке :) (зато, кстати, смею заметить, что выборка данных через mysql_query выполняется в 9 раз быстрее, чем через DBI).

...

Кстати, кто тут недавно про то, что Ruby быстрее Java выразился? :) Тут уже не 20x .. 50x .. 200x, тут уже 50..200..500 набегает :D - http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&lang=ruby&am...

Ну, или PHP vs Ruby - http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&lang=ruby&am...

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

ЗЫ В догонку, всё таки java язык с жёсткой типизацией, а php с мягкой. А вообще надо предложить им потестить с оптимайзером, итересно какие результаты будут.

gloomdemon
()
Ответ на: комментарий от gloomdemon

>ЗЫ В догонку, всё таки java язык с жёсткой типизацией, а php с мягкой.

Что, с одной стороны, замедляет работу PHP, с другой, позволяет делать проще вещи, невозможные или трудновыполнимые в Java.

Кстати, раз уж по этому ресурсу пошли, общий рейтинг по всем тестам можно оценить на http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&lang=all

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

>Что я не так делаю? :)

Все. В частности неумеете ляпать даже простейшие программешки. Смешно!

anonymous
()
Ответ на: комментарий от KRoN73

> Речь именно о завёрнутом коде. Через "echo-debug". В PHP оно делается по принципу "изменение, F5 в браузере", в Java - "изменение, перекомиплляция, (опционально - рестарт сервера), F5 в браузере".

Ну не скажи. Это не отладка. Знаешь ли, иногда надо точки останова расставить, и посмотреть в кишки.

Закачал какой-то дебуггер, а ля gdb, теперь бы убедить кого надо, что на изучение сего чуда мне нужно около дня. Кое-кто так просто не убеждабелен. :)

shimon ★★★★★
()
Ответ на: комментарий от gloomdemon

> ЗЫ В догонку, всё таки java язык с жёсткой типизацией, а php с мягкой.

Она не то что мягкая -- жидкая... :(

shimon ★★★★★
()
Ответ на: комментарий от anonymous

>Все. В частности неумеете ляпать даже простейшие программешки. Смешно!

Дайте более быстрый вариант _по тому же_ алгоритму.

KRoN73 ★★★★★
()
Ответ на: комментарий от shimon

>> ЗЫ В догонку, всё таки java язык с жёсткой типизацией, а php с мягкой.

>Она не то что мягкая -- жидкая... :(

Многие программеры на php от этого таким кодом растекаются, что кажется им не до его написания было.

gloomdemon
()
Ответ на: комментарий от shimon

>Ну не скажи. Это не отладка. Знаешь ли, иногда надо точки останова расставить, и посмотреть в кишки.

Расставить точки останова в реалтаймовском сервере - это сильно. Как ты его отлаживать в таком режиме будешь, если при остановке сервера клиенты по таймауту отвалятся? :D

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

> Расставить точки останова в реалтаймовском сервере - это сильно. Как ты его отлаживать в таком режиме будешь, если при остановке сервера клиенты по таймауту отвалятся? :D

:D Можно им в это время какой нибудь мусор засылать под видом плохих каналов связи, ну или магнитной бури :D

gloomdemon
()
Ответ на: комментарий от shimon

>в виде расширения пхп, после чего компилируешь и имеешь пару новых функций или классов

именно понял. именно это и интересует.

>Это не относится к компиляции пхп в машинный код.

соответственно - именно относиться. имхо.:)

grinn ★★
()
Ответ на: комментарий от gloomdemon

>Многие программеры на php от этого таким кодом растекаются, что кажется им не до его написания было.

А это - культуру программирования повышать нужно. На Java тоже такое дерьмо написать можно умудриться... Хотя, согласен, сделать это там немного сложнее. Но тут возникают новые вопросы.

- Не факт, что более жёсткий контроль компилятора не расслабляет программиста, снижая общий уровень культуры программирования. Зачем учитывать подводные камни, если их отлавливание возлагается на компилятор?

- Если брать конкретно Java, то его более строгая типизация может порождать ошибки. Вот как раз недели две назад долго искали одну такую. Поменяв Integer на Short в нескольких местах, HashMap<Integer,ObjectRef> был заменён на HashMap<Short,ObjectRef>. После этого выяснилось, что в некотрых местах, где первый аргумент остался по ошибке Integer, ошибок компилляции не возникало, но извлекался null вместо верного значения. В PHP подобные ляпы невозможны (правда, возможно множество других :D )

В общем, всё культура программирования решает, а не язык. Язык может лишь помогать или вредить ей, но в случае Java и PHP они в этом плане, ИМХО, на близком уровне.

KRoN73 ★★★★★
()
Ответ на: комментарий от gloomdemon

>:D Можно им в это время какой нибудь мусор засылать под видом плохих каналов связи, ну или магнитной бури :D

Можно :) Но я предпочитаю несколько System.out.println() или _log.info() :) Собственно, я уже просто отвык использовать дебагеры... Может, где-то и проигрываю в эффективноти отладки, но, почему-то, ошибки нахожу в коллективных проектах быстрее, чем другие в команде - с дебагерами :D

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

> - Не факт, что более жёсткий контроль компилятора не расслабляет программиста, снижая общий уровень культуры программирования. Зачем учитывать подводные камни, если их отлавливание возлагается на компилятор?

Зато потом пересев на что нибудь типа php, не начнуть писать всякую х**.

>- Если брать конкретно Java, то его более строгая типизация может порождать ошибки. Вот как раз недели две назад долго искали одну такую. Поменяв Integer на Short в нескольких местах, HashMap<Integer,ObjectRef> был заменён на HashMap<Short,ObjectRef>. После этого выяснилось, что в некотрых местах, где первый аргумент остался по ошибке Integer, ошибок компилляции не возникало, но извлекался null вместо верного значения. В PHP подобные ляпы невозможны (правда, возможно множество других :D )

Весёлые вещи =). Для нормального кодинга в php рекомендуют включать error reporting E_ALL, что бы знать что происходит, а то можно будет долго головой об стенку биться не зная о том что вместо присваивания одной переменной, случайно создаём ещё одну :D

Весь вопрос, как нормально воспитать эту самую культуру программирования, если есть всегда желание и возможность что нибудь по быстрому наляпать (хотя иногда просто необходимость).

gloomdemon
()
Ответ на: комментарий от KRoN73

> Расставить точки останова в реалтаймовском сервере - это сильно.

Дебажить код на реалтаймовском сервере? Да за это на язык наступить надо такому горе-дебаггеру. Женской шпилькой.

Конечно же, у себя дебажить на локалхосте (если ты не латентный вендузятнег), и выставить таймаут клиента в $+\inf$.

shimon ★★★★★
()
Ответ на: комментарий от KRoN73

>Дайте более быстрый вариант _по тому же_ алгоритму.

Да вы посмотрите на код, который запостили. И подумайте мозгом ... Ну нельзя же так в самом деле...

anonymous
()

В общем статью не читал. Но судя по камментам...

eXOR ★★★★★
()
Ответ на: комментарий от AngryElf

>> Однажды админ написал страничку по учете (точнее -- визуализации всей энтой хрени из БД в хтмл-виде) траффика юзверями, на ПХП (соко это заняло времени не знаю не спрашивал)... Но время идет, все меняется... Появился новый дистриб, админ его поставил... Вирсия ПХП там отличалась в н-ном знаке субверсии... Естественно, его страничка не заработала.

>>Сказочник. Либо админ тот - дурка. В минорных версиях если что и поменяется - так это хаки отломают или костыли приберут. Если не заработало при смене минорной версии - ищи ошибки в своем ДНК.

>>Серьезные проблемы бывают при переходе с 4.х на 5.х. Там дофига чего поломали. А внутри 4-ки - сильно сомневаюсь.

Вызывающе неверная информация. Проблемы бывают и при переезде с 5.0.X на 5.1.X а так же непременно будут при переезде на 6.X. Несмотря на то что я на пхп написал уже туеву хучу кода, у меня хватает ума видеть все его недостатки и я уже ищу альтернативу сейчас пытаюсь определиться python или RoR.

Вот тебе пример кстати кода который работает под 3.X-5.0.X
if (preg_match_all('/regexp here/',$haystack,$matches=array()))
doSomething();

Давай теперь переезжай на 5.1.X.

Ubnormal
()
Ответ на: комментарий от KRoN73

------fibonacci.java-------
import java.util.*;

public class fibonacci {
	static int fibn(int n) {
		return n<2 ? 1 : fibn(n-1) + fibn(n-2);
	}

	public static void main(String[] args) { 
		System.out.println(fibn(42));
    }
}
-----fibonacci.c-------
include <stdio.h>

int fib(int n)
{
      return n<2 ? 1 : fib(n-1)+fib(n-2);
}


void main(void)
{
	int f42=fib(42);
	printf("%d\n",f42);
}
------------------------------------
$ java -version
java version "1.5.0_06"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_06-b05)
Java HotSpot(TM) Client VM (build 1.5.0_06-b05, mixed mode)
javac -g:none ./fibonacci.java
time java fibonacci
433494437

real    0m4.500s
user    0m4.336s
sys     0m0.036s
------------------------------------
gcc -g1 ./fibn.c -o fibn
time ./fibn
433494437

real    0m4.852s
user    0m4.772s
sys     0m0.008s

anonymous
()
Ответ на: комментарий от KRoN73

Более быстрый алгоритм? Держи

#include <iostream> using namespace std;

int main() { int a=1,b=1; for(int i = 0; i < 42; i++) { a+=b; a^=b; // обмен a и b b^=a; // a^=b; // } cout << a << endl; }

Pentium 3 - 533mhz

alex@alex:~> time ./fib1

433494437

real 0m0.007s user 0m0.004s sys 0m0.004s

Учись программировать, студент.

anonymous
()
Ответ на: комментарий от anonymous

Более быстрый алгоритм? Держи 


#include <iostream> 
using namespace std; 

int main() 
{ 
  int a=1,b=1; 
  for(int i = 0; i < 42; i++) 
  { 
   a+=b; 
   a^=b; // обмен a и b 
   b^=a; // 
   a^=b; // 
  } 
  cout << a << endl; 
}

anonymous
()
Ответ на: комментарий от anonymous

забыл написать
$ gcc --version
gcc (GCC) 3.4.5 (Gentoo 3.4.5-r1, ssp-3.4.5-1.0, pie-8.7.9)
Copyright (C) 2004 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$ cat /proc/cpuinfo
processor       : 0
vendor_id       : AuthenticAMD
cpu family      : 6
model           : 10
model name      : AthlonXP
stepping        : 0
cpu MHz         : 2083.776
cache size      : 512 KB
fdiv_bug        : no
hlt_bug         : no
f00f_bug        : no
coma_bug        : no
fpu             : yes
fpu_exception   : yes
cpuid level     : 1
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 mmx fxsr sse syscall mp mmxext 3dnowext 3dnow
bogomips        : 4171.80

anonymous
()
Ответ на: комментарий от anonymous

gcc (GCC) 4.0.2 20050901 (prerelease) (SUSE Linux)


alex@alex:~> cat /proc/cpuinfo
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 8
model name      : Pentium III (Coppermine)
stepping        : 1
cpu MHz         : 533.148
cache size      : 256 KB
fdiv_bug        : no
hlt_bug         : no
f00f_bug        : no
coma_bug        : no
fpu             : yes
fpu_exception   : yes
cpuid level     : 2
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 sep mtrr pge mca cmov pat pse36 mmx fxsr sse
bogomips        : 1068.66


В своем варианте я заменил бредовую рекурсию на цикл и вместо 38 секунд получил 0.007сек вместе с выводом.

anonymous
()
Ответ на: комментарий от KRoN73

Приведенный пример эквивалентен

printf("1");

на C проверено.

Чтобы ответить что вы делаете не так, надо знать какое "так" вы имели ввиду :)

anonymous
()
Ответ на: комментарий от KRoN73

>Расставить точки останова в реалтаймовском сервере - это сильно. Как ты его отлаживать в таком режиме будешь, если при остановке сервера клиенты по таймауту отвалятся? :D

а ты попробуй. тебе понравится. томкошку под эклипсой, скажем. в полных рост дебажит и все живы.

hjugo
()
Ответ на: комментарий от gloomdemon

>Для нормального кодинга в php рекомендуют включать error reporting E_ALL

Я всегда пальцем у виска кручу, когда вижу админа, выключающего NOTICE на своих серверах. Именно после того, как пару раз элементарно зевнул опечатки в именах переменных, которые потом через месяцы всплывали :)

KRoN73 ★★★★★
()
Ответ на: комментарий от shimon

>и выставить таймаут клиента в $+\inf$.

А на что наступать шпилькой тому, кто считает, что клиенты всегда бывают только опенсорсные? :D

KRoN73 ★★★★★
()
Ответ на: комментарий от anonymous

>Да вы посмотрите на код, который запостили. И подумайте мозгом ... Ну нельзя же так в самом деле...

Так и запишем. Пустопорожнее газоиспускание анонимусов.

KRoN73 ★★★★★
()
Ответ на: комментарий от anonymous

>Более быстрый алгоритм?

Учись читать. Студент.

KRoN73 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.