ДонНТУ / Магистры / 2010 / ФКНТ
Фрунт Андрей Александрович
Факультет компьютерных наук и технологий
Специальность: Компьютерные системы и сети
Тема выпускной работы: Исследование методов создания объектно-реляционной модели в рамках управляемой моделями архитектуры
Научный руководитель: Дорожко Леонид Иванович
Опыт использования платформ PHP и Java
Мой опыт использования языка РНР и платформы LAMP (Linux, Apache Web Server, MySQL, PHP) начался с того, что в конце 2005 года передо мной встала необходимость создать небольшой динамический веб-сайт сообщества, занимающегося организацией концертов. Поскольку я в то время был еще практически зеленым школьником на 1-м курсе ДонНТУ, то и знаний никаких в области Web-программирования у меня еще не было. Порывшысь в интернете, я пришел к выводу, что мне не обойтись без знаний HTML+CSS, а в качестве серверной составляющей был избран PHP как самая простая для изучения платформа серверного программирования.
Приобретя некоторый опыт создания небольших сайтов с "нуля", я перешел к использованию готовых "движков" в качестве основы для сайтов. На этом этапе я почувствовал, насколько неудобно сделана система программного кода в РНР. Файлы с исходными кодами можно вставить в любом месте кода и далее программе станут доступны функции и классы, описанные в файле, кроме того, еще и выполнятся директивы, которые находятся в этом файле, но не включены в состав функций или классов. Несомненно, опытные программисты не стали бы "разбрасывать" такие включения файлов где попало, но чаще встречается обратное.
Еще одним спорным вопросом является отсутствие жесткой типизации. С одной стороны это хорошо, но с другой - очень часто возникают ошибки связанные с неправильным, с точки зрения разработчика, приведением типов.
Упростить и, в некотором смысле, канонизировать структуру приложения на РНР позволяет библиотека Zend Framework от производителя РНР. Этот фрэймворк, позволяет довольно гибко настраивать и создавать приложение в рамках паттерна MVC (Model View Controller) или Model2. Наличие подобных качественных продуктов играет ключевую роль в развитии и популярности РНР как платформы. С их использованием, программирование становится даже, в некотором смысле, приятным. Все таки не зря на данный момент более чем 10 миллионов доменов в Интернет (не считая защищённых firewall-ами) используют в своих системах некоторые формы PHP (что фактически составляет около 26% всех Интернет доменов), " сообщает Бред Йонг (Brad Young) -- руководитель маркетингового отдела компании Zend -- " Для них PHP - главная составляющая в web-строительстве. PHP сообщество, как оценивают, насчитывает от 400,000 до 500,000 разработчиков во всем мире и интерес к PHP продолжает устойчиво расти.
После трех лет программирования на РНР, я открыл для себя мир Java и слово "мир" здесь очень уместно. Платформа J2EE (Java 2 Enterprise Edition) имеет внушительное \ прошлое, поклонников в виде целых корпораций, таких как Oracle, SAP, IBM, HP, Google и т.д. Это породило огромное количество библиотек и фрэймворков, которые доступны для платформы.
В процессе обучения языку, я написал небольшое приложения для управления складом аптеки (учет прихода/отпуска товара, распечатка накладных, чеков, налоговых накладных, ведение статистики, реестров и т.д.). Эту программу я даже умудрился продать за немалые для студента деньги в государственную аптеку одного из городов донецкой области, где она уже функционирует на протяжение 2-х лет. В процессе обучения и написания этой программы, я почувствовал мощь реализованной в Java парадигмы ООП (Объектно-ориентированное программирование), а также удобство в использовании как самого языка, так и библиотек для него. В то же время, обучение этому языку занимает намного больше времени. Java, как и любой другой серьезный инструмент требует определенного уровня начальной подготовки.
Весь этот год я занимался программированием для платформы J2EE в рамках работы в компании Exadel Inc. Выполняя самые разные задачи, я не раз убеждался в мощи, надежности и продуманности этой платформы.
Собственные наблюдения
Используя более чем по два года каждую из представленных технологий, у меня сложилось к ним определенное отношение. К безоговорочному преимуществу РНР можно отнести его легкость в изучении и простоту настройки рабочего окружения, малый расход памяти при работе. К недостаткам же я могу отнести отсутствие полной поддержки ООП, отсутствие жесткой типизации, отсутствие "состояния" между запросами, медленность. J2EE лишена перечисленных недостатков РНР, зато имеет огромный расход памяти во время работы (это одно из узких мест платформы). К достоинствам можно отнести мощь "самого объектно-ориентированного" языка программирования Java, наличие спецификаций и соответствие спецификациям (Java Specification Request). Но, не стоит забывать, что J2ЕЕ - это платформа уровня предприятия, где она безоговорочный лидер, а РНР больше подходит для небольших сайтов, где он привлекателен скоростью разработки.
Я попытался структурировать преимущества и недостатки РНР и Java
Языковые инструменты
Редакторы
- Java имеет много мощных редакторов: Eclipse, Netbeans и IntelliJ. Для управления исходным кодом большого проекта, мощный редактор имеет важное значение.
- PHP имеет плагин для Netbeans и Eclipse, но очень ограниченный.
Отладка
- Все Java IDE позволяют вам отлаживать проект внутри редактора.
- PHP располагает только редакторами вывода для отладки.
Сборка и развертывание
- Java обладает множеством инструментов для сборки и развертывания: Ant, Maven, Editors, Web Start etc.
- Java имеет сборочные требования: Web archive Files (war), Java Archive Files (jar).
- Компиляция и упаковка защищает Ваши права интеллектуальной собственности.
- РНР - это просто файлы и никакой концепции сборки и упаковывания.
Безопасность
- Серверы приложений Java отвечают за реализацию модели безопасности. Каждое приложение выполняется в своем собственном контейнере.
- Java / JVM имеет свою обширную систему безопасности.
- Нет гарантии безопасности от PHP: Администраторы могут запустить PHP в режиме CGI, чтобы избежать кошмара. То есть, отдельный процесс движка PHP будет появляться в памяти по каждому новому клику на страницы
Производительность
- JVM оптимизирован по производительности и памяти: Just-In-Time-компиляция (JIT)
- Java компилирует JSP файлы и JITs горячих точках автоматически.
- PHP обрабатывает файл и выходной поток для каждого вызова. Нет компиляции. Кроме того, в CGI-модели компиляция не имеет смысла.
- JVM имеет систему сборки мусора (Memory Management).
- JVM имеет механизм кэширования объектов.
- В Java Application Server, вы можете сделать пулы соединений. То есть, пулы соединения могут быть доступны различным клиентским запросам.
- В Java, сессия сохраняется на сервере для клиента, тогда как в модели CGI она разрушается каждый раз.
Ссылки
А вот, что думают о противостоянии Java vs. PHP другие люди:
PHP vs Java – война закончена
PHP vs. Java … and why I hate Java
PHP vs Java for Webapps- Quality & Maintainability of Code