Среда, 17.06.2026, 10:14
Приветствую Вас Гость | RSS
Поиск по каталогу
Главная страница | Каталог статей | Регистрация | Вход

Информационные технологии
Форма входа
Меню сайта

Категории каталога
php [246]
perl [1]
perl
ASP [1]
AJAX [0]

Друзья сайта

Наш опрос
Оцените мой сайт
Всего ответов: 69

Начало » Статьи » Web программирование » php

PHP против ASP - В примерах, господа!
Привет всем!



Написал несколько проектов на 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>


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



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



А теперь тот же код на РНР:



<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 вначале должна резко падать, потом расти и в конце концов остановиться на определенном уровне. В случае с РНР чем больше код тем больше дебага, поэтому скорость спустя некоторое время с первоначально большого уровня должна начать падать, причем не удивлюсь если она будет падать пропорционально квадрату обьема кода.



За сим откланиваюсь.
Категория: php | Добавил: freeone (09.05.2007) | Автор: Goodman
Просмотров: 651 | Рейтинг: 0.0 |

Всего комментариев: 0
Имя *:
Email *:
Код *:

Copyright Информационные технологии © 2006