Навигация
Главная
Поиск
Форум
FAQ's
Ссылки
Карта сайта
Чат программистов

Статьи
-Delphi
-C/C++
-Turbo Pascal
-Assembler
-Java/JS
-PHP
-Perl
-DHTML
-Prolog
-GPSS
-Сайтостроительство
-CMS: PHP Fusion
-Инвестирование

Файлы
-Для программистов
-Компонеты для Delphi
-Исходники на Delphi
-Исходники на C/C++
-Книги по Delphi
-Книги по С/С++
-Книги по JAVA/JS
-Книги по Basic/VB/.NET
-Книги по PHP/MySQL
-Книги по Assembler
-PHP Fusion MOD'ы
-by Kest
Professional Download System
Реклама
Услуги

Автоматическое добавление статей на сайты на Wordpress, Joomla, DLE
Заказать продвижение сайта
Программа для рисования блок-схем
Инженерный калькулятор онлайн
Таблица сложения онлайн
Популярные статьи
OpenGL и Delphi... 65535
Форум на вашем ... 65535
21 ошибка прогр... 65535
HACK F.A.Q 65535
Бип из системно... 65535
Гостевая книга ... 65535
Invision Power ... 65535
Пример работы с... 65535
Содержание сайт... 65535
ТЕХНОЛОГИИ ДОСТ... 65535
Организация зап... 65535
Вызов хранимых ... 65535
Создание отчето... 65535
Имитационное мо... 65535
Программируемая... 65535
Эмулятор микроп... 65535
Подключение Mic... 65535
Создание потоко... 65535
Приложение «Про... 65535
Оператор выбора... 65535
Реклама
Сейчас на сайте
Гостей: 9
На сайте нет зарегистрированных пользователей

Пользователей: 13,372
новичок: vausoz
Новости
Реклама
Выполняем курсовые и лабораторные по разным языкам программирования
Подробнее - курсовые и лабораторные на заказ
Delphi, Turbo Pascal, Assembler, C, C++, C#, Visual Basic, Java, GPSS, Prolog, 3D MAX, Компас 3D
Заказать программу для Windows Mobile, Symbian

База данных склада на Delphi + Схема БД
Игра Sokoban на Delphi + Блок схемы
Информационная система - продуктовый магазин на Turbo Pascal (База данны...

PHP против ASP - В примерах, господа!
Данная статья является комментарием к статье «PHP против ASP - делайте ставки, господа!». Из-за его объема и полноты мы решили вынести этот комментарий в отдельную статью.
Goodman, goodman@melodyland.ru

Ну привет всем.

Написал несколько проектов на PHP. К сожалению ни один не дожил до сегодняшнего дня. Был проект Melodyland, написанный на ASP, www.melodyland.ru , я частично переписал его на ASP.NET (C#) . Сейчас пишу свой сайт на ASP.NET www.melodyland.ru/goodman (потом переедет, сейчас только можно посмотреть фотки, там идет выборка по базе данных). Все работает на связке Win2000+IIS+MS SQLserver2000. Машинка - 500 целерон, 128 памяти чего слышу? ну да ладно, все равно не моя. Оба АСП на ней летали при загрузке 30-50 пользователей на сайте (АСП.НЕТ летал после первичной компиляции).

Ощущения. РНР-скрипт запросто можно написать болкнотом, открывая книжку. ASP.NET без Studio и MSDN (а также в особо тяжелых случаях - Инета) бесполезен (видимо, поэтому и компилятор бесплатен... хех). Большая часть работы в Студио заключается в том, что ты все время учишься использовать жутко навороченную классовую модель и при этом лазишь, лазишь и еще раз лазишь по МСДН. Можно сказать, что треть времени разработчик сидит в МСДНне.

Зато потом... счетчик посещений? - пожалуйста, 5 строчек. Добавить сюда татакую же таблицу? Пожалуста, два щелчка мышкой, 10 строчек. Другой вывод? Пожалуста! Нестим класс, перекрываем процедуру, отлаживаем 5 минут, готово, привязываем к выводу второй таблицы, смотрим. Абстрактно ощущения от работы с .NET - что-то среднее между Delphi и C++

- все время ищещь компоненты, но, при этом головой тоже работать приходится, писать самому. Причем держать схему проекта в голове надо постоянно. Потому что если что забудешь- работа, с того момента, как забыл, становится бессмысленной и приходится возвращаться к "контрольной" точке. Сламое главное в .NET - это стадия плаирования, как общего, так и частного. Без нее все рухнет. Именно поэтому .NET плохо подходит одиноким программистам или маленьким группам (маньяки типа меня, свято верящие в светлое будущее M$, не считаются). Территория .NET - это гигантские, бытро и постоянно расширяющиеся инет-проекты, где один программист в лучшем случае отвечает за один модуль. Ну скажите где еще вы найдете, чтобы в проекте люди писали на разных языках? Только в проектах, которые могут позволить себе нанять профи, пишущего на языке, отличном от проектного основного. Производительность? Не хватает ресурсов? Купим еще компьютеров, лишь бы темпы не падали. Вот в таких проектов РНР-программистам точно труба дело. Почему: потому что им потребуется куча координаторов, которым денег платить нада. Координаторов, большую часть работы которых берет на себя .NET

И, кстати, большинству unix-систем там тоже делать нечего (не надо плеваться! Stand-alone - это прекрасно, но все знают, что сделать кластер на юнихе намного сложнее, и соответственно, денег уйдет больше. Я НЕ говорю о гигантских суперкомпьютерах, я говорю о парке в 20-50 машин), потому что за то время, пока сисадмины на FreeBSD подключат к кластер-серверу дополнительные машины, програмисты на Win уже давно будут писать следующий модуль. Автоматизация взаимодействия между машинами на WinServ2003 - одна из сильнейших сторон этой системы.

Теперь PHP. Если коротко охарактеризовать ощущения от работы с ним - это постоянный дебаг. И дело даже не в том, что нормальная IDE наконец-то выпустили совсем недавно (zend.com),

дело в том, что сам язык так устроен, что в нем очень легко допускать серьезные логические ошибки. Вот пример, который недавно прислала мне однокурсница, попросив помочь:
<p>
<?
$bukvi = "abcdefguihuiy";
$stroka = "abcdrrrrrrrrrrrrrrr";
echo $stroka[0]; echo "<br>";
echo $bukvi[0]; echo "<br>";

if ( $srtoka[0] == $bukvi[0] )
echo "совпадают";
else
echo "не совпадают";
?>
</p>

Сценарий работает, но работает неправильно.

Даже примитивная опечатка приводит к логической ошибке, которой в C# никогда бы не было в принципе. Вообще, в РНР обьявление переменных отсуствует как класс, что с моей точки зрения, большой минус.

Итак, в РНР, написав скрипт вы обязательно будете сидеть над ДЕБАГОМ, причем делать его придется руками через вывод чего надо в промежуточных местах алгоритма.

Порой найти ошибку очень сложно, особенно когда она появляется только при определенных обстоятельствах, ее можно вообще не выявить до сдачи проекта. В этом минус РНР, в этом же его плюс.

За то время, пока вы в С# будете реализовывать нужные классы, сидеть над их документацией и реализацией, приводить типы и писать всякие интерфейсы для коллекций, чтобы потом одним махом за 5 минут написать страницу,в РНР вы ту же страницу 10 раз напишете. Только вот незадача: следущая такая же страница на ASP.NET делается так же за 5 минут, а в РНР приходится затрачивать все то же время. Нужно визуально в выводе что-то на странице изменить - в АСП.НЕТ 5 минут, а в РНР - придется искать и править вывод echo. Придет другой программер и, немного поразбиравшись с вашими классами, и даже не заглядывая в их устройство сможет создать такую же страницу за 5 минут, а программист на РНР предпочтет скорее переписать все заново, чем разбираться в вашем коде.

Надеюсь, по принципам программирования все понятно. Теперь о скорости. Здесь и говорить нечего - РНР летает. Я юзал его через IIS5, IIS6, РНР 4.3 (Win). Почему не через Апач? Потому что удобнее, когда дома можешь тестить и асп и РНР. Потому что виндовый апач я так и не смог нормально запустить службой - он активно оставлял различные ворнинги о нехватке памяти в журнале (хотя и работал). И вообще, потому что ИИС удобнее. Так вот, РНР летает (хотя дотнет после первичной компиляции тоже не особо тормозит). Одни и те же функции РНР выполняет от 10 до х.з сколько % быстрее. Но вот работа с базами данных, отличных от MySQL не особо порадовала. С MS SQL ASP.NET быстрее, причем намного. Через OLE они работают одинаково. ODBC - РНР тормозит. А что такое MySQL? Возможно, я ошибаюсь, но ни для какого БД-сервера я не видел столько багфиксов и статей про критические уязвимости. Со скоростью мне тоже непонятно, не удалось, да и не было времени протестить связки PHP+MySQL и ASP.NET+SQLServer, однако я так понимаю, что в данном случае все очевидно, т. к. скорость никогда не была сильной стороной Микрософта . Впрочем, слабой тоже (кто не согласен - могут потестить различные проги под, например Redhat 8 и WinXp. Я точно уверен насчет кваки и пары-других приложений).

MSSql - это абсолютно нормальный, выделяющийся достаточно большой стабильностью работы и хорошими возмоностями масштабирования сервер, орриетированный на фирмы и небольшие предприятия. Кому нужен ОЧЕНЬ серьезная СУБД- могут идти к Ораклу. А MySQL - это скорее Stand-alone-ориентированная СУБД, как раз то что нужно для не очень больших серверов (что отнюдь не означает, что на них не могут выполняться серьезные приложения...). Все это плюс бесплатность MySQL и РНР, плюс скорость работы этой связки без сомнения делают их ИДЕАЛЬНЫМИ для маленьких и средних проектов, в которых участвуют несколько или небольшая группа (очень желательно, чтобы сработавшихся) программистов. И для одиночек тоже. У средне-больших или больших-гигантских проектов с РНР очень вряд ли что-то получится за деньги, меньшие или равные, что придется выложить за лицензию Microsoft. Тем же, кому нужны гигантские проекты, просто пойдут и закажут их у HP, IBM или Sun.

А у РНР есть еще один козырь - это система, на которой по умолчанию все должно запускаться - *nix подобная. Во-первых, большинство из них бесплатные или стоят меньше Win (хотя админы для них стоят дороже на 20-50% в месяц; поддержка тоже стоит денег, причем неслабых). Во- вторых, хотя я с пеной у рта буду долго спорить, по поводу того, что устойчивее в целом Unix ведет себя предсказуемее. В - третьих, в нашей стране до фига непонятных людей, которые способны ради удовольствия иметь СВОЮ систему терпеть различные тормоза, сидеть под риском, что твою ветку закроют (это я про Linux), без конца копаться в man'ах и говорить, когда к ним приходишь "а я не могу подключить твой зард, на нем NTFS, приноси комп с сетевухой" (это я тоже про линукс; почему-то я свои FreeBSD'ные партиции в конце концов смог подключить к винде). Дабы не спорить насчет устойчивости могу сказать: в одной компании, где я работал, Wi

Win2000, державшая на IIS 250 динамических (ASP) веб-сайтов за три года упала всего раз, и то на пару часов, потребовалась лишь переустановка самого IIS. В другой сервер на FreeBSD стабильно падал пару раз в месяц, причем пару раз насмерть, поэтому я абсолютно уверен, что стабильность системы зависит вовсе не от типа ОС, а от наличия или отсутствия кривых рук у сисадмина.

Таким образом, еще раз повторяю, что ASP.NET (и вообще вся .NET) - система для больших проектов (а киким еще нужно быть ПО УМОЛЧАНИЮ кроссплатформенными?).

Написав программу на C# ее будет очень легко портировать на Pocket PC, с небольшими изменениями перенести прямо в Web; для того, чтобы запустить ее на Linux, вообще уже ничего не нужно кроме Mono (www.mono-project.com).

Напоследок могу посоветоваь: зайдите на job.ru и посмотрите на ситуацию с вакансиями. На одну ASP, ASP.NET вакансию приходится 10-15 РНР - вакансий. Только вот ASP.NET-программеру сходу предлагают зарплату как минимум в 2 раза больше, чем РНР.

Как и должно быть. Гемморой стоит денег.

На прощание предлагаю вам 2 варианта одной и той же программы, написанной на ASP.NET и PHP. Обе они написаны "в лоб" (специально :) и решают одну и ту же задачу: вывод колчиества букв во введенной строке.

ASP.NET:
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace photos
{
/// <summary>
/// Summary description for WebForm6.
/// </summary>
public class WebForm6 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.TextBox TextBox1;
protected System.Web.UI.WebControls.Button Button1;
protected System.Web.UI.WebControls.Label Label1;

private void Page_Load(object sender, System.EventArgs e)
{
// Put user code to initialize the page here
}

#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: This call is required by the ASP.NET Web Form Designer.
//
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.TextBox1.TextChanged += new System.EventHandler(this.TextBox1_TextChanged);
this.Button1.Click += new System.EventHandler(this.Button1_Click);
this.Load += new System.EventHandler(this.Page_Load);

}
#endregion

private void TextBox1_TextChanged(object sender, System.EventArgs e)
{

}

private void Button1_Click(object sender, System.EventArgs e)
{

string alphabyte= "ABCDEFGHIJKLMNOPQRSTUVWXYZЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮЁ";
int[] count =new int[alphabyte.Length];//Массив-счетчик
string Text=TextBox1.Text;//Забираем данные
Text=Text.ToUpper();//Введенный текст к верхнему регистру
foreach (char t in Text)//Идем по строке как по массиву
{
for (int i=0; i<alphabyte.Length;i++)//Идем по массиву-счетчику
{
if (t==((char)alphabyte[i])) count[i]++;

}

}

//Вывод

for(int i=0; i<count.Length;i++)
{
if (count[i]!=0)
{
Response.Write("Буква "+alphabyte[i]+" встречается "+
Convert.ToString(count[i])+" раз <BR>");
}
}
}
}
}

Это только файл с программой; к счастью, большая его часть сгенерирована Visual Studio и собственно моя программа находится в обработчике Button1_Click

К нему прилагается еще шаблон HTML-файла, благодаря именно котрому можно почти мгновенно полностью менять дизайн страницы (пишушие на РНР оценят:)

Шаблон (вообще другой файл):
<%@ Page language="c#" Codebehind="WebForm6.aspx.cs"
AutoEventWireup="false" Inherits="photos.WebForm6" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<meta name="vs_snapToGrid" content="False">
<title>WebForm6</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema"
content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
<asp:TextBox id="TextBox1" style="Z-INDEX: 101; LEFT: 328px;
POSITION: absolute; TOP: 40px" runat="server"
Width="288px"></asp:TextBox>
<asp:Label id="Label1" style="Z-INDEX: 102; LEFT: 216px;
POSITION: absolute; TOP: 40px" runat="server"
Width="120px" Height="24px">Введите слово</asp:Label>
<asp:Button id="Button1" style="Z-INDEX: 103; LEFT: 632px;
POSITION: absolute; TOP: 40px" runat="server"
Width="128px" Text="Посчитать!"></asp:Button>
</form>
</body>
</HTML>

Перемещая теги <asp: ...> внутри страницы и произвольно помещая их в любое место, можно в любой момент изменить дизайн, не прибегая к помощи программиста вообще. В случае с РНР это практически невозм

В случае с РНР это практически невозможно

А теперь тот же код на РНР:
<form action="test_update1.php" method="POST">
Введите слово
<input type="text" name="str">
<input type="submit" name="submit" value="Посчитать">
<?php
$quiz_string=$_POST['str'];
if ($_POST['str'])
{

//$alphabyte='QWERTYUIOPASDFGHJKLZXCVBNMЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮЁ';
$quiz_string= strtoupper($quiz_string);
for ($i=0; $i<strlen(quiz_string);$i++)
{
for ($j=0; $j<strlen($quiz_string);$j++)
{
if ($quiz_string[$j]==$quiz_string[$i]) {$result[$j]+=1;}
}
}
echo '<br>';

for ($j=0; $j<strlen($quiz_string);$j++)
{
if (strlen($result[$j])!=0)
echo "Буква $quiz_string[$j] встречается $result[$j] раз<BR>";
//echo $quiz_string;

}
}

?>
</form>

И Все.

Мой общий вывод, не претендующий на обьективность: скорость разработки при применении ASP.NET вначале должна резко падать, потом расти и в конце концов остановиться на определенном уровне. В случае с РНР чем больше код тем больше дебага, поэтому скорость спустя некоторое время с первоначально большого уровня должна начать падать, причем не удивлюсь если она будет падать пропорционально квадрату обьема кода.

За сим откланиваюсь. Кто хочет продолжить дискуссию - пишите на goodman@melodyland.ru

Post Scriptum: Вот и пример багов, прямо на этом сайте. Человек, который разработаl
Опубликовал Kest November 06 2008 15:52:28 · 0 Комментариев · 9158 Прочтений · Для печати

• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •


Комментарии
Нет комментариев.
Добавить комментарий
Имя:



smiley smiley smiley smiley smiley smiley smiley smiley smiley
Запретить смайлики в комментариях

Введите проверочный код:* =
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.

Нет данных для оценки.
Гость
Имя

Пароль



Вы не зарегистрированны?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Поделиться ссылкой
Фолловь меня в Твиттере! • Смотрите канал о путешествияхКак приготовить мидии в тайланде?
Загрузки
Новые загрузки
iChat v.7.0 Final...
iComm v.6.1 - выв...
Visual Studio 200...
CodeGear RAD Stud...
Шаблон для новост...

Случайные загрузки
Советы по Delphi
Text effect
Converter AMR<->W...
Delphi. Разработк...
Ильдар Хабибуллин...
Scrrlcaptoin
IMtale
Экранная лупа
Фундаментальные а...
Delphi 6. Учебный...
Rotolabel
DateEdit
SUIPack
Приемы программир...
Векторный редакто...
База игр
Win-Prolog 3.618
Пример работы с б...
Delphi 2005 Секре...
Размещение элемен...

Топ загрузок
Приложение Клие... 100793
Delphi 7 Enterp... 98016
Converter AMR<-... 20298
GPSS World Stud... 17059
Borland C++Buil... 14238
Borland Delphi ... 10373
Turbo Pascal fo... 7390
Калькулятор [Ис... 6080
Visual Studio 2... 5228
Microsoft SQL S... 3674
Случайные статьи
Windows XP Profess...
В сети Fabrikam ос...
Активация
Ремонт планшетов
Верхнеприводная ме...
Обсуждение получен...
Интегрирование нов...
NonPOD-типы
Размеры классов с ...
3.1. Задачи
Определение решения1
Объекты классов [C++]
Виртуальные слоты
Новый корпус для д...
Физическая память
централизованное у...
Использование карк...
Опыты с силой прит...
Что необходимо уче...
Ограничения (Oracl...
Стандарт сжатия V....
Анализ слов
Разработать процед...
Продвижение сайтов...
Атака на отказ чер...
Статистика



Друзья сайта
Программы, игры


Полезно
В какую объединенную сеть входит классовая сеть? Суммирование маршрутов Занимают ли таблицы память маршрутизатора?