צפיות
תשובות
מספר שאלות בנוגע ליעילות עבודה
שימוש ב-Option Explicit:
קראתי שלהשתמש עם Option Explicit ולהגדיר את כל המשתנים בעמוד יהיה יעיל ומהיר יותר מאשר להשתמש ללא Option Explicit בעמוד.
נגיד ויש לי 100-140 משתנים בעמוד, האם עדיף להשתמש עם Option Explicit או בלי?
אופן הביצוע, יעילות וטעינת העמוד יהיה מהיר יותר באופן משמעותי ?
פונקציות
נגיד ויש לי בעמוד פעולה מסויימת של החלפת תווים בסימנים שונים.
האם יהיה יעיל יותר לבנות פונקציה שלוקחת את המחרוזת, מבצעת החלפות ומחזירה את הערך לאחר ההחלפות או לעשות זאת בעמוד עצמו?
הכוונה היא האם כדאי לשים קוד שחוזר על עצמו בפונקציה אחת ולקרוא לפונקציה מספר פעמים או לכתוב את הקוד מספר פעמים ? מה יעיל יותר?
אובייקט RecordSet
האם מומלץ להגדיר אובייקט RecordSet בתוך לולאת Do שחוזרת על עצמה מספר פעמים (קצת הרבה) או מומלץ מחוץ ללולאה? מה יעיל יותר ?
קשרי גומלין
תמיד שמעתי את המושג "קשרי גומלין", האם אפשר לקבל הסבר או קישור להסבר על המושג?
תודה מראש.
36 תשובות
מספר תשובות
קשר יחיד לרבים – הקשר הנפוץ ביותר הוא בעצם מסתמך על שדה ייחודי בטבלת היחיד ושדה בעל אותו סוג נתונים בטבלת הרבים. לדוגמא: מנהל מחלקה ועובדי מחלקה. מנהל הוא יחיד האחראי על כל עובדי המחלקה כאשר עובדי המחלקה הם הרבים הנמצאים תחת פיקוחו של מנהל המחלקה.
קשרי גומלין
זה בעצם קשר לוגי בין שני שדות אינדקס שבשני טבלאות. הקשר עוזר לעשיית שאילתות איחוד (JOIN) להיות יותר מהירות בכך שכבר ידוע למסד שיש קשר (כמעט בטוח שמה שאמרתי נכון).
יש שלושה קשרי גומלין:
(עוד מידע במדריך "תכנון מסד נתונים" במדור SQL)
אובייקט הרקורדסט
בכלל לא רצוי לפתוח רקורדסט בלולאה עקב שיצירתו והשמדתו זוללת משאבי שרת רבים
תודה. עוד מספר דברים..
1. מה בנוגע ל-Option Explicit ?
2. מה בנוגע לפונקציות?
3. עדיף בשאילתה לבחור את כל הנתונים (*) או את השדות הרצויים לשימוש בלבד??
למשל: יש לי 15 שדות בטבלה מסויימת ואני צריך להשתמש רק עם 9 שדות בלבד.
4. עדיף ליצור רקורסטים בתחילת העמוד ולסגור אותם בסוף העמוד או עדיף לפתוח בכל פעם ולסגור ולאפס? מה יעיל יותר?
תודה על התשובות
תשובה נוספת
בקשר לפונקציות
אני לא חושב שזה משנה. עדיף להשתמש בפונקציה, משום שיותר קל לדבג, לבצע שינויים בעתיד, או למתכנת אחר (במידת הצורך) להבין מה עשית.
תשובות
1. כן, תמיד.
2. פונקציות זה טוב תמיד, רצוי אפילו ליצור קובץ חיצוני. כך הקוד קריא ותמציתי.
3. חס וחלילה
מחוץ ללולאה, ועדיף עוד יותר לעבוד עם getRows או getString. חפש במאמרים, יש שם הרבה מידע.
4. קרא במדריך תכנון DB באתר.
לא הבנתי מה הכוונה
" קשר יחיד ליחיד – קשר נדיר, לרוב לא משתמשים בו עקב שהוא נובע מפיצול טבלאות."
תודה על התשובות..עוד מספר דברים
1. בנוגע לתשובה הראשונה שכתבת, אתה אולי יכול לתת הדגמה למהירות עמוד שמשתמש ב-Option Explicit ולעמוד שאינו משתמש בו ? על מנת לראות את ההבדל מהירויות, אם הם משמעותיים.
2. יש לי קובץ חיצוני בשם Functions.asp אז הכל מסודר.
הפונקציות או הסאבים אינם מאטים את טעינת העמוד ?
3. למדתי getRows אך בעמוד הבא ראיתי ש-getString מהיר יותר:
באתר מצאתי מאמר אך אני מעוניין ללמוד ללא אופציות.
תמיד אני רואה דוגמאות הנראות כמו זה:
rsGetString.GetString(adClipString, -1,"</td><td>", "</td></tr>" &vbCrLf & "<tr><td>", " ")
ואני מעוניין להשתמש ללא האופציות, ככה:
<%
rs.GetString()
ולאחר מכן לפצל אותו או איך שאני משתמש בו כמו שב-getRows אני משתמש עם מערך דו-מימדי. איך כאן אני משתמש עם getString ? גם מערך דו-מימדי?
אשמח לראות קוד קטן על מנת להבין או הסבר מובן.
4. תודה. אני אצפה במדריך לתכנון DB.
אם אתה רוצה לפצל בשרת
השתמש ב SPLIT, אם אתה רוצה לפצל בלקוח – יש על זה מאמר.
בכל מקרה אתה צריך את הפרמטרים האילו…
הבעיה היא שאני לא יודע
איך להשתמש בזה עם Split.
יש לך דוגמא או מאמר בנושא ?
מה בנוגע לשאלות הקודמות?
תודה על העזרה.
אם אתה רוצה לפצל בלקוח –
שמסביר איך להעביר את כל ה RS בצורת מערך. אם אתה רוצה לפצל בשרת, תשתמש במתודה Split שהשימוש בה מוסבר .
אני רוצה דרך צד שרת
הקישור שהבאת הוא בצד לקוח (JScript) וזה לא מתאים עבורי (אם אני לא טועה).
אפשרי לעשות זאת עם Spit ב-VBS ? אם כן, כיצד? תודה.
אם אתה רוצה לפצל את ה-getString
למערך דו מימדי בשרת למה לא להשתמש ב-getString מלכת תחילה?
getString נועד להעברה קלה של הנתונים ללקוח ולתצוגה ג'נרית של רשומות (טבלה למשל)
אין טעם להשתמש ב-Getstring
אם אתה ממילא מפצל… תשתמש ב-getrows.
לגבי option explicit – הבדל המהירויות הוא זניח. זה פשוט עניין של תכנות נכון, ומניעת שגיאות לוגיות.
ולגבי 2
רצוי לא להכליל בדף פונ' שאין בהן צורך.
לחלק את קובץ הפונק' למספר קבצים קטנים לפי נושאים, ולהכליל רק את מה שצריך.
במידה ויש לי פונקציות וסאבים
בעמוד פונקציות ספציפי ואני מכליל אותו בכל עמוד, האם זה יכול להאט את טעינת העמוד?
נכנסתי אל הדריך לתכנון DB ולא מצאתי שם תשובה למה שחיפשתי.
אז הנה שוב שאלתי:
עדיף להגדיר מספר RecordSet בתחילת העמוד ולסגור ולאפס אותם בסוף העמוד או עדיף להגדיר RecordSet כמעט בכל שימוש ולסגור ולאפסו ?
לא קיבלתי תשובה לשאלה על שאילתות טבלה:
עדיף לבחור את השדות שאני הולך להשתמש עימם בלבד בשאילתה או לבחור את כל השדות (*) ?
לדוגמא: יש לי 15 שדות בטבלה ואני עומד להשתמש רק עם 9 שדות.
תודה על התשובות.
קרא מאמר על עבודה עם מערכים בVBS
תשובות
בעיקרון כן. אם אתה משתמש למשל באינקלוד ובדף של האינקלוד יש פונקציות שאתה לא משתמש בהם זה "מבזבז" משאבים….אך עם זאת, הרבה יותר נוח לעבוד עם אינקלוד כזה משום שקל יותר לדבג ולעדכן פונקציות במידת הצורך.
ניסוח חדש של התשובה
קשר יחיד ליחיד – זהו סוג קשר פחות נפוץ משמעותו היא לכל רשומה מטבלה אחת תתכן רשומה אחת תואמת מהטבלה השנייה ולהפך.
דוגמא:
מורים וכיתות.
מורה יכול ללמד בכמה כיתות ולכן יש לו טבלה משלו.
כיתות יש הרבה בביה"ס.
צד אחר: מורה יכול לחנך רק כיתה אחת וכיתה יכולה להיחנכך רק ע"י מורה אחד וכדי ליצור לנו גמישות בסידור הנתונים עושים שני טבלאות: מורים וכיתות כאשר בטבלת המורים ת.ז של המורה היא תהיה מפתח ראשי ובטבלת הכיתות ת.ז מורה תהיה אינדקס ללא כפילויות (כי המפתח צריך להיות שכבה ומס' כיתה) ואז נוצר הקשר יחיד ליחיד.
מאמר על קשרי גומלין נשלח לצוות האתר
תודה, נותרו רק שלושה דברים נוספים
1. נכנסתי לקישור שהבאת לי אצל סיגל אך לא ראיתי תשובה לשאלתי. יש תשובה פשוטה וקצרה.
2. האם ההבדל בין פלט HTML ישירות ב-ASP יותר מהיר מאשר מעבר בין ASP ל-HTML?
דוגמא:
א. פלט + קוד ב-ASP:
<%
code…..
code…..
response.write "text…."
response.write "<h1>big text</h1>"
code…..
code…..
%>
ב. פלט ב-HTML וקוד ASP:
<%
code…..
code…..
%>
text….
h1>big text</h1>
<%
code…..
code…..
%>
השאלה היא: איזה קוד ירוץ יותר מהר? א' או ב' ? אצל סיגל ראיתי שקוד א' ירוץ מהר יותר. יש הבדל משמעותי אם זה הרבה HTML וקוד ASP ?
3. ההבדל במהירות הוא משמעותי בין קובץ אינקלוד שכולל פונקציות שעמוד מסויים משתמש בכולם או אינו משתמש בכולם ?
אני מעוניין ללמוד יותר על יעילות וביצוע קוד ה-ASP במקום לבזבז משאבי מערכת משמעותיים.
יש גם מאמר כללי בנושא ?
בקשר לרקורדסט
כמובן שהכי טוב זה לשלוף אך ורק את העמודות שאתה צריך (ואפילו אם זה כולם אני אישית מעדיף לכתוב אותם). כמו כן בכל סוף שימוש באובייקט רצוי לסגור אותו.מה אני עושה למשל:
פותח קונקשיין, פותח קומנד(command)-מגדיר אותו כמו שאני צריך, יוצר דרך הקומנד רקורדסט, משמיד קומנד, מעביר את הרקורדסט ב-getString ללקוח או למשתנה מסוים או שאני משתמש ב-getRows, משמיד רקורדסט, משמיד קונקשיין, ממשיך לעבד את העמוד
2. ב' ירוץ יותר מהר
3. יעילות זה דבר שלומדים עם הזמן, בכל מקרה, תמיד תריץ בדיקות ותבדוק מה יעיל יותר (למרות שמהירות היא לא המדד היחידי ליעילות).
לפי מה עוד אתה בודק יעילות ?
גודל הזיכרון..
גודל הזיכרון של המחשב שיש להקצות לתוכנית על מנת שהתוכנית תתבצע.
איך אני יכול לבדוק
מה גודל הזכרון שהתכנית זקוקה לו על מנת לבצע את הפעולה ?
כמה זה הרבה זכרון וכמה זה הממוצע ?
יש עוד דברים שבודקים לפיהם את יעילות העבודה ?
תודה.
אמממ
>…
אני לא חושב יש אפשרות לבדוק את גודל הזיכרון שהתוכנית צורכת…
אין הגבלה או סף מסוים ל'כמות זיכרון גדולה שתופסת' משום שזה מאוד תלוי בתוכנית שלך. ל- WINDOWS ייקח יותר זמן לעלות מאשר לדף HTML פשוט בלי תמונות למרות ששניהם יעילים <בהנחה שהקוד של WINDOWS יעיל… – מה שלא קורה במציאות
יעילות של עבודה בודקים על פי זמן וגודל הזיכרון שהתוכנית צורכת לביצוע התוכנית..
אין עוד משהו שאני יכול לבדוק אם
אני עובד לפיו בצורה יעילה ושאני מודע לזה ?
כיצד ניתן לדעת אם אני מבזבז משאבי שרת מיותרים ?
תודה.
אחד הדברים המשמעותיים ביותר, אולי
זה לסגור חיבורים…
אל תגדיר משתנים סתם, ואחרי השימוש בהם אתה יכול למחוק אותם.
ו……
לא רק לסגור את החיבורים, אלא גם לפנות את האובייקט connection מהזיכרון במחשב על ידי שימוש ב:
set con=nothing
סגירת חיבורים אני עושה
ואיך אני מוחק משתנים לאחר השימוש ?
אם אני מציב הרבה משתנים זה מאט את טעינת העמוד ויעילותו ?
החברה בא אני מאוכסן יכולה לומר לי אם אני מבזבז משאבי שרת מיותרים ? אם העניין אפשרי.
תודה.
ככה:
JS:
var x=5;
delete x;
VBS:
dim x_x=5
set x=nothing
תודה ועוד דבר
שאלתי הקודמת: אם אני מציב הרבה משתנים זה מאט את טעינת וביצועי העמוד?
אם אני מבצע מחיקה של המשתנה לאחר השימוש, זה יאץ את טעינת העמוד או שלא יהיה הבדל אם אני לא אמחק את המשתנה?
תודה על העזרה.
אמממ
בעיקרון כן…
עבור כל משתנה שאתה מוסיף, מתווסף תא זיכרון למשתנה שמכיל את ערכו. ככל שיהיו יותר משתנים, הדף יצרוך יותר תאי זיכרון, ולכן יאט במידה מסויימת את טעינת הדף.
אם אתה מבצע מחיקה של המשתנה לאחר השימוש אחרי שאתה לא משתמש בו יותר תוך כדי ביצוע הדף אז זה אמור לשפר ביצועים, אבל במידה ומדובר בעשרות משתנים לא תרגיש בהבדל… <זה ישתלם במידה ותשתמש במאות משתנים..>
כאשר אתה סוגר את הדף, התא זיכרון שנשמר לכל משתנה נמחק, ולכן אם לא מדובר במחיקת משתנה תוך כדי ביצוע הדף <הכוונה מיד לאחר שאתה מסיים להשתמש במשתנה>, אין טעם למחוק את ערכו..
בקליינט לא הייתי עושה את זה
אבל בסרבר כן, כי משתנים בודדים לכל גולש הם מאות משתנים ביחד.
אבל גם השמדה של משתנה צורכת משאבים
אם כך רק משתני אובייקטים עליי למחוק (כמו אובייקטי ADO) או כל משתנה שאני משתמש בו?
לדעתי רק אובייקטים..
לדוגמא: האובייקט connection "גוזל" משאבים רבים בשרת מסד הנתונים. על ידי סגירתו בכל פעם, מתפנים משאבים בשרת מסד הנתונים.
לעומת זאת, משתנה יחיד "גוזל" פחות משאבים מהשרת באופן משמעותי, לעומת אובייקטים.
לדעתי, רק אם משתמשים במספר גדול מאוד של משתנים <מאות, לפחות> צריך לאפס משתנים…כי בסך הכל, כל עוד שהמשתנה קיים, נשמר בשבילו תא זיכרון…גם אם מוחקים את תכולתו, עדיין יוקצה לו תא זיכרון מסויים….סביר להניח שערכו ה"ריק" (לאחר מחיקת תכולת המשתנה) ישקול פחות מערכו הרגיל, אך מדובר פה בביטים בודדים, ולכן זה לא נראה לי כל כך משמעותי…
אם הוא יפצל בשרת על ידי split אז
getrows יהיה יותר מהיר, מניסיון.
אפרופו יעילות עבודה,לי יש שאלה???
מתי יהיה יעיל ביותר באכיטקטורת asp.net,להשתמש ב- class ומתי ב- dll?????