למה לא jQuery?
jQuery היא אולי ספריית הג'אווהסקריפט הפופולרית ביותר כיום, אך זהר ארד מנסה להסביר מדוע היא עושה יותר נזק מאשר תועלת.
אחרי אתנחתא קצרה לבניית ניוזגיק V3, הגיע הזמן לחזור לכתוב. ברור לי לחלוטין שהנושא שבחרתי עשוי לעורר התנגדות והתרעמות כלשהי, אך כרגיל, אני מקווה שתוכלו לשמור על ראש פתוח בזמן שאשטח בפניכם את טיעוני.
אז למה לא jQuery?
למי שלא מכיר, jQuery היא ספריית הג'אווהסקריפט הפופולרית ביותר כיום. ל jQuery יש קהילה חזקה ופעילה, אוסף מרשים של תוספים, גרסת מובייל באלפא ומקום ראשון ברשימת הביצועים של DOM selection. צריך כנראה להיות משוגע, חבר מחתרת או חבר בכת כדי לטעון ברצינות שהדבר הזה שקוראים לו jQuery הוא משהו אחר מלבד פנטסטי. ואכן, גם כמי שאינו נמנה עם חסידי jQuery אני מודה בפה מלא שזו ספרייה מרשימה ומצויינת בזכות עצמה ועבור הבעיות שהיא באה לפתור.
הטענות שלי הן לא כלפי הספרייה עצמה אלא כלפי התופעה שנוצרה בעקבותיה. על-מנת בשביל להבין את התופעה, אנחנו צריכים להבין את התנאים שגרמו להיווצרותה.
בראשית
בראשית היתה ג'אווהסקריפט שפה חביבה שנועדה להעניק לעמודי HTML פונקציונליות שלא היה ניתן לתכנת באמצעות HTML בלבד. כמו בכל סיפור טוב, יש את הטובים (מוזילה עם נטסקייפ) שפתחו חלק ניכר מהג'אווהסקריפט, ואת הרעים (מיקרוסופט) שפיתחו חלק ניכר אחר, ללא תיאום של ממש עם הטובים. התוצאה היתה שהדפדפנים השונים הריצו (ועדיין מריצים) ג'אווהסקריפט שונה, מה שכמובן יצר מלחמת תאימות בין המתכנת והדפדפן שנמשכת עד היום.
ואלו שמות
כשהאינטרנט התחיל לקבל מספרי גרסאות, פתאום צצה ועלתה דרישה חזקה לממשקים עשירים יותר לאתרי אינטרנט, מה שהצריך כמובן קוד ג'אווהסקריפט מתוחכם יותר. כדי להשכין שלום בין המתכנת והדפדפנים השונים ולאפשר הטמעה אחידה של קוד ג'אווהסקריפט בכל הדפדפנים, מצאנו את עצמנו לפתע עם שלל ספריות המספקות שכבת תאימות בין הדפדפנים השונים ובין המתכנת. בין הספריות הללו נוכל למצוא את Dojo, Prototype, jQuery, YUI, Mootools ו Sencha ועוד רבות אחרות, כאשר כל אחת מהספריות נותנת דגש על היבט אחר של פתרון בעיית התאימות בין הדפדפנים השונים.
ויקרא
אם ננסה לקרוא בין השורות ולנתח את ההיבט ש-jQuery מספקת לפיתרון בעיית התאימות נמצא כי jQuery מטפלת אך ורק בשונות במימוש של ג'אווהסקריפט בין הדפדפנים השונים ע"י יצירת ממשק אחיד לטיפול בסוגיות הנפוצות שמתכנת ג'אווהסקריפט נתקל בהן מדי יום. בין הסוגיות הללו נמצא טיפול ב-DOM, טעינת נתונים (AJAX,JSON) וטיפול באירועים כמו לחיצות ושליחות טפסים. למעשה, jQuery היא רק שכבת תאימות המאפשרת למתכנים לכתוב קוד ג'אווהסקריפט אחיד שיעבוד בצורה תואמת על כל הדפדפנים ותו לא. זו לדעתי גם הסיבה העיקרית להצלחתה של jQuery: מכיוון שהיא מטפלת היטב בבעיה העיקרית של חוסר התאימות בין הדפדפנים, היא קלה לשימוש ואינה דורשת לימוד מעמיק או שינוי גישה מצד המתכנת בבואו לכתוב קוד לאתר.
במדבר
אומרים ש"כל קוץ, במדבר פרח" ואכן, למרות ש jQuery לא הייתה הספרייה הראשונה שבאה לטפל בבעיית התאימות, היא בהחלט הייתה זו שהרוותה את הצמא העז לכלי פשוט ונוח שיאפשר לכתוב קוד ג'אווהסקריפט חוצה-פלטפורמה וכאן למעשה מתחילה הבעיה. המציאות היא שרוב המתכנתים שבאים לכתוב ג'אווהסקריפט אינם מתכנתי צד-לקוח ואינם מכירים את השפה על בורייה. עבורם, ג'אווהסקריפט היא שפה קצת נחותה ומשונה שהיא יותר כורח המציאות מאשר בחירה מרצון. לכן, בעוד jQuery מספקת דרך נוחה ומהירה לכתוב קוד שיעבוד על כל הדפדפנים, היא אינה מאלצת את המתכנתים לשבור את ההרגלים המיושנים והגישה הפושרת שלהם כלפי ג'אווהסקריפט, אלא מספקת מעקף נוח לטפל בבעיות שגם כך לא נחשבות "מרכזיות". הרי כל מתכנת צד-שרת שמכבד את עצמו יודע שיותר חשוב שלהתעסק בביצועי צד-שרת, טיוב מסדי נתונים ותכנות מונחה עצמים מאשר זוטות כמו תכנות נכון בצד הלקוח.
מה יותר קל וטבעי מאשר להכניס כמה תוספים של jQuery לטיפול בגלריות, ניווט, כפתורים ו-AJAX בלי להבין מה הקוד עושה? אגב, זו סוג של צביעות כי הרי מתכנת צד שרת שמכבד את עצמו מעולם לא היה מרשה לעצמו להכניס לשרת קוד שהוא לא מבין איך הוא עובד ומה הוא עושה. אבל, בגלל שג'אווהסקריפט זו לא שפה רצינית, זו הרי לא ממש בעיה, נכון? לא נכון!
דברים
הטענה שלי כלפי jQuery היא שהיא מעצימה, שלא בכוונה, את הבורות של המתכנתים בכך שהיא לא מאלצת אותם לחשוב מעבר למינימום הדרוש. בעקיפין, היא שמה פלסטר על פצע מוגלתי שדורש ניתוח. למעשה, jQuery מזכירה לי מאוד את PHP בכך שגם PHP באה בזמנו לטפל בבעיה מובהקת (בניית אתרים דינאמיים) בצורה טובה, אבל בפועל, מי שלא מכיר את השפה על בורייה, יש סיכוי טוב שיכתוב קוד גרוע פשוט משום שהשפה מאפשרת לו. צריך להיות מתכנת PHP מאוד טוב כדי לכתוב PHP טוב. אפשר להיות מתכנת רובי בינוני ועדיין לכתוב קוד טוב, פשוט כי רובי "מאלצת" את המתכנת לכתוב בצורה מסויימת.
אם נחזור ל jQuery, הרי שברור שאפשר לכתוב קוד נהדר עם jQuery, פשוט צריך לדעת ג'אווהסקריפט, ומי שלא טורח ללמוד ג'אווהסקריפט, סופו שיכתוב קוד רע, אבל מאוד בקלות.
אז מה עושים?
בראש ובראשונה, הגיע הזמן לומר בפה מלא – ג'אווהסקריפט היא לא רק שפה חשובה, היא השפה הכי חשובה בעידן האינטרנט. לא משנה מה רץ על השרת, הדפדפן עדיין יריץ ג'אווהסקריפט. ביצועי צד-לקוח חשובים וראויים לתשומת לב שווה אם לא יתרה מביצועי צד-שרת וסביר להניח שהטכנולוגיה שבסוף תקבע את הצלחת האתר / יישום האינטרנטי שלכם לא תהייה הטכנולוגיה שרצה בשרת (למרות שהשיקול רלבנטי וחשוב), אלא הטכנולוגיה שהמשתמש רואה, כלומר ג'אווהסקריפט, HTML ו CSS.
לכן, עם כל הטוב ש jQuery מרעיפה על קהילת מתכנתי הג'אווהסקריפט, עליכם המשתמשים לאמץ גישה קצת יותר ספקנית ולהבין ש jQuery היא בסך הכל פתרון לבעיה של תכנות ג'אווהסקריפט חוצה פלטפורמה. עדיין מוטל עליכם, המתכנתים, לדעת ג'אווהסקריפט אפילו אם אתם לא משתמשים בפקודות ה DOM הרגילות אלא באלו של jQuery. לשתול תוספים באתר שלכם על ימין ועל שמאל סביר שיחסוך מכם את הצורך לפתח רכיב מסויים בעצמכם, אבל אינכם פטורים מלהטמיע את התוסף בצורה מושכלת, בדיוק כמו שהייתם עושים בצד השרת.
ולבסוף, עשו לעצמכם, ללקוחותיכם ולמנהליכם טובה ולמדו ג'אווהסקריפט, בלי התוספות. זה באמת לא קשה וזה באמת ישפר את ההבנה שלכם לגבי הצרכים, האילוצים והפתרונות הזמינים עבורכם בבואכם לבנות את הממשק של האתר הבא (או הנוכחי) שלכם.
ואם כל זה לא לרוחכם, אתם כמובן מוזמנים לשבת בצד, עם אלו ממתכנתי ה PHP החביבים שבחרו לדבוק בהרגליהם הנושנים, ולצפות בעולם מתקדם וחולף על פניכם בעודכם מנסים פעם אחר פעם להתאים תוסף שילד בן 17 כתב לפני שנה לאתר של 100,000 משתמשים.
הגב
36 תגובות על "למה לא jQuery?"
* היי, אנחנו אוהבים תגובות!
תיקונים, תגובות קוטלות וכמובן תגובות מפרגנות - בכיף.
חופש הביטוי הוא ערך עליון, אבל לא נוכל להשלים עם תגובות שכוללות הסתה, הוצאת דיבה, תגובות שכוללות מידע המפר את תנאי השימוש של Geektime, תגובות שחורגות מהטעם הטוב ותגובות שהן בניגוד לדין. תגובות כאלו יימחקו מייד.
תחליף jQuery בכמעט כל ספריה וזה אותו הדבר.
ברגע שאתה נותן אבסטרקציה כלשהיא מעל שפה מסוימת חלק ניקר מהמשתמשים של אותה ספריה ישתמשו בה לא נכון כי הם לא מכירים את התשתית שעליה בנויה הספריה.
ראה ערך : Microsoft .Net Framework
בגלל זה בחינה אמתית של מתכנת כלשהוא היא לאו דווקא עד כמה הוא מכיר ספריה כזו או אחרת אלא עד כמה הוא מכיר את התשתית וה runtime.
הבעיה/יתרון הבאמת גדולה ב-jQuery היא שזה ספריית אבסטרקציה ואפקטים. היא לא ספריית פיתוח. אין שם כלים לפיתוח שהוא לא מכוון לדפדפן. אין ירושה, אין מבני נתונים, ואם כבר אבסטרקציה אז חסרים בה הרבה דברים. אני משתמש ב-underscore.js להשלים קצת חוסרים. MooTools הרבה יותר שלמה כספריית פיתוח לאפליקציות ווב, אבל לאפקטים יש לה הרבה פחות פלאגינים. ועד כמה שאני סובל מ-NIH Syndrome, לפעמים לפתח לבד זה סתם כאב ראש. פשוט בוחרים רק פלאגינים ותיקים, בוגרים ומתועדים.
פליקס, ל Mootools יש מודולים הרבה יותר נרחבים לאפקטים מל jQuery והיא מאפשרת כתיבת תוספים הרבה יותר גמישה.
מה שכן, אני לא מדבר על מצבים שבהם מפתחים מנוסים מטמיעים קוד בשל ובדוק של תוסף זה או אחר בקוד בשל ובדוק שלהם. אני מדבר על המצב ההפוך בו יש הטמעה נאיבית של קוד בלי להבין מה הוא עושה.
מודולים וכתיבה – כן, הרבה פלאגינים מוכנים מראש – לא. אבל אלה שכבר יש הם הרבה יותר איכותיים.
אני מסכים אבל לא לחלוטין. יש ספריות שדורשות ממך קצת יותר ו"מצפות" ממך למימוש מעט יותר מושכל. הדוגמה האולטימטיבית שלי היא תמיד Mootools כי הם אומרים בפה מלא שהמטרה שלהם היא לשנות את איך שאתה כותב ג'אווהסקריפט, ולא רק לספק שכבת תאימות.
מעבר לזה, ש jQuery לא נותנת אבסטרקציה, אלא מספקת ממשק תכנות אחיד וזה לא אותו דבר.
אתה לא עשית פרפורמנס ריוויו לקוד שלך כמו שנעשה מאות פעמים לחבילת הגרעין של jquery.
עוברים על הקוד עשרות אנשים מבריקים שלא אתה ואני איי פעם נגיע לרמה שלהם. אתה יכול לאמץ אי אילו חלקים של הקוד ולהרחיב אותם בקלות כפי שהתכוונו המפתחים ולא להשתמש בחבילות המנופחות של הUI. אתה יכול לאמץ את מנוע הtraversing שלהם שבכל מקרה יקל על הפיתוח כי הוא תמיד שימושי.
אם יש משהו שאני ממש לא אוהב זה אנשים שחושבים שלכתוב getElementById הופך את הקוד לשהם למהיר ואיכותי. אנחנו פה כי ג'אווהסקרפיט זה שרשרת שבמילא רובנו צריכים לכתוב לה את הגלגלים והשילדה.
אני מקווה בשבילך שאתה מתקרב לעשירית מהכישרון שמאחורי השם שלקחת לעצמך פה…
ורק כדי להוכיח לך נקודה – http://jsperf.com/dollar (לקוח מכאן – http://frontend.co.il/%d7%94%d7%93%d7%a8%d7%9a-%d7%94%d7%9b%d7%99-%d7%9e%d7%94%d7%99%d7%a8%d7%94-%d7%9c%d7%91%d7%97%d7%95%d7%a8-%d7%90%d7%9c%d7%9e%d7%a0%d7%98/)
תודה על ההמלצה תום ;-)
הנה קישור לא שבור – http://frontend.co.il/%d7%94%d7%93%d7%a8%d7%9a-%d7%94%d7%9b%d7%99-%d7%9e%d7%94%d7%99%d7%a8%d7%94-%d7%9c%d7%91%d7%97%d7%95%d7%a8-%d7%90%d7%9c%d7%9e%d7%a0%d7%98/
התנצלותי על העברית ב-URL.
אחלה ניתוח זהר, למרות שבסופו של דבר באמת הפריימוורק לא חשוב אלא המתכנת שמשתמש בו.
ראיתי מימושים זוועתיים לריילז, וראיתי מעשי תועבה שנעשו לדרופל, ומצד שני ראיתי אפליקציות שלמות שנכתבו מדהים בויז'ואל סטודיו.
אחד הדברים היפים בjQuery זו הדרך בה היא כתובה (לא אומר שאחרות כתובות פחות טוב, רק מעביר נקודה). למי שבאמת רוצה ללמוד ג'אווה סקריפט כדאי להשתמש בה, ולהשתמש בקוד המקור שלה ככלי לימוד – על כל פונקציית jQuery שהוא כותב גם להסתכל בקוד המקור שלה ולהבין מה היא באמת עושה, כמעט כל פונקציה שם שווה יותר מקורס של שבוע.
זהר, אין לי אלא להסכים. :-) הבעיה של חוסר המקצוענות נמצאת בכל מקום – אבל במיוחד בפרונט אנד. אולי יום אחד נעשה ערב סיפורי זוועות…
אמרתי ליאור?! סליחה, יגאל! :)
וואוו ! איזה דיון מרתק…. אני קטונתי מלהגיב פה על התכנים המקצועיים… אינני מתכנת וגם לא איש קוד :) אבל אחרי כמה שנים טובות בתחום הווב כמנהל פרויקטים ואיש SEO… למדתי דבר או שניים – המסקנה מאוד פשוטה: מה שמתאים ללקוחות הקצה לא בהכרח מתאים לצוות הפיתוח של עסק או חברה בתחום האינטרנט… וזה עוד מבלי לגשת לנושא אפליקציות הווב שאינן נשענות בהכרח על דפדפן כזה או אחר בצד הלקוח… לפעמים מה שפשוט יותר תופס יותר אנשים.
תודה לכל המגיבים – השכלתם אותי במספר דברים, שבת שלום לכולם.
זהר, פוסט חזק ביותר כתוב בצורה משעשעת אך ממוקדת :)
זהר תודה על המאמר. ראיתי את הקישור בפייסבוק ודי לא הבנתי על מה אתה מדבר. החששות האם לעשות לייק התגברו ולבסוף החלטתי לקרוא את המאמר. בתחילה הגעתי ספקן אבל כבר מהפסקה הראשונה התאבהתי בצורת הכתיבה שלך, בניסוח ובאופן שבו הצגת את הדברים פשוט מאמר שכיף לקרוא.
תודה !
אני חושב שאתם בהחלט מלאים מעצמכם – כל כך הרבה תשבוחות אישיות לא ראיתי מזמן בבלוג.
הספריה JQUERY או MOOTOOLS שינו את עולם הJS והביאו אותו לרמה ויכולות שלא הכרנו מעולם. על זה אין ויכוח. על מהירות גישה אני מסכים אבל באמת שאתם מתעסקים בזוטות.
לראיה לטיב וליכולות של המערכת לשרת אתרים בסדר גודל גדול-ענק אנא עברו על השמות שאתרי הבית של שני המערכות.
לכל מי שכותב JS בצורה ישירה וללא מערכת מעטפת לכל עניין מעבר לשליחת טופס אני אומר – חבל על הזמן שלכם !
לא ממש הבנתי את התגובה שלך איתמר.
הדיון כאן הוא לא על ביצועים של JQ או MT אלא על השוני בגישה לפיתוח קוד ג'אווהסקריפט בין השתיים.
גם ההערה על היכולת לשרת אתרים בסדר גודל ענק לא ברורה לי כי היא לא ממש קשורה לספריה אלא למימוש (ואגב, אין קשר בין גודל, פופולריות וטיב כמו ש"חלונות" מראה לנו).
מה בעצם אתה מנסה להגיד?
גלעד ואביב, שמח שנהנתם מהפוסט והדיון
אני רוצה לציין נקודה חשובה (לפחות לפרילנסרים שבינינו), לפי החוק אם שילבתם JQ (או כל קוד מוכן אחר) במערכת שבניתם אתם לא יכולים להכריז עליה "מערכת קניינית". אם כתבתם CMS והשכרתם ללקוח זכות שימוש ללא זכות קניין או זכות שינוי (מה שרוב הפרילנסרים הרווחיים עושים רוב הזמן, להערכתי) אם המערכת משלבת JQuery או MooTools הוא יכול מבחינה חוקית לצפצף על החוזה ולשנות אותה כמה שהוא רוצה.
קודם כל, אל תכליל.
אני התחלתי להטמיע את JQUERY לאחר ששברתי ציפורניים עם JAVASCRIPT, ולאחר שבניתי לעצמי "מיני פריימוורקים" משלי.
[מי לא זוכר את function $(id){return document.getElementById{id};} O המפורסם שחסך לכולנו את הכיתוב הארוך]
אני לא "חורש" כל קוד של גלריה שמבקשים ממני להטמיע, אבל בהחלט קורא את ההערות בכותרות הפונקציות, ומנסה לשחק ב API [ולפעמים גם מוסיף קצת או משלב תכונה מגלריה אחרת].
היחס לכל קוד מוכן צריך להיות בדיוק באותה צורה של יחס הניתן להעתקה מהרשת של קוד צד שרת, על זה אין חולק.
תודה על המאמר ותודה למגיבים.
זהר , מה עם גרסת המובייל ?
מה דעתך עליה ?
הי איתי
אני מצפה בקוצר רוח לגרסת המובייל של jQuery – שמעתי דברים טובים מאוד. לא ניסיתי עדיין את גרסת האלפא אבל מעמוד הפרוייקט נראה שהם מכוונים למוצר מצויין.
החכמתי, וקיבלתי חשק ללמוד קצת יותר על MooTools.
תודה רבה לזהר ולכל המגיבים