Автор работы: Пользователь скрыл имя, 26 Июня 2013 в 17:36, реферат
На сегодняшний день у разработчиков веб-сайтов есть богатый выбор относительно того, какой язык (или технологию) использовать для создания сайта. Вариантов много: Perl, PHP, ASP, ASP.Net, JSP, Coldfusion… Самыми распространенными (с большим отрывом от остальных) сегодня являются PHP и ASP.Net.
Поскольку автор имеет большой опыт разработки с применением обеих технологий, хотелось бы максимально объективно провести сравнение между этими двумя платформами.
PHP против ASP.Net - что лучше?
14 мая 2010
На сегодняшний день у разработчиков веб-сайтов есть богатый выбор относительно того, какой язык (или технологию) использовать для создания сайта. Вариантов много: Perl, PHP, ASP, ASP.Net, JSP, Coldfusion… Самыми распространенными (с большим отрывом от остальных) сегодня являются PHP и ASP.Net. Поскольку я имею большой опыт разработки с применением обеих технологий, мне хотелось бы максимально объективно провести сравнение между этими двумя платформами.
Краткое описание обеих технологий
PHP
PHP (Hypertext Preprocessor) – язык
для написания серверных
ASP.Net
ASP.Net (Active Server Pages .Net) – средство
для разработки веб-приложений
от Microsoft. ASP.Net – это не язык
программирования, это технология,
включающая в себя множество
компонент. Актуальная сегодня
версия – 4. Стоит заметить, что
ASP.Net кардинально отличается от
своего предшественника – ASP.
Принцип работы ASP.Net-приложения совершенно
иной и будет рассмотрен далее.
Сразу отвечу на возможный вопрос – как
можно сравнивать эти две технологии,
ведь принцип их работы кардинально отличается.
Тем не менее, эти технологии решают одну
задачу – создание веб-сайтов, и неважно,
какими средствами это достигается. Можно
было бы сравнить PHP со «старым» ASP (не .Net),
но он уже практически нигде не используется
и поэтому не включен в обзор.
Общие принципы работы
PHP
PHP в чистом виде –
это язык, который позволяет динамически
выводить HTML-разметку и иную
<?php
print “<p>Hello, world!</p>”;
?>
Возможна вставка PHP-кода в обычную
статическую HTML-разметку:
<body>
<table>
<tr><td>
<?php
print “I am content!”;
?>
</td></tr>
</table>
</body>
Таким образом, разработчик сам заботится
о всей формируемой разметке.
ASP.Net
В отличие от PHP, здесь принцип работы совершенно иной – каждая страница состоит из двух файлов: файла с HTML-разметкой и ASP.Net-контролами (файл с расширением Aspx) и логики (расширения vb или cs). Идея такова: в файле разметки – только разметка (фактически, описание внешнего вида страницы), в файле логики – только логика (программный код). И хотя можно и добавлять программный код в файл разметки, и в файле логики формировать HTML-разметку (фактически, использовать подход, аналогичный PHP), поступать так не рекомендуется – нарушается общая идея – отделение внешнего вида страницы от логики. Например, так выглядит файл с разметкой:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1._
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/
<html xmlns="http://www.w3.org/1999/
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="MyLabel" runat="server" Text=""></asp:Label><br />
<asp:Button ID="MyButton" runat="server" Text="Нажми меня!"OnClick="MyButton_Click" />
</div>
</form>
</body>
</html>
Соответствующий ей файл с бизнес-логикой:
namespace WebApplication1
{
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void MyButton_Click(object sender, EventArgs e)
{
MyLabel.Text = "Кнопку нажали";
}
}
}
Как видно, в странице присутствуют
теги, не свойственные HTML. Это – так
называемые контролы ASP.Net. При компиляции
они «рендерятся» в обычную HTML-разметку.
Например, asp:Button или asp:TextBox будут преобразованы
в <input type="text" />, asp:Hyperlink – в
<a href="..."> и т.п. Каждый серверный
контрол обладает некоторыми свойствами,
например, содержимым, стилями и
т.п.
Все созданные на странице серверные контролы
доступны в файле с бизнес-логикой. Например,
в примере выше программно осуществляется
доступ к элементу MyLabel и задается его
содержимое. Эти операции осуществляются
на этапе компиляции страницы и к пользователю
в броузер приходит готовая HTML-разметка.
Сравнение
Даже по объему текста для
каждой из технологий видно, что понять
принципы работы PHP гораздо проще, нежели
ASP.Net. На мой взгляд – это одна
из главных причин, почему PHP сейчас
более распространен. «Порог вхождения»
у PHP гораздо ниже, и новичку гораздо
проще понять его принципы работы,
чем сложную модель ASP.Net. Считать
ли это достоинством или недостатком
PHP? На мой взгляд, в данной ситуации
есть и то, и другое.
Достоинством является простота изучения,
однако она же является и недостатком:
это приводит к тому, что низкий уровень
разработчиков в PHP встречается гораздо
чаще, чем ASP.Net. Если у программиста недостаточно
опыта или знаний – то язык PHP он все равно
освоит, в то же время при использовании
ASP.Net возникнут трудности. Это означает,
что обращаясь к PHP-разработчику, шанс
получить низкокачественный продукт выше,
чем в случае ASP.Net.
К несомненным достоинствам PHP я бы отнес
его «низкоуровневость». В отличие от
PHP, ASP.Net – попытка Microsoft применить при
разработке Web-приложений те же принципы,
что и при разработке Windows-приложений.
Например, на страничке создается кнопка,
для которой пишется обработчик события,
который при нажатии, например, меняет
текст у какого-нибудь серверного контрола,
и так далее. Но такая модель не совсем
применима при разработке веб-приложений.
Протокол HTTP – это сеансовый протокол,
работающий по принципу запрос-ответ.
А Windows-приложения работают непрерывно
(проводя аналогию, можно сказать, что
они используют постоянное соединение).
Поэтому для реализации аналогичного
подхода пришлось применять множество
абстракций и приемов. Все эти абстракции
призваны скрыть «сеансовость» протокола
HTTP. Достоинством их является то, что значительно
ускоряется процесс разработки веб-приложения.
Но если программист начинает изучение
веб-разработки с ASP.Net – весьма вероятно,
что он не сразу поймет истинные (физические)
принципы работы веб-приложений. Например,
если нужно получить от посетителя сайта
какие-нибудь данные и обработать их (например,
записать в базу данных), PHP-разработчику
приходится создать html-форму, соответствующий
скрипт, который получит от нее данные,
обработает их, и вернет посетителю ответ,
также в виде html-разметки – так и работают
все веб-приложения: запрос-ответ. Если
аналогичную задачу решает ASP.Net-разработчик,
то форма за него уже создана, он лишь добавляет
поле для ввода и кнопку, на которую прикрепляет
обработчик события, в котором выполняются
нужные действия по обработке введенных
данных.
Очень похоже на то, как бы задача решалась
в Windows-приложении. И начинающий разработчик
может и не знать, что на самом деле при
нажатии на кнопку реально произойдет
отправка данных с формы, они будут автоматически
обработаны, затем будет выполнена его
логика (которую он поместил в обработчик
события), после чего, опять же, автоматически
будет выполнено формирование ответной
HTML-разметки, которую получит посетитель.
Иными словами, начиная изучение сферы
веб-строительства с PHP, программист раньше
поймет и увидит реальные принципы работы
Web, чем программист ASP.Net, от которого эти
самые принципы пытаются скрыть.
Языки программирования
PHP
PHP сам по себе является
языком программирования. Используется
си-подобный синтаксис,
ASP.Net
При создании веб-приложений ASP.Net можно использовать любой язык из платформы .Net – C# или Visual Basic.Net. Доступна вся функциональность библиотеки .Net Framework.
Сравнение
На мой взгляд, здесь
со значительным перевесом выигрывает
ASP.Net.
Во-первых, по возможностям PHP далеко позади
от .Net-языков. Например, хотя в PHP5 (который
вышел лишь летом 2004 года) и была значительно
улучшена поддержка объектно-ориентированного
программирования, но она по-прежнему
слабее, чем в .Net, где языки (по крайней
мере, C# и VB.Net) являются полностью объектными.
В них нельзя создать просто функцию –
только метод класса, нельзя создать просто
переменную – только атрибут класса и
т.п. В PHP нет перечислений (enum), нет событий
(«ручное создание» нельзя считать событиями,
т.к. фактически встроенной возможности
программирования с использованием модели
событий нет), нет возможности перегружать
методы (вследствие отсутствия типизации
в языке) – это лишь некоторые неприятные
особенности, с которыми приходится сталкиваться,
используя PHP после серьезных объектно-ориентированных
языков. В PHP нет поддержки многопоточности,
есть проблемы с поддержкой Unicode (она есть,
но реализована неудобно для разработчика,
эту проблему обещают исправить в PHP6).
Во-вторых, PHP гораздо менее строгий язык,
чем .Net-языки. В первую очередь – из-за
отсутствия типизации. Переменные объявлять
необязательно. В результате – множество
опасных конструкций, которые не скомпилируются
даже в компиляторе Си, в PHP будут выполнены,
с непредсказуемым результатом. Некоторые
из ошибок (например, неинициализированные
переменные) можно увидеть, если включить
режим отображения всех ошибок (error_reporting=all),
но об этом нужно знать и помнить. Если
человек начинает изучение программирования
с PHP, то далеко не факт, что он будет информирован
о необходимости «дополнительной настройки».
К тому же, я часто встречал такое, что
начинающему программисту просто надоедают
постоянные Notice об ошибках, и он их отключает.
Часто в таких случаях сайт по-прежнему
работает, и, возможно, даже правильно
работает. Но рано или поздно возникнет
такая ситуация, когда пропущенная ошибка
приведет к серьезным последствиям (взлом,
некорректность работы и т.п.). В .Net-языках
такое сделать не получится: пока не будет
исправлена ошибка – программа не скомпилируется.
Кроме того, в PHP нет исключений, выкидываемых
самим интерпретатором. Например, если
в .Net вы попытаетесь обратиться к несозданному
объекту (ссылка есть, а new вызвать забыли),
то у вас произойдет исключение. В PHP в
лучшем случае вы увидите предупреждение
(если вы не забыли настроить их отображение).
Кардинальное отличие заключается в том,
что исключение вы не пропустите никак
– вместо ожидаемой страницы вы получите
информацию о том, что возникла ошибка.
В PHP к исходной странице где-нибудь будет
добавлено сообщение с предупреждением.
Его можно легко не заметить – например,
если сообщение появится в малозаметном
месте, или внизу страницы, куда вы редко
заглядываете и т.п.
Даже если PHP -программист – опытный и
знает обо всех тонкостях, описанных выше,
по-прежнему существует человеческий
фактор. Например, расстался разработчик
вчера с девушкой, но работать надо. Однако
во время работы программист не сконцентрирован
на программе, мысли совсем о другом –
повышается вероятность того, что он забудет
где-то что-то проверить. Во многих случаях
это может остаться незамеченным – интерпретация
в PHP произойдет успешно. А в ASP.Net ошибку
не пропустить, т.к. либо не пройдет этап
компиляции, либо произойдет исключение.
PHP дает разработчику столько вольностей
(потенциально опасных), что я бы крайне
не рекомендовал изучение программирования
(именно программирования, а не веб-разработки)
с PHP. Лучше всего начать с серьезного типизированного
языка (например, тот же Си), а потом уже
переходить на PHP, имея привитые полезные
привычки (всегда объявлять и инициализировать
переменную, не игнорировать предупреждения
интерпретатора и т.п.).
То, что о чем в PHP нужно всегда помнить,
в .Net-языках за вас проверяет компилятор.
Пока не будет исправлена ошибка – программа
не скомпилируется.
Коснусь вопроса производительности.
В ASP.Net исходный код компилируется единожды
в исполняемый байт-код, в PHP – интерпретируется
каждый раз. Согласно этому, ASP.Net должен
работать быстрее, однако реальные тесты
показывают примерно равную производительность.
В некоторых случаях какая-то из технологий
вырывается вперед, однако в целом можно
сказать, что в этом вопросе технологии
примерно равнозначны. К тому же, нельзя
забывать о том, что время генерации страницы
– это еще и время выполнения запросов
в базу данных, которое может быть на порядок
больше времени интерпретации и не зависит
от используемого языка программирования.
Среды разработки
PHP
Под язык PHP существует множество сред разработки: родная Zend Studio, версия Eclipse для PHP, плагин под Visual Studio и т.п. Все они являются довольно развитыми средами с поддержкой множества современных возможностей сред разработки.
ASP.Net
Основной продукт, который используется для разработки веб-приложений на ASP.Net – это Microsoft Visual Studio. Есть и сторонние средства разработки, но они получили гораздо меньшее распространение.
Сравнение
Вообще среда разработки
– это дело вкуса и привычки.
По большому счету, все продукты как
для PHP, так и для ASP.Net имеют встроенную
подсказку (Intellisense), возможность доступа
к базе данных, возможность отладки
и т.п.
Однако несколько различий все же имеется.
В разработке любых приложений очень помогает
Intellisense, если ей научиться правильно пользоваться.
Но в PHP она сама по себе не может так быть
широко использована, как в ASP.Net – опять
же, потому, что PHP – не типизированный
язык. Например, у вас есть переменная-объект,
которую вы получили не вызовом New, а вызовом
метода, который вернул этот объект. В
случае с ASP.Net известно, какого типа объект
возвращает каждый метод, и Intellisense далее
сможет подсказать вам атрибуты и методы
у созданного объекта. В PHP такое неосуществимо:
нет типизации – значит неизвестно, данные
какого типа возвращает метод. Конечно,
это можно в комментариях указать принудительно.
Но это требует лишней работы, лишнего
времени – общая производительность программиста
снижается.
После того, как я «распробовал» Visual Studio,
мне захотелось чего-то подобного для
PHP. Я узнал, что есть такой продукт, как
Zend Studio. Загрузил, начал установку – выяснилось,
что восклицательный знак в имени пользователя
Windows не позволит выполнить ее успешно.
Пришлось создать новую учетную запись
и устанавливать среду из-под нее. Но главное,
что заставило меня удалить Zend Studio через
2 часа после установки – это ее медленная
работа. Нередко перед выводом подсказки
Intellisense задумывалась на 3-6 секунд. Скорее
всего, сейчас эта проблема устранена,
но с Visual Studio такого не было с момента ее
появления. Вскоре я нашел плагин для работы
с PHP под Visual Studio и по сегодняшний день
пользуюсь им.
Резюмируя, можно сказать что в целом ситуация
со средами разработки под обе платформы
схожа, за исключением некоторых описанных
выше нюансов.
Цены
PHP
Общеизвестно, что весь LAMP-стек (Linux Apache Mysql PHP) бесплатен. Бесплатны Unix-подобные операционные системы, бесплатен веб-сервер Apache, бесплатен интерпретатор PHP и бесплатна база данных MySQL (за исключением ее коммерческого использования, в этом случае лицензией предусмотрена оплата за базу данных). Со средами разработки ситуация иная. Например, Zend Studio – платный продукт. За Zend Encoder, который позволяет защитить приложение путем его компиляции, тоже нужно платить.
ASP.Net
В отличии от Unix-платформы, общепринят стереотип «все от Microsoft платно и дорого». Раньше ситуация действительно была близка к истине. Но сейчас все изменилось. Например, Express-версия Visual Studio полностью бесплатна и обладает довольно широкими возможностями. Также бесплатна и Express-версия SQL-сервера (которая имеет весьма несущественные ограничения, вроде поддержки баз только до 4 Гб, но если у вас проект настолько масштабный, что этого объема не хватает – скорее всего, и средства в него вкладываются серьезные, на фоне которых стоимость платной версии может оказаться невысокой). Проводится множество акций, в рамках которых можно получить бесплатно операционные системы, среды разработки т.п. Реализуется множество студенческих программ, программ сотрудничества с ВУЗами, научными центрами и т.д. Одним словом, за последние несколько лет Microsoft сделала свои продукты значительно более доступными.
Сравнение
В целом ситуация описана
выше.
Несколько лет назад Windows-хостинг стоил
дороже, чем Unix-хостинг. Но сейчас цены
сравнялись – вы можете убедиться в этом
сами, просмотрев тарифы ведущих хостинг-компаний
(например, «Мастерхост»). Кстати, возможностей
у Windows-хостинга больше: почти любой из
них поддерживает как ASP.Net, так и PHP. В то
же время Unix-хостинг не позволит вам использовать
приложения ASP.Net.
Базы данных
PHP
Традиционно вместе с PHP используется база данных MySQL. В более редких случаях – PostgreSQL, имеющая более широкие возможности.
ASP.Net
Чаще всего ASP.Net-приложения используют сервер баз данных от Microsoft – Microsoft SQL Server.
Сравнение
Обе технологии позволяют
работать с любыми базами данных. В
PHP есть возможность работы с Microsoft SQL
Server, и из ASP.Net-приложений можно обращаться
к MySQL или к любой другой базе данных.
Но поскольку чаще всего встречаются
связки, описанные выше – вкратце
коснемся сравнения MySQL и Microsoft SQL Server. Здесь
с большим перевесом выигрывает
сервер от Microsoft. Возможностей у их сервера
значительно больше. Например, поддержка
процедур и триггеров в MySQL появилась
лишь с выходом 5-й версии в 2005 году.
У Microsoft SQL Server эта возможность была
уже в 90-х годах.
Единственным преимуществом MySQL может
казаться бесплатность, но этот вопрос
поднимался ранее. Express-версия Microsoft SQL
Server также бесплатна и имеет следующие
ограничения: использует не более одного
процессора (физического, т.е. если процессор
один, но двухядерный – будут использоваться
оба ядра), не более 1 Гб оперативной памяти
и размер самой базы данных ограничен
цифрой в 4 Гб. Но разумно предположить,
что если в вашем проекте этих цифр мало
– то этот проект довольно масштабный,
и средства позволяют приобрести более
серьезную версию.
И еще одна приятная особенность MySQL (будучи
использованным вместе с PHP) – это наличие
веб-интерфейса для доступа к базе данных
– phpMyAdmin. Подобного продукта для Microsoft
SQL Server нет (есть только старая версия от
Microsoft, последний выпуск которой состоялся
в 2004 году), а устанавливать приложение-менеджер
возможность имеется не всегда.