Сравнение php и asp.net технологий

Автор работы: Пользователь скрыл имя, 26 Июня 2013 в 17:36, реферат

Описание работы

На сегодняшний день у разработчиков веб-сайтов есть богатый выбор относительно того, какой язык (или технологию) использовать для создания сайта. Вариантов много: Perl, PHP, ASP, ASP.Net, JSP, Coldfusion… Самыми распространенными (с большим отрывом от остальных) сегодня являются PHP и ASP.Net.
Поскольку автор имеет большой опыт разработки с применением обеих технологий, хотелось бы максимально объективно провести сравнение между этими двумя платформами.

Файлы: 1 файл

PHP против ASP.docx

— 34.17 Кб (Скачать файл)

PHP против ASP.Net - что  лучше?

14 мая 2010

На сегодняшний день у  разработчиков веб-сайтов есть богатый  выбор относительно того, какой язык (или технологию) использовать для  создания сайта. Вариантов много: Perl, PHP, ASP, ASP.Net, JSP, Coldfusion…  Самыми распространенными (с большим отрывом от остальных) сегодня являются PHP и ASP.Net. Поскольку я имею большой опыт разработки с применением обеих технологий, мне хотелось бы максимально объективно провести сравнение между этими двумя платформами.

 
Краткое описание обеих технологий

PHP

PHP (Hypertext Preprocessor) – язык  для написания серверных сценариев  (скриптов). Интерпретатор языка  бесплатен, с открытым исходным  кодом, созданы версии для различных  веб-серверов – прежде всего,  для Apache и Internet Information Services. Актуальная  на сегодняшний день версия  интерпретатора – PHP5. В последнее  время этим продуктом заинтересовалась  и Microsoft – началось тесное сотрудничество  с фирмой Zend, в результате которого  появилась встроенная поддержка  PHP в Internet Information Services 7-й версии (поставляется  с Windows Server 2008) – ранее PHP можно  было использовать только как  внешнее расширение.

ASP.Net

ASP.Net (Active Server Pages .Net) – средство  для разработки веб-приложений  от Microsoft. ASP.Net – это не язык  программирования, это технология, включающая в себя множество  компонент. Актуальная сегодня  версия – 4. Стоит заметить, что  ASP.Net кардинально отличается от  своего предшественника – ASP. Принцип работы ASP.Net-приложения совершенно  иной и будет рассмотрен далее. 
Сразу отвечу на возможный вопрос – как можно сравнивать эти две технологии, ведь принцип их работы кардинально отличается. Тем не менее, эти технологии решают одну задачу – создание веб-сайтов, и неважно, какими средствами это достигается. Можно было бы  сравнить PHP со «старым» ASP (не .Net), но он уже практически нигде не используется и поэтому не включен в обзор.

 
Общие принципы работы

PHP

PHP в чистом виде –  это язык, который позволяет динамически  выводить HTML-разметку и иную информацию (например, заголовки для Cookie и  др.). Например:

<?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._Default" %> 

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  

 

<html xmlns="http://www.w3.org/1999/xhtml" >

<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 сам по себе является  языком программирования. Используется  си-подобный синтаксис, отсутствует  типизация переменных, в 5-й версии  значительно улучшена поддержка  объектно-ориентированного программирования.

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 году), а устанавливать приложение-менеджер возможность имеется не всегда.

Информация о работе Сравнение php и asp.net технологий