יום חמישי, 15 במרץ 2012

129 Backbone.js

הנושא היום: התפתחויות בעולם ה- JavascriptMVC Frameworks
משתתפים רן תבורי, ישי סמית ועוזי קילון

קצת רקע: עוזי הצטרף אלינו לשיחה כמשתמש ופעיל ברשימת תפוצה של Backbone.js, שם גם אותר שם על ידי רן. קישור לבלוג של עוזי נמצא כאן. עוזי עובד כיום כמפתח Front-End בחברת Splunk בסן פרנסיסקו לאחר מספר שנות עבודה ב-Dapper אשר נרכשה על ידי Yahoo! ושבה עבד גם בארץ וגם ב-SFDapper פיתחה מערכת המאפשרת לבצע Web Scraping יחסית בקלות גם על ידי חסרי רקע בתכנות. הטכנלוגיה בסופו של דבר משמשת את Yahoo! לצרכי זיהוי סוג האתר עליו אתה נמצא לשם זיהוי טוב יותר והאמת פרסומות לקונטקסט הנכון.
Splunk מספקת מוצר בתחום ביזור המערכות. המוצר נולד כפתרון IT לניתוח לוגים ומספק שירותים תחת ההגדרה - Time Based Database. בשלב מאוחר יותר כשהטכנולוגיה הבשילה המוצר הפך לגנרי יותר ומאפשר כיום התממשקות לא רק לחבילות לוג סטנדרטיות אלא גם לכל פיסת מידע וטרנזקציה המתוייגת על ידי זמן. המוצר מאפשר ביצוע שאילתות נתונים והפקת דוחות בקלות רבה, כמו גם להוסיף Adaptors למקורות מידע נוספים. הטכנולוגיה הבסיסית של המוצר עושה שימוש בין השאר גם ב-Hadoop , כמו גם טבנולוגיות יחודיות שפותחו על ידי splunk אך למרות זאת נותן ביצועי חיפוש יעילים יותר ועל פי בדיקה שנעשתה לאחרונה היו טובים לעיתים אפילו פי 100!
הזכרנו מספר Framework ו-Utilities אשר משמשים מפתחי Java Front-Ends כגון: JQueryPrototype.jsUndescore.jsEmber.jsBackbone.js  וכו'. רשימה מעודכנת של ספריות והשוואה של יכולות MVC שלהן ועוד ניתן לראות ב- Todo MVC demo ב-Github, שם ניתן לראות איך מממשים את אפליקציית ה-demo בכל אחת מהספריות הני"ל.
אבחנה בין Framework ל-ספריה: ה-Framework קורא לקוד שלך ולעומתו בספריה, הקוד שלך עושה שימוש בספריה (כלומר קורא לקוד של הספריה). על פי אבחנה זו, Backbone.js הינה ספריה.
מה זה Backbone.js? – ספריה המספקת שירותי MV (model and view, no control) בשכבה מאוד דקה שמטפלת בעיקר בקישור (routing) של המידע למודל/תצוגה תוך שימוש ב-Patterns פשוטים המאפשרים שיתוף מידע בין Views שונים אשר ממומשים יחסית בקלות.
מכיוון ש-backbone.js קלה מאוד (sizing footprint) היא אטרקטיבית מאוד לשימוש בסביבת מובייל.
בשונה מ- JQuery אשר מסייע ב-DOM Abstraction ופחות מסייע מבחינת ארכיטקטורה, backbone.js נותן שירותים טובים של שליפת מידע ו-dynamic rendering– במיוחד אם עובדים בארכיטקטורת REST מלאה (לכל משאב/שירות יש את ה-URL שלו וכו'). הספרייה עושה שימוש ב- Underscore.js וביכולות ה- Template הטובים שלה וכמו כן משתמשת בשכבת התקשורת xhr מ-jquery לצורך ביצוע הקריאות לשרת וב-delegate (גם הוא מ-jquery) לצורך ניהול ה-events (הרחבנו קצת בנושא).
-          דיברנו על מאפייני אפליקציות התואמים שימוש ב-backbone.js (single page applications כמו gmail אשר אין להן הרבה צורך ל-refresh של ה-page, גם אם מדובר על הרבה קריאות לשרת).
-          דיברנו על מודלים ורכיבים שונים בתוך backbone ועל דוגמאות להגדרת שליפה מהשרת תוך שימוש בהגדרת מודלים, collections, הגדרת view למודל (template, DOM elements, etc.).
-          Routes – מאפשר לבצע מיפוי ושימוש בחלק שמגדיר את ההאפליקציה בשורת ה-Url (מופיע אחרי הגדרת שם הדומיין), מופיע אחרי סימן ה-# וידוע בשם Anchor tag.
-          שוחחנו קצת על הארכיטקטורה של הקשר בין ה-view לבין המודל. ה-view מתפקד כ-observer למודל – תכונה אשר מאפשרת לבצע פעולות בצד ה-client מבלי לטעון את כל הדף מחדש. כמו כן, ה-view יכול לבחור על איזה שדות במודל הוא מאזין, בלי קשר לכך שהוא מבצע/יכול לבצע render לכל השאר.
-          הזכרנו קצת את ההבדל בגישות בין ember.js ל-backbone.js (ember קצת יותר פורמלית בהגדרות ולעומתה ב-backbone הגמישות דורשת למעשה כתיבה של לוגיקה).
יתרונות וחסרונות של backbone.js:
-          Too flexible – מרחב אפשרויות מגוון ולא מובנה אשר בעצם מאפשר בניית פתרונות שונים אחד מהשני (גם עם מדובר על אותה תוצאה) –נובע בעיקר מעצם כך שזוהי ספריה ולא framework.
-          לא תומך באובייקטים מורכבים (backbone relational יכול לעזור כאן בטעינה של נתונים היררכיים מהשרת)
-          יתרון – lightweight.

הקובץ נמצא כאן האזנה נעימה

תודה לגל כהן על התמלול.

2 comments:

  1. לגבי בעבוע של איוונטים, האובייקט של האיוונט תמיד מחזיק את האלמנט המקורי שיזם את האיוונט.
    ככה jQuery יודע אם לעשות דלגציה וככה גם אתה יכול לדעת אם התבצע האיוונט שרצית על האלמנט שרצית.

    השבמחק
  2. בקרוב נפתח קורס backbone.js וunderscore.js בתל אביב

    לפרטים נוספים - http://backbonecourse.blogspot.co.il/
    אילן - 0547880094

    השבמחק