כאן יש הסבר רישמי ומסודר של גוגל
רק שיש לי כמה קושיות
על הדיאגרמה הזאת הם כותבים ש:
צומת 1 שולט בצומת 2
צומת 2 שולט בצמתים 3, 4 ו 6
צומת 3 שולט בצומת 5
צומת 5 שולט בצומת 8
צומת 6 שולט בצומת 7
מדוע 2 לא שולט גם על 5 ??
כאן יש הסבר רישמי ומסודר של גוגל
רק שיש לי כמה קושיות
על הדיאגרמה הזאת הם כותבים ש:
צומת 1 שולט בצומת 2
צומת 2 שולט בצמתים 3, 4 ו 6
צומת 3 שולט בצומת 5
צומת 5 שולט בצומת 8
צומת 6 שולט בצומת 7
מדוע 2 לא שולט גם על 5 ??
@טכנאי-סלולר
על הדרך
אפשר להשתמש בהקלטה לשעון מעורר?
הנה בדיקה נוספת כשהזכרון גדל פי 15 מהבדיקה הקודמת
איך יתכן שגלובל גדול יותר??
אני מדבג אפליקצית nodejs
מאוד מאוד אשמח להסבר, מה ההבדל בין 2 הטורים השמאליים? ומהו הטור השמאלי מימין?
ואיך זה שסך כל האחוזים הם יותר מ-100??
בהנחה שאין משתנים שמתפחים יותר מדי אלא הבעיה היא שהם משוכפלים שלא לצורך
איפה בודקים א"ז?
השורה הראשונה היא הפונקציות ברירת מחדל של JS? אז נכון שאין מה להסתכל ע"ז?
איך הייתם מציעים לשמור כותרות צד?
https://javascript-ninja.fr/optimizing-speed-in-node-js/
מה ההסבר למה שהוא עשה?
המקורי לא תומך בווינדוס.
const global1 = 1000000
const global2 = 2000000
const global3 = 3000000
const global4 = 4000000
const global5 = 5000000
const global6 = 6000000
class dbCtrl {
static async getData( ...arg ) {
let data = await new Promise( resolve => {
setTimeout( resolve, 500 )
})
//db.get( ...arg ).catch( /*logIfBud*/ )
return data && data.toString('utf8').split(',')
}
}
class dataCtrl {
constructor( name ) {
this.name = name
}
async getName() {
let count = 0
let data
while( !this.tryFinish && /*Temporary:*/ (count++) < 5000 &&
!(data = await dbCtrl.getData( this.name ))
) {
this.tryVariations()
}
this.fullName = data
return this.fullName
}
tryVariations() {
this.name = this.name.replace(/"/g, '')
}
}
class mainCtrl {
constructor() {
this.names = ['david', 'aharon']
}
async getAllNames() {
this.fullNames = await Promise.all(
this.names.map( n=> new dataCtrl(n).getName() )
)
}
}
new mainCtrl().getAllNames()
הקוד הזה עובד בסדר
אבל האמיתי לא
אולי בגלל שיש שם גלובלים שנכלאים (closer) ומשוכפלים בפונקציות?
זה הקוד
while( !this.tryFinish &&
!(data = await getData( this.Name ))
) {
this.tryVariations()
}
לא תמיד, רק אם getData
רץ יותר מדי פעמים
או שהפונקציה שמריצה אותה מורצת יותר מדי פעמים במקביל (מה שקורה ברצה אסינכרונית)
אם לא, זה אוכל א"ז ללא בעיה.
יש לכם כיון מדוע זה קורה ומה הפתרון?
בעבר tryVariations
הריץ בסופו, את הפונקציה שעוטפת את הקוד הזה, רקורסיה, אבל בשביל בשביל שהמחסנית לא תתמלא, הרצתי א"ז בתוך setTimeout.
זה בדיוק מה שרציתי לחסוך, את השרשורים המבלבלים האלו.
@dovid אמר בשימוש ב-MongoDB בנוד:
לא התכוונתי דוקא קלאבק, התכוונתי שהאפליקציה כולה תיטען מתוך פונקציה.
לא הבנתי מדוע לא להשתמש ב-await
(בפונקציית insert
שאמור להיקרא מתוך פונקציה, לא ב-require
)?
@dovid אמר בשימוש ב-MongoDB בנוד:
נוד מאמצת ממש לאט את ההתקדמויות האלה
שמח שהם מאפשרים לדנו לעקוף אותם בקלות
@dovid אמר בשימוש ב-MongoDB בנוד:
למה לא להכניס את כל טעינת האפליקציה לקאלבק?
לחזור לטרום ימי הפרומיז?
@yossiz אמר בשימוש ב-MongoDB בנוד:
הפיתרון הוא לכאורה להחזיר אובייקט שיעטוף את ה-
db
. כל פונקציה שנקרא על העטיפה יעשה קודםawait
לאובייקט ה-db
האמיתי ואז יעביר את הפונקציה הלאה לאובייקט האמיתי.האם יש דרך לעשות עטיפה כזאת בלי יותר מדי boilerplate? פשוט להגיד ל-JS שכל פונקציה שאני יקרא על האובייקט לא משנה מה השם שלו יעבור דרך קוד העטיפה?
לא מבין את הבעיה
הקלאס מיד חוזר מכיל בתוכו את ה-DB
ופונקצית insert({1:2})
יכיל בתוכו בדיקה אם ה-DB מחובר, ומחזיר תמיד פרומיז.
כך תמיד עושים?!
@יוסף-בן-שמעון אמר בג'ימייל - ההודעה לא נשלחה:
לעיתים רחוקות אני מקבל הודעה כזו בשליחת מייל
ולא מועיל לנסות שוב ושוב, גם רענון של הדף לא עוזר, מה זה?
זה בדר"כ בגלל תו נסתר לפני\אחרי הכתובת
נסה ללכת לסוף\תחילת הכתובת ואז מעד אחד עם החץ תגלה שיש שם תו נסתר.
(גודל פשוט לא יודעים למחוק אותו דאאא)
@dovid אמר באיך אני מייצר פונקציה בגלובל שה-this שלה יהיה ה-this של המופע שמפעיל אותו?:
למה שלא תעצב שהם יחזירו בעצמם פרומייז
לא אוהב את העטיפה של הפרומיז סביב כל הפונקציה
וגם שיש כבר פונקציות מוכנות שעבדו עם הספריה async, אז זה מוכן לפונקציה הזאת.
במקרה שכן קצר יותר להשתמש ישירות ב-Promise.all.
@dovid אמר באיך אני מייצר פונקציה בגלובל שה-this שלה יהיה ה-this של המופע שמפעיל אותו?:
@אהרן אההממ אז המתודות הללו נדפקות בכל קלאבק ששייך לסקופ שונה?
גם כשקאלבק שייך לאותו סקופ
הוא מקבל סקופ חדש, של יצירת asyncMap.
אם כשמעבירים את זה כפונקציה ללא call זה עובד
זה לא
@dovid אמר באיך אני מייצר פונקציה בגלובל שה-this שלה יהיה ה-this של המופע שמפעיל אותו?:
@אהרן אמר באיך אני מייצר פונקציה בגלובל שה-this שלה יהיה ה-this של המופע שמפעיל אותו?:
אבל ב-asyncMap זה לא שייך מכיון שצריך להכניס ארגומנטים לתוך הקול-בק.
איפה צריך this.
בתוך ה-task
כשקוראים לו מתוך מתודה של מופע שמשתמשים יותר ב-this, זה יותר חסר.
במקרה הזה, ה-task עצמו הוא גם מתודה של המופע.
@dovid
אויש כמה שטויות
התכוונתי להביא את ההוכחה מ-setTimeout
אבל אז גליתי שהוא מקבל את ה-this בגלל הפונקציה האנונימית שכתובה מתוך הפונקציה שקוראת וממילא מקבלת את ה-this
setTimeout( _=> myFunc() )
אבל ב-asyncMap זה לא שייך מכיון שצריך להכניס ארגומנטים לתוך הקול-בק.
@יוסף-בן-שמעון אמר באיך אני מייצר פונקציה בגלובל שה-this שלה יהיה ה-this של המופע שמפעיל אותו?:
@אהרן אז תעביר אותו כפרמטר
איך console.log כן מכניס את הדיס הנכון?