PHP לעומת ASP.NET .

פלטפורמת PHP לעומת פלטפורמת ASP.NET

 

המאמר ידון על ההבדלים בין PHP ו-ASP.NET תוך פירוט של שתי הטכנולוגיות ובמיוחד את הגרסא החדשה PHP5.
כמו כן, נבצע השוואה בין שתי הטכנולוגיות למציאת פלטפורמת הפיתוח לאפליקציית האינטרנט הבא שלך.

 

קצת היסטוריה

בשנת 1995 החל Rasmus Lerdorf לפתח את ה-PHP בתור כלי אשר יסייע לו לעקוב אחר כניסות גולשים לאתר האינטרנט שלו.
בתחילה, פלטפורמת ה-PHP הייתה אוסף של סקריפטים פשוטים, בהמשך הוא הוסיף פונקציונאליות וגישה לבסיס נתונים. במסורת הקוד הפתוח, הוא החליט לשחרר את קוד ה-PHP לקהילת האינטרנט. לאחר מכן הוא הוסיף את מפענח הטפסים (Forms Interpreter) ו-PHP כפי שאנו מכירים אותה נולדה.
במקור, התחביר והצהרות המשתנים של PHP היו דומות לאלו של פרל (perl).

עם שחרורה למרחבי האינטרנט, החלו להתעניין בה מפתחים אחרים, אשר מצאו אותה מועילה ותרמו רבות לפיתוחה.

בשנת 1997, שוחררה הגרסא השנייה של PHP לקהילה הקטנה אך הגדלה. גרסא זו "גררה" אחריה "שאריות" של גרסאות beta קודמות.

בתקופה זו, עברה PHP תהפוכות, שינויים והתווספו לה פונציות רבות. צמיחה מואצת של מערכת יכולה להוביל לקריסתה, אך, כפי שהתברר, הצפייה לגרסא 3 הייתה גדולה מאוד.

באותה עת, עבד Andi Gutmans בשיתוף עם  Zeev Suraskiעל אפליקצית מכירות המבוססת על PHP2. עם זאת, גרסא 2 של PHP לא עמדה במשימה ולכן הם החלו לשכתב את הקוד.
החלטה זו, לשכתב את הקוד, הייתה מממ כבר מההתחלה, אך מתוך רצון לפתח לקהילה יציבה וחזקה של משתמשי PHP, שני המפתחים הצעירים שיתפו פעולה עם Lerdorf על מנת להשיק את הקוד המשוכתב כ-PHP3.

בשנת 1998 שוחררה לאויר PHP3 והביאה עמה יכולות הרחבה משופרות של השפה. גרסא זו משכה מפתחים חדשים אשר החלו לשתף פעולה בפיתוח PHP, במידה רבה יותר מאשר קודם לכן.

בשלב זה, PHP כבר החלה לעמוד על רגליה ולהוות מערכת הפעלת ווב ל-10% משרתי האינטרנט בעולם.

במאי 2000, יצאה לאויר גרסא 4 של PHP וזו הביאה עימה תכונות חדשות. גרסא זו כבר נקראה Zend והיא תוכננה לספק פלטפורמה למספר רב של שרתים, לאפשר טיפול ב-http sessions ויכולות אבטחה חדשות.

 

מה עושה את PHP5 למיוחד לעומת קודמיו?


שחרורה של PHP5 ביולי 2004 מציינת את התבגרותה של פלטפורמת ה-PHP. הוספת וכוונון של אובייקטים רבים מוכווני תכונות (OOP) מספק לך שפה שבה ניתן לפתח יישומים מבוססי אינטרנט מתוחכמים.

כברירת מחדל, PHP5 מעביר אובייקטים על ידי הפניה (by reference). על מנת לספק פונקציונליות לפי ערך (by value), ל-PHP יש פונקציה משוכפלת עבור ליצירת העתק של אובייקט. עם זאת, שימוש בהפנייה, שהיא למעשה העברת מצביע בזיכרון (pointer) של האובייקט הרצוי, הינה יעילה יותר מאשר לשכפל את האובייקט ולנפח את הזיכרון.

גרסא זו של PHP מספקת תמיכה מובנית רחבה יותר בפונקציונאליות של תכנות מונחה עצמים (OOP).
נוספה היכולת להגדיר משתנים כפרטיים (private) או שמורים (protected). משתנה פרטי הינו משתנה אשר הגישה אליו יכולה להעשות רק מתוך האובייקט עצמו. משתנה שמור הינו משתנה אשר הגישה אליו יכולה להעשות גם מתוך האובייקט עצמו וגם מתוך אובייקטים הנגזרים מאובייקט האב (subclasses).
נוספה גם היכולת ליצור מחלקות מופשטות (abstract classes), להגדיר פונקציה סופית (final) ולהגדיר קבועים (constant).
בנוסף, טיפול בשגיאות שודרג גם הוא ונוספה היכולת להשתמש בפונקציונאליות של TRY, CATCH  ו-THROW.

גרסא 5 של PHP הציגה תמיכה גם בהעמסת פונקציות (function overloading). יכולת זו מאפשרת למפתחים ליצור יישומים שונים של אותה פונקציה, עם קלט משתנים שונים. היופי של יכולת זו היא שמנוע ה-PHP מפענח לאיזו פונקציה אתה מתכוון להשתמש בזמן ריצה, בהתאם לסוגי המשתנים איתם אתה קורא לפונקציה.

אך, אם נעשה שימוש רב בקוד מונחה עצמים, נשאלת השאלה:
האם הדבר לא ינפח את הזכרון ובסופו של דבר יאט את הקוד?

התשובה היא כן ולא. טעינה לזכרון של אובייקטים, קוד וחישובים שאינם נחוצים, הינה בשליטתו של המתכנת. למשל, בעת שימוש באובייקט מסוים, אין צורך לטעון את אותו אובייקט בכל הקוד במערכת, אלא רק במקומות בהם נעשה בו שימוש.

 

מה הלאה?

כאשר בוחנים פרויקטים הקשורים ל-PHP, ניתן לנחש את הכיוון העתידי של PHP.
ישנו פרויקט בשם PHP-gtk אשר יאפשר לתכנת באמצעות PHP תוכנות לשימוש על המחשב האישי – כל שולחן העבודה.

אם כך, נראה כי מטרה העתידית של PHP היא לספק את הטווח המלא של פונקציות בדומה לאלו של ASP.NET. רבים העירו כי הגרסא האחרונה של PHP דומה לשפת התכנות Java ולכן אין זה מפתיע ש-PHP תתרחב ותשמש גם כשפת תכנות לתוכנות מחשב.

 

יתרונותיה של ASP.NET

למען ההגינות נאמר כי כל מה שאפשרי ב-PHP אפשרי גם לביצוע ב-ASP.NET.
כאשר הפונקציה המבוקשת לא קיימת, ישנן 2-3 דרכים אחרות לבצע את אותה משימה.

אחד היתרונות הבולטים של ASP.NET היא סביבת הפיתוח הנקראת Visual Studio. NET. למרות מה שהמתנגדים יאמרו על פיתוח בשיטת point-and-click, סביבת פיתוח טובה, כמו ה-Visual Studio. NET, מפשטת את מלאכת התכנות, כך שאפילו מתכנתים מנוסים מפיקים ממנה תועלת – וזו עובדה.
לסביבת הפיתוח ישנו מנגנון מתוחכם לאיתור באגים, היא יכולה להדגיש תחביר, ליידע אותך כאשר ישנן שגיאות בקוד, לבצע השלמת פקודות ופשוט לעזור לך לארגן את הקוד טוב יותר.
כמו כן, ניתן להתחבר לבסיס נתונים מסוג oracle ולבצע שינויים על אובייקטים (טבלאות וכו') מתוך סביבת הפיתוח עצמה.


ומה לגבי .NET Framework  ו-  Markup Abstraction ?


זהו מנגנון המטפל בכל הדפדפנים בהם האתר שלנו יוצג, בין אם מדובר על דפדפן רגיל, טלפון נייד או מחשב כף יד.
המנגנון משנה את קוד האתר בהתאם לדפדפן בו גולש המשתמש. ישנם שיאמרו שזו ברכה.
יהיו אלו שלא יבטחו במיקרוסופט לבצע התאמה של ה- html לדפדפנים שונים, כמו firefox, opera ואחרים.
מצד שני, ב-.NET כמו ב-PHP, למתכנת ישנה האפשרות לבצע התאמות לקוד ולתצוגה לדפדפנים השונים.

 

קוד מהודר (compiled) לעומת קוד מפורש (interpreted)


.NET יוצרת קוד מהודר, קוד "בינארי" (binary) אשר קרוב מאוד לשפת מכונה. לעומתו, קוד ה-PHP הינו מפורש.
הקוד ה"בינארי" שנוצר נקרא MSIL (Microsoft Intermediate Language) כיוון והוא לא באמת בינארי אלא קוד שיכול לרוץ רק עם סביבת ריצה מתאימה – Microsoft .Net Common Language Runtime (CLR).
שכבת ה-CLR תבצע את שינוי הקוד של האתר, בהתאם לכל דפדפן ומערכת הפעלה.
כאשר מבינים את תפקידה של שכבת ה-CLR ומהותו של קוד ה-MSIL, מבינים שהקוד של ASP .NET אינו בינארי או מהודר לחלוטין.
יתר על כן, ב-PHP כמו גם ב-ASP .NET ניתן להגדיר את השרת כך שיצור קבצים שמורים של עמודי אתר האינטרנט (cache), כך שלא יהיה צורך לפרש ולהדר את הקוד כל פעם מחדש.
ולכן באופן בלתי נמנע, יהיו אלו דפי ה-PHP אשר ישמרו כחתיכות קטנות יותר מהחתיכות של דפי ה-ASP.NET המקבילים, זאת כיוון ועבור ה-ASP.NET נותר השלב של פירוש הקוד על ידי שכבת ה-CLR.
בסופו של דבר, המשמעות היא, צריכה גדולה יותר של זיכרון שרת האינטרנט שלך עבור אפליקציות של ASP.NET.

 

אודות פרויקט .NET Mono


מדובר על פרויקט קוד פתוח, השואף לאפשר את יכולות ה-.NET על שרתים שאינם של מיקרוסופט, כגון: Linux, HP-UX, Solaris, Mac OS X.
למרות שמיקרוסופט מתחילה לאמץ מאפיינים של קוד פתוח, שבו תינתן גישה לקוד למפתחים נבחרים, זה יהיה די יקר ויכלול מגבלות רבות כמו אלו של קוד סגור.
נראה כי ישנו סיכוי כי מיקרוסופט תשנה מעט את המפרט או תבצע שינויים נסתרים וזאת למרות שהיא הביעה עניין ביישומים אחרים של .NET
שוב, עם זאת, אין תמיכה אמיתית ממיקרוסופט.
בשרתי אפאצ'י (Apache) ישנו פרויקט, שעדיין לא הסתיים, בשם mod_mono, אשר מטרתו ליישם את היכולות של ASP .NET.

בשל העובדה שמונו עדיין בשלבי פיתוח וקיימים מאפיינים רבים עליהם הוא נסמך ואינם מיושמים עבור שרתים שאינם של מיקרוסופט, יהיה זה בטוח יותר לקחת את מונו בחשבון כאופציה שלישית.
מצב זה יוצר תלות שלך כמפתח בקהילה, לפיתוח הקוד (ובעקיפין ל-Novell, אשר תומכת את הפרויקט).
במובן הזה, ל-mod_mono יש הרבה במשותף עם PHP. יש באפשרותך לבחור את אפאצ'י כשרת האינטרנט שלך, להתקין את mod_mono (בדיוק באותו אופן כמו PHP) ובכך לעקוף את כל נושא הרישיונות לפיתוח בסביבת ASP .NET מסורתית.

 

מה חשוב כאשר בולעים את הצפרדע?

ושוב, אתה ניצב מול אותה דילמה: יש לך שתי סביבות מתחרות וטכנולוגיות מהן אתה יכול לבחור רק אחת.

כמובן שהמתכנתים נוטים לתת כובד משקל לצרכים היומיומיים. הם נוטים לבחון תכונות כמו: ספריות הפונקציות הקיימות, מנגון בדיקת באגים, רמת המומחיות הדרושה, קיומה של סביבת פיתוח (IDE), קלות התכנות. כל אלו הן שאלות טובות וחשובות, מתכנתים רבים מסתמכים על הרגשה חמימה לגבי שפות פיתוח מסוימות, טכנולוגיות וניסיון העבר.

לעומת זאת, מנהלים, ישאלו שאלות שונות, כמו:
כמה קשה יהיה לשכור מפתחים לשפה הזו, מה לגבי תשלומים עבור רישיונות, האם ישנה רמת אבטחה גבוהה, האם תוחלש האבטחה של תשתיות אחרות, מהי עלות התחזוקה של השרתים, מהי רמת העמידות של השרת (האם הוא עמיד לעומסים).

 

השורה התחתונה היא שעם שיחרורה של PHP5, הפכה סביבת הפיתוח של PHP לאטרקטיבית יותר, בכך שהיא מציעה אפשרויות פיתוח מונחה עצמים של פרויקטים גדולים ומורכבים ביעילות רבה שמשיגה את התוצאות.
זאת ועוד, הסביבה בה פועלת PHP הינה שרת לינוקס (או מבוסס לינוקס), יציב ועמיד הכולל את אפאצ'י בעל ביצועים מעולים וזמן פעולת מערכת ללא השבתה שאין כמוהו.

 

מבוסס על המאמר שפורסם ב oracle מאת Sean Hull - יועץ אינטגרציה בכיר.