שילוב ספריות חיצוניות בפרויקט - יש עניין להפחית ככל הניתן? ועד כמה?
-
כעת התחלתי לעבוד עם NPM, ורציתי לדעת האם יש עניין לחסוך בייבוא ספריות? אם לדוגמה אני צריך לעשות 2-3 חישובים, שיותר נוח לעשות אותם עם lodash, אבל אפשרי עם קצת יותר קוד לעשות אותם גם בלעדיו - האם להתאמץ ולכתוב בלי, או פשוט לייבא? עד כמה אם בכלל זה משפיע על הביצועים, ייבוא ספריות חיצוניות ללא צורך ממש?
ומה נקרא "צורך ממשי" ששווה בגללו לייבא?
נ.ב. השאלה נוגעת כרגע בעיקר לפרויקטים שמהודרים בסוף עם webpack, אם זה משנה. -
דעתי האישית:
בכללות כדאי לא להוסיף ספריות בלי שום אבחנה.
אבל מצד שני לא להיות פנאטי בנושא. ולדעת לבדוק מה רמת האיכות של הספרייה, ולמדוד את זה מול הצורך שלך בספרייה והתועלת שזה יביאבמקרה של lodash שווה מאוד להשתמש בו, זה גורם לקוד יותר קריא. זו ספרייה יסודית ואיכותית.
אני חושב כרגע על כמה סיבות להימנע מספריות חיצוניות, וכמה סיבות כן להשתמש (זה מה שאני חושב כרגע, אולי שכחתי כמה נקודות)
א) גודל הקוד: לפעמים ספרייות מנפחים מאוד את הבנדל הסופי, וזה משפיע על מהירות טעינת הדף, ושימוש בראם, וכדומה
תבדוק את הנושא של tree shaking שזה אומר שהמהדר יודע איזה פונקציות לייבא והשאר הוא משמיט. אני לא בקי.
ב) אבטחה: אם צד שלישי שולט על הקוד יש לו אפשרות להכניס דברים זדוניים וכו'
ג) איכות: לפעמים ספרייות צד שלישי הם לא איכותיים, ואתה תלוי על צד שלישי עבור תיקוני באגים
מצד שני:
א) תחזוקה: פחות קוד אומר פחות באגים, ופחות תחזוקה, לכן יש ענין לכתוב כמה שפחות קוד
ב) קריאות ואיכות: אם מדובר בספרייה איכותית, זה יכול לתרום הרבה לאיכות הקוד שלך והקריאות, כי הם חשבו על אבסטרקציות נכונות, ומודלים טובים/אלגנטיים וכו' שספק אם היית חושב על זה בעצמך
ג) השקעה: זה פחות השקעה להשתמש בקוד מוכן, מאשר לכתוב את זה בעצמךאיך לבדוק איכות של ספרייה?
אפשר לפי ה-issues בגיטהאב, לפי כמות ההורדות, ועוד פרמטרים, עם הזמן מפתחים חוש ריח -
אני מחמיר יותר מ @yossiz בנושא הזה, כנראה שזה עניין של חווייה אישית, ספריות "נשברות" ומאבדות תאימות לעיתים קרובות, בדרך כלל אני בודק את המוניטין של הספרייה ומיהו המפתח, ומה עוד הוא עשה בחיים, ומשתדל שלא להתקין ספריות שאינן נתמכות על ידי ארגונים גדולים.
כמו"כ ההצדקה לצרוך ספריה צריכה להיות משהו מסדר גודל עצום כגון עיבוד PDF או דחיסה ל ZIP (אני כמובן מקצין, אבל כוונתי לסבר את האוזן), אם יש לך בעיה פיצקית שבשבילה אתה מתקין ספרייה שלמה, זה חטא גדול מאוד. עדיף להעתיק את הקוד הספציפי שפותר את הבעיה שלך ולעטוף אותו בפונקציה שתוכל לשפר אותה לאחר מכן.
הנה דוגמא נפוצה לספרייה עם 66 מיליון הורדות שבועיות
https://www.npmjs.com/package/isarray
ואם תהית מהו הקוד הנורא שהיא מסתירה אז הנה הוא:
https://github.com/juliangruber/isarray/blob/master/index.js
ויש עוד דוגמאות כהנה וכהנה
לגבי מדדים "טכניים" של איכות ספרייה, יש אתר שמנסה לעשות זאת באמצעות אלגוריתם כלשהו:
https://npms.io/ -
@ארכיטקט אמר בשילוב ספריות חיצוניות בפרויקט - יש עניין להפחית ככל הניתן? ועד כמה?:
הנה דוגמא נפוצה לספרייה עם 66 מיליון הורדות שבועיות
https://www.npmjs.com/package/isarray
ואם תהית מהו הקוד הנורא שהיא מסתירה אז הנה הוא:
https://github.com/juliangruber/isarray/blob/master/index.jsמעניין.
כנראה שספריה אחרת שתלויה בספריה הזו מאוד פופולרית -
אני גם שונא את המצב בו אני צריך לבחור ספריה.
לכן אני מאוד נמשך לספריות גדולות מסוג all-in-one כמו מקרוסופט באופן כללי, או אנגולר.
אני מפתח יומיומי בJS וכמעט (ואפילו בכלל לא) לא משתמש בספריות, מלבד אנגולר (1 בינתיים).לגבי הספריות בNPM, אני חושב ששפת JS זכתה במפתחים הכי מפגרים שיש.
https://dev.to/jyotishman/10-useless-npm-package-with-millions-of-downloads-de9
https://dev.to/codesphere/javascript-flaws-5-stupid-npm-packages-5fihttps://www.zdnet.com/article/another-one-line-npm-package-breaks-the-javascript-ecosystem/
https://developpaper.com/a-single-line-code-npm-library-even-let-millions-of-javascript-projects-crash/מאמר מדעי בנושא של מיקרו חבילות
https://arxiv.org/pdf/1709.04638.pdfאפרופו לאוהבי נוסטלגיה, מאמר בעברית שנראה מ1813, אבל הוא מ2013
https://softwarearchiblog.com/2013/06/musthave-js-libs-part1.html -
@גמליאל אמר בשילוב ספריות חיצוניות בפרויקט - יש עניין להפחית ככל הניתן? ועד כמה?:
@ארכיטקט אמר בשילוב ספריות חיצוניות בפרויקט - יש עניין להפחית ככל הניתן? ועד כמה?:
הנה דוגמא נפוצה לספרייה עם 66 מיליון הורדות שבועיות
https://www.npmjs.com/package/isarray
ואם תהית מהו הקוד הנורא שהיא מסתירה אז הנה הוא:
https://github.com/juliangruber/isarray/blob/master/index.jsמעניין.
כנראה שספריה אחרת שתלויה בספריה הזו מאוד פופולריתזה משפט המפתח למה לא להשתמש בחבילות.
הרי לכאורה לא תירצת כלום בלזרוק את האשמה על מפתחי החבילה השניה, אלא מה? במקום שהשאלה תהיה על מליונים (מה יש כזה הרבה מפגרים?) היא על 1-30 איש.
הנה סיבה מס' 1 למה למעט בחבילות.