PHP4 або ASP.NET – що краще, HTML, XML, DHTML, Інтернет-технології, статті

У листі до нас Олексій Філатов відзначив, що вважає свій огляд суб’єктивним. На погляд же редакції, при всій неповноті статті, об’єктивності в ній куди більше, ніж в докладних дослідженнях, автори яких прагнуть довести собі та іншим, що одного разу обрана ними технологія краще за інших. Отже, що краще – PHP4 або ASP.NET – з точки зору незалежного веб-програміста? – Володимир Гурієв.

Трохи про себе. Я зробив пару невеликих проектів на PHP4 (на жаль, до сьогоднішнього дня жоден з них не дожив). Зате можу похвалитися завершеними сайтами, зробленими за технологією ASP.NET: Melodyland, який був переписаний мною з ASP на ASP.NET, і своїм “домашнім” сайтом, який був створений як тестовий майданчик для програмування на ASP.NET. Все працює на зв’язці Celeron 500 + 128 Мбайт RAM + Windows 2000 + IIS 5 + SQL Server 2000, і всупереч поширеній думці про тормознутості Windows, і ASP, і ASP.NET прекрасно функціонують при завантаженні 30-50 сесій. Що в цей час відбувається з віконним інтерфейсом – Інше питання, але самі сервіси літають.

ASP.NET – це не продовження ASP. Це концептуально нова технологія Microsoft, створена в рамках ідеології. NET. Ключовими сторонами. NET є масштабованість, кроссплатформность, міжмовне взаємодія і хитке поняття “безпечне програмування” (safe-programming).

PHP – навпаки, відкрита та безкоштовна технологія. Зрозуміло, розшифровувати сьогодні PHP як Personal Home Page було б неправильно, але відлуння минулого дають про себе знати і донині. PHP – скриптова мова, створена виключно для динамічного виведення HTML. Це не означає, що на ньому не можна створити великий проект. Це означає, що створити крупний проект на PHP дорого і важко.

Для програмування на PHP не потрібна дорога середу програмування. Щоб навчитися писати більш-менш працездатні скрипти, досить одного-єдиного підручника. З ASP.NET такий фокус не пройде. Без Visual Studio, MSDN і іноді – доступу в Інтернет там робити нічого. Велику частину часу початківець розробник витрачає на студіювання MSDN. А до того часу, коли він вивчить навороченную модель класів і всі необхідні йому функції, Microsoft напевно придумає щось нове. Пам’ятається, хтось говорив, що чим більше варіантів запропоновано, тим більше часу йде на вибір кращого. ASP.NET – яскраве тому підтвердження.

Зате якщо вивчити … Лічильник відвідувань? – Будь ласка, десять рядків. Додати сюди таку ж таблицю? – Два-три клацання мишкою, п’ятнадцять рядків тексту. Інший висновок інформації? – Немає проблем: робимо дочірній клас, перекриваємо функцію, відводимо на налагодження чверть години, прив’язуємо до висновку другої таблиці – готово! Взагалі, робота в ASP.NET із застосуванням Visual Studio сильно нагадує роботу в Delphi, з тією лише різницею, що все відбувається набагато швидше, простіше і логічніше. Основні ж мови, на яких пишуться ASP.NET-додатка, – Visual Basic.NET і C #, – є спадкоємцями відповідно Visual Basic і Java / C + +. І якщо перехід з Visual Basic на Visual Basic.NET вимагає деякого перегляду філософії програмування (так як від старого Бейсіка залишилася лише частина синтаксису й назва), то перехід з С + +, і особливо з Java на C #, органічний настільки, що не повинен займати більше двох-трьох тижнів.

Теоретично під ASP.NET можна писати програми на будь-якій мові, для якого є відповідний компілятор. Однак на практиці для створення ASP.NET-додатків використовуються головним чином Visual Basic.NET і C # (десь позаду плетуться managed C + + і J #). Деякі програмні середовища – наприклад, Delphi 8 – забезпечують номінальну підтримку ASP.NET, але толку від неї, прямо скажемо, небагато.

“Рідна” Середа ASP.NET – IIS, що працює під управлінням Windows. Так, IIS відомий як не найстабільніший веб-сервер, а Windows – як не найстабільніша операційна система. Але ось невеличка історія з життя.

На одній моїй роботі стояв сервер під керуванням Windows 2000 і IIS, на якому сисадмін тримав в той момент більше двох сотень сайтів. Велика їх частина складалася з динамічно згенерованих ASP-сторінок (ASP.NET тоді тільки з’явився, і єдиний, хто ризикував з ним працювати, – правда, на окремій машині, – був ваш покірний слуга). Так от, сервер за два роки перезавантажувався всього пару разів, якщо не вважати обов’язкових перезавантажень після установки критичних оновлень. На іншій роботі, якої я займався паралельно, стояв сервер з FreeBSD 4.x, який виконував роль проксі / файрволла для локальної мережі. Він падав раз, а то й два рази на місяць. Я сам деякий час був адміністратором і не з чуток знаю, як треба постаратися, щоб досягти таких вражаючих результатів в стабільності роботи і Windows, і FreeBSD. З тих пір я впевнений, що 90-95% стабільності роботи сервера забезпечується зовсім не вибором “правильної” системи, а вибором “правильного” сисадміна.

Я не намагаюся переконати когось у тому, що Windows працює більш стабільно і передбачувано, ніж Unix / Linux. Мало того, я сам так не думаю. Але ASP.NET – це не тільки Windows. Існує, наприклад, проект Mono, дозволяє запускати будь-які. NET-додатки під Linux (і, відповідно, під FreeBSD в режимі бінарної сумісності), існує mod (по-нашому – плагін) Apache для обробки ASP.NET-додатків. Але все-таки ASP.NET і * nix – поки що більше гетерогенна середу, з усіма витікаючими.

ASP.NET не пристосований для маленьких проектів і тим більше – для нечисленних спрацьованих груп, яким не потрібно чітке управління. Причин тому безліч – починаючи від високої вартості платформи і закінчуючи складністю моделі класів. NET. Вперше взявшись за програмування під. NET, я не міг зрозуміти, хто може все це вивчити, на якого інтелектуального монстра це все розраховано? Потім зрозумів – Ніхто. Кредо. NET-програмування: не лізь не в свою справу. Пиши свій модуль, вивчи свої функції, знай своє місце – цей принцип в колективі працює чудово.

За ідеологією Microsoft, програміст – маленький гвинтик добре налагодженого механізму. Одинаки-камікадзе на зразок мене, свято вірять у світле майбутнє цієї корпорації, не вважалися і не вважаються. Виключаємо нас – і залишаються великі, швидко і постійно розширюються інтернет-проекти, де один програміст відповідає за один модуль. А яким, власне кажучи, ще проектам потрібно кроссплатформность і мультимовність за замовчуванням? Тільки таким, де можуть найняти такого профі, що мова, якою він пише, відрізняється від основного проектного. Тільки таким, яким згодом може знадобитися безболісне портування на Pocket PC, MAC, можуть знадобитися інтернет-сервіси і т. д. Ось в таких проектах ASP.NET розгортається на славу. Проблеми з продуктивністю, брак ресурсів? Нісенітниця! Купимо ще комп’ютерів, купимо ще програмістів, купимо зірки з неба, аби темпи розробки не падали.

РНР-програмістам в подібних проектах робити нічого. Чому? Та тому, що їм буде потрібно купа координаторів, яким гроші платити треба. Координаторів, більшу частину роботи яких бере на себе сама Середа. NET. І, до речі, з кластерними Unix-системами звертатися теж непросто. Як не крути, Unix – це прекрасна stand-alone-система, але саме тому зробити кластер на ній набагато складніше, і відповідно, грошей піде більше. Я не говорю про суперкомп’ютерах, я говорю про парк в 20-50 машин. За той час, що піде на автоматизацію і підключення додаткової Unix-машини до Unix-кластеру, програмісти на Windows вже давно будуть писати наступний модуль. Не кажучи вже про те, що кластерна СУБД MySQL як кластер існує тільки в альфа-версії. Автоматизація ж взаємодії між машинами на Windows Server 2003 і SQL Server – одна з найсильніших сторін цих систем (Редакція умиває руки. Всі міркування про складність створення кластерів на Unix цілком на совісті автора. Особисто мені здається, уміючи – це не так вже довго, що на Windows, що на Unix, але експертом в даному питанні я не є і судити не беруся. – Прим. ред).

Технологія РНР в корені відрізняється від ASP.NET. Найбільше вона схожа на класичні ASP-додатки, тільки скриптова мова в ній один. Мова РНР нагадує збірну солянку з C і Perl з невеликим додаванням спецій у вигляді Basic і навіть Pascal. Все це натягнуто на каркас з примітивною моделі класів, яка представляє собою звичні структури C з абияк приробленим збоку спадкуванням. Правда, недавно з’явилася п’ята версія PHP, що надає непогані можливості для об’єктно-орієнтованого програмування, проте великого поширення вона поки не отримала.

PHP4 занадто довіряє програмісту. У ньому немає типів, оголошувати змінні необов’язково, існують небезпечні конструкції. Синтаксис PHP заточений під швидке і просте рішення типових проблем. При цьому вся відповідальність за небезпечні трюки лежить на програміста. Що, зокрема, призводить до такого поширеного явища, як виявлення серйозних помилок в коді через місяць-другий після здачі проекту.

Область застосування PHP – невеликі проекти, які робить або тісно спрацювала група, або взагалі одна людина. Завдяки безкоштовності PHP (а також безкоштовності MySQL і самої платформи), ця мова стає ідеальним вибором для невеликих авторських сайтів або сайтів для малого та середнього бізнесу. Крім того, PHP працює швидше.

Теоретично ASP.NET повинна працювати швидше (все-таки тут ми маємо справу з одного разу скомпільований бінарними кодами, тоді як PHP-скрипти кожен раз обробляються заново). Проте PHP літає як на IIS, так і на Apache і при великій (правда, штучно викликаної) навантаженні завжди видає результати краще, ніж ASP.NET. І вже тим більше краще, ніж класичний ASP. Збентежений, я пішов на сайт Microsoft, щоб знайти хоча б одну статтю, в якій би порівнювався швидкодію PHP і ASP.NET. Безуспішно. Зате на інших ресурсах знайшлося досить багато статей, автори яких дійшли того ж висновку, що і я. “Рідна” зв’язка PHP + MySQL + Apache працює швидше ASP.NET + IIS + Microsoft SQL Server 2000.

Чи означає це, що ASP.NET гірше? Аж ніяк. На тому ж сайті Microsoft є маса даних, з яких випливає, що рішення на базі Linux / Unix в цілому обходяться середньому і великому бізнесу набагато дорожче, ніж аналогічні рішення на основі Windows (Було б дивно знайти на сайті Microsoft іншу інформацію. Але частка правди в цьому є – безкоштовність технологій зовсім не означає безкоштовність їх використання). Такі, здавалося б, парадокси насправді цілком логічні. Швидкість роботи забезпечується тим, що всі РНР-програми працюють в єдиному адресному просторі, тоді як ASP.NET за рахунок навороченной моделі класів багаторазово перевіряє і перевіряє ще раз дані, утримуючи кожен додаток в окремому адресному просторі. Перший підхід більш швидкий, але менш надійний, другий – більш надійний, але за це доводиться платити. Чудес не буває. Швидкодія ж зв’язки РНР + MySQL забезпечується тим, що розробляють ці дві технології групи дуже тісно співпрацюють. Те ж саме і зі зв’язкою ASP.NET + MS SQL.

Проте швидкість роботи РНР з іншими СУБД (через ODBC) розчарувала. З більшістю відомих СУБД, включаючи MS SQL Server, SAP і MaxDB (той же SAP, починаючи з версії 7.5), він у мене працював повільніше ASP.NET. Наскільки я зрозумів, через те, що ASP.NET намагається робити з БД якомога менше вибірок, розміщуючи всі актуальні таблиці і навіть зв’язку між ними в кеш (технологія ADO.NET у випадку з MS SQL), в той час як РНР схильний генерувати безліч запитів до СУБД.

Парадокс з цінами, коли оплатити кілька ліцензій Microsoft дешевше, ніж узяти безкоштовні Unix / Linux, PHP та MySQL, теж цілком логічний. Слід враховувати, що, по-перше, ці продукти безкоштовні, поки ви не збираєтеся робити на них комерційні проекти (Linux і PHP, звичайно, безкоштовні без всяких умов. Комерційна ліцензія в повному розумінні цього слова є тільки у MySQL. Деякі витрати на PHP, мабуть, загрожують тільки програмістам, які роблять скрипти на продаж. Щоб не відкривати код скриптів, їм доводиться використовувати продукти компанії Zend, а вони, на жаль, платні. – Прим. ред), а по-друге, що розробка та підтримка проектів під ці платформи в цілому обходиться дорожче. Крім того, Linux в ряді випадків працює повільніше Windows. Можливо, я помиляюся, але ні для якої СУБД я і близько не бачив такого кількості критичних виправлень і повідомлень, як для MySQL. А все це є ризик (Редакція умиває руки. Всі міркування про складність створення кластерів на Unix цілком на совісті автора. Особисто мені здається, вміючи – це не так вже довго, що на Windows, що на Unix, але експертом в даному питанні я не є і судити не беруся. – Прим. ред.).

Тепер PHP. Якщо коротко охарактеризувати відчуття від роботи з ним – це постійна налагодження, дебаг. І справа навіть не в тому, що повноцінного дебаггер поки немає (принаймні, кращий, що я знайшов, Zend Studio, не йде ні в яке порівняння з дебаггер Visual Studio), а в тому, що сам пристрій мови сприяє серйозним логічним помилок.

Ось приклад, який нещодавно прислала мені однокурсниця, попросивши допомогти:

<p>
<?
$bukvi = “abcdefg”;
$stroka = “abcdefg”;
echo $stroka[0]; echo “<br>”;
echo $bukvi[0]; echo “<br>”;
if ($srtoka[0] == $bukvi[0]) echo “рядки співпадають”;
else echo “рядки не співпадають”;
?>
</p>

Сценарій працює, але працює неправильно.

Навіть примітивна опечатка (виділена червоним) призводить до логічної помилки, якої в C # не було б у принципі. Взагалі, в РНР оголошення змінних відсутній як клас, що, з моєї точки зору, великий мінус. А будь-який сильний в програмуванні людина розуміє, до чого призводить відсутність типів у великому проекті.

Звичайно, програмісти на РНР можуть сказати, що я нічого не розумію: адже досить залізти в php.ini і налаштувати висновок попереджень. Але й тут не все так просто. Моєму знайомому PHP-програмісту недавно подзвонив роботодавець, у якого завис сайт. В результаті з’ясувалося, що хостер оновив PHP з версії 4.3.6 до 4.3.8, в якій попередження про використання неоголошених змінних виявилися за замовчуванням включені. В результаті сайт став представляти собою збірник всіляких попереджень від движка PHP, оскільки приятель, звикнувши до байдужості PHP, ніколи не утруднював себе оголошенням змінних.

Як правило, оновлення версії РНР на сервері – головний біль і для замовників, і для програмістів. Часом знайти помилку дуже важко, особливо якщо вона з’являється лише при певних обставинах, так що її можна взагалі не виявити до здачі проекту. У цьому і сила, і слабкість РНР. Поки в С # ви будете займатися плануванням, писати різні класи, інтерфейси для колекцій та інша і прочая, щоб потім одним махом за десять хвилин зробити сторінку, – в РНР ви ту ж сторінку встигнете написати кілька разів. Тільки от кожна наступна сторінка на ASP.NET робиться лише за десять хвилин, а в РНР знову і знову доведеться витрачати той же самий час. Потрібно візуально у висновку щось на сторінці змінити – в ASP.NET знадобиться п’ять хвилин, а в РНР – доведеться шукати і правити висновок HTML. PHP-програміст зволіє швидше переписати все заново, а в ASP.NET програміст буде змушений використовувати готові напрацювання. Інакше його просто не візьмуть на роботу. На такому колективізмі, коли індивідуальність програміста знівельована до межі, і побудована вся філософія. NET, і ця філософія, повторюся, прекрасно діє у великому колективі. А індивідуальність і простота РНР-програмування – у маленькому.

Цей факт добре відбиває ситуація на ринку праці: співвідношення РНР-і ASP.NET-програмерів зараз становить 3:2, що говорить як про доступність безкоштовних продуктів, так і про велику кількість невеликих, але амбітних проектів, для яких PHP підходить ідеально. Інша ситуація, наприклад, в Ізраїлі (там співвідношення приблизно 1:10), Америці і Європі.

Заробіток ASP.NET-програміста теж вище, і якщо хороший PHP-програміст отримує у нас в кращому випадку 800, ну максимум 1000 доларів (інформація з www.job.ru), то зарплата ASP.NET-програміста, як правило, починається з 800 доларів. Воно й зрозуміло – відповідальності більше, роботи більше, геморою більше, свободи менше.

Отже, маленькі і середні проекти – доля маленьких груп програмістів і PHP; середні та великі – доля великих груп, що використовують продукти Microsoft (Це якась несправжня дихотомія. Можна подумати, що в світі є тільки PHP і ASP.NET. Маса великих проектів зроблена на Perl, який позбавлений перерахованих недоліків PHP і чудово працює. – Прим. ред), а також дуже нечисленних добре організованих груп програмістів на РНР; гігантські проекти ділять між собою продукти HP, IBM, Sun, Oracle, і розцінки там в кілька разів вище. Але це вже зовсім інша історія.

Що вибрати початківцю програмісту? Важко відповісти однозначно. РНР, звичайно, простіше: але я все-таки радив би вивчати ASP.NET, у нього абсолютно точно є майбутнє в середніх і великих компаніях, чого не скажеш про РНР. Зазначу також, що ситуація на ринку праці всього лише рік-півтора тому була приблизно 1:9 на користь РНР, і радикальна зміна цього співвідношення не може не насторожити.

Якщо ж пощастить і якщо ти дійсно хороший програміст – можна потрапити в “зовсім іншу історію”, де і зарплата зовсім інша. Цьому може сприяти участь в різних конкурсах, що проводяться компаніями (потрапити туди іншим шляхом, без серйозних напрацювань на стороні, дуже важко).

Пропоную вам два варіанти (на ASP.NET і на PHP) однієї і тієї ж простенької програмки. Обидва написані в лоб (спеціально) і вирішують одну і ту ж задачу: підраховують, скільки разів та чи інша буква зустрічається у введеної рядку.

ASP.NET:

private void Button0_Click(object sender, System.EventArgs e)
{ string alphabyte = “ABCDEFGHIJKLMNOPQRSTUVWXYZЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮЕ”; int [] counter = 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])) counter[i]++;
}
} / / Висновок
for(int i=0; i<counter.Length;i++)
{
if (count[i]!=0)
{ Response.Write (“Буква” + alphabyte [i] + “зустрічається” + Convert.ToString (count [i]) + “раз
“);
}
}
}

Я спеціально прибрав файл з шаблонами і текст, який автоматично генерується Visual Studio. Тут тільки те, що написано “руками”; реальний текст програми раз на п’ять більше. Я зробив це, щоб показати, як робота з власне HTML в ASP.NET навмисно зводиться до необхідного мінімуму (в даному випадку – до обробникам подій, як в звичайному візуальному мовою програмування). Таким чином, стає можливої ​​повністю роздільна робота програмістів і дизайнерів, коли для радикальної зміни дизайну програміст, як правило, не потрібен. У РНР це теж можна реалізувати шляхом застосування шаблонів, але помітно більшою кров’ю.

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

<form action=”test.php” method=”POST”> Введіть слово
<input type=”text” name=”str”>
<?php
$quiz_string=$_POST[“str”];
if (strlen($quiz_string)!=0)
{
$quiz_string= $quiz_string.strtoupper($quiz_string);
for ($i=0; $i<strlen(quiz_string);$i++)
{
for ($j=0; $j<strlen($alphabyte);$j++)
{
if ($alphabyte[$j]==$quiz_string[$i]) {$result[$j]+=1;}
}
}
echo “<br>”;
for ($j=0; $j<strlen($alphabyte);$j++)
{
if (strlen($result[$j])!=0) { echo “Буква $ alphabyte [$ j] зустрічається $ result [$ j] раз
“;
}
//echo $quiz_string;
}
}
?>
</form>

Очевидно, що в РНР править балом динамічний висновок HTML, тоді як в ASP.NET робило все, щоб програміст по можливості взагалі не думав про HTML.

Отже, загальний висновок.


ASP.NET: спочатку темпи розробки повинні різко падати, потім стабільно рости і в кінці кінців зупинитися на певному рівні.

PHP: при достатньо великому обсязі коду темпи розробки повинні падати з початково дуже високого рівня, причому не здивуюся, якщо швидкість падіння буде пропорційна квадрату об’єму коду.


Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*