595
צפיות
צפיות
104
תשובות
תשובות
מספר שאלות מנוגע ליעילות!
*** מה יותר יעיל? ***
1. להכניס רשומה חדשה למסד בעזרת ADO או conn.execute SQL?
2. האם כאשר אני מריץ שאילתה עם רקורדסט, לפני שאני מתחיל לעבוד עליו להעביר את הרקורדסט למערך ולסגור אותו?
3. אנא תנו טיפים ליעילות בעבודה… זה יעזור לכולנו.
תודה מראש ואתם מוזמנים לשרשר שאלות יעילות נוספות.
טל.
104 תשובות
בנוגע ל 1…
אני מתכוון בכלל בעבודה עם מסד.. למחוק, לעדכן, להוסיף… מה עדיף ADO או רק SQL + execute?
1. SQL לרוב יותר מהר מ-ADO
רק במקרה שאנו מבצעים לולאה ובתוכה עושים את הכנסה למסד הנתונים ADO יהיה יותר מהר בגלל שהגישה נעשית פעם אחת אחרי הלולאה.
2.כן!תמיד רצוי להיפטר מהרקורדסט כמה שיותר מהר – כדי להעביר למערת משתמשים ב-getRows.
3. ב-TagLines יש קישור לשרשור על עבודה יעילה
טיפ:
לשלוף אך ורק את השדות שבאמת אנחנו צריכים במקום להשתמש ב-*
תשובות
1. נכון, ado יותר קל משאילתות sql, אבל sql יותר מהיר ויותר יעיל.
איך אמרו כאן פעם, "לא הקלות אלא האיכות"?
2. השיטה היעילה והמהירה ביותר היא לפתוח את מסד הנתונים, להעביר את הרקורדסט למערך getRows, לסגור את מסד הנתונים, ולבסוף לעבד, להציג ולעצב את הנתונים שבמערך.
בגלל שמדובר בשרת, אז כל אלפית-שניה שמתבזבזת על סקריפט שכתוב באופן לא נכון היא חשובה, היות והיא יכולה להיכפל במספר הגולשים שמנסים לקרוא שדות ולעבור את הרשומות אחת אחת.
בקיצור, עם getRows אפשר לייעל את ביצועי מסד הנתונים.
3.
.אופס
לא ראיתי שבשתיים הוא כתב בדיוק מה שכתבתי, בעעעע..
אוקיי, תודה! אבל…
מישהו יכול לתת דוגמה להעברת רקורדסט ללולאה בעזרת getrows?
ואם אפשר אז ב VBS…
אם כבר מדברים על יעילות האם JS באמת כלכך יותר יעילה מ VBS?
כתבתי מערכת פורומים עם ASP+VBS ואני חושב להעביר אותה ל JS…
תודה לעונים!
תראה, צריך להיות משהו פשוט פה
אם אתה יודע VBS ברמה גבוהה ו JS לא משהו אז אין טעם שתעביר את הפורום ל JS כי אז פשוט הוא יהיה מסורבל.
היופי ב JS הוא נוחות הקוד (וגם היעילות) – כמי שמגיע מרקע של תכנות cpp.
GetRows ב VBS:
[פתיחת מסד הנתונים]
myArray = rs.GetRows
rs.Close
Set rs = nothing
[סגירת מסד הנתונים]
NumOfCols = ubound(myArray,1)
NumOfRecords = ubound(myArray,2)
For i = 0 To NumOfRecords
FName = myArray(1,i)
LName = myArray(2,i)
Email = myArray(3,i)
…. עיבוד ועיצוב הנתונים בטבלאות וכו ….
Next
ממש לא מדוייק ב – 2
אם עובדים עם מספר גדול של רשומות נניח 5000 רשומות או אפילו 10000 רשומות אז בהחלט עדיף GetRows בהרבה.
אבל אם עובדים על משהו כמו עשר רשומות, אפילו עשרים רשומות, השיטה ה"ישנה" תהיה מהירה יותר מ GetRows.
אוקיי.. עוד שאלה קטנה (תודה!!!)
כמעט בכל עמוד אני פותח רקורדסט מספר פעמים…
האם יותר יעיל להשאיר את הקונקשין פתוח בתחילת העמוד עד לרקורדסט האחרון או לסגור ולפתוח אותו כל פעם מחדש?
היית פשוט מפנה אותו לעמוד הזה
שבעצם ממנו לקחת את הקוד
טוב
תראה, מבחינה הגיונית
מבחינה הגיונית צריך רק Connection אחד למסד בעמוד (שגם אותו מומלץ לשים ב SSI – מטעמים מובנים, אם צריך נפרט), בכל סיום פעולה לסגור אותו, נניח:
oConn.close
(תחביר VBS)
ובסוף העמוד לנקות את האובייקט מהזכרון.
set oConn = nothing
בהחלט לא מומלץ לעשות משהו כזה oConn1, oConn2 וכך הלאה.
מספיק חיבור אחד.
ומה אתה רוצה להגיד בזה?
ברור שלא מספר חיבורים
אני שואל האם כדאי להשאיר אותו פתוח…
או לסגור אותו ולמחוק אותו ולפתוח אותו הפעם השניה שאני תריך רקורדסט או להשאיר אותו פתוח.. יש הבנה?
עניתי על זה
חיבור פותחים בתחילת העבודה עם המסד,
אחרי כל פעולה שסיימנו לסגור אותו, ואז כשצריך שוב אז לפתוח, כשסיימנו לסגור וכך הלאה.
מנקים את האובייקט בסוף העמוד בלבד (או לחילופין בסיום הפעולה האחרונה עם המסד), נניח:
some code..
some code..
some code..
connecting to the Database (Conn.open)
some actions with the DB..
some actions with the DB..
Conn.close
some code..
some code..
some code..
some code..
Conn.open
some actions with the DB..
[Here we have finished with the DB]
Conn.close
Set Conn = nothing
EOF
כאן במדור ASP באתר
יש מאמר על getRows ב-VBS
ומאמר שלי על getRows ב-JS
בהצלחה
שום דבר
פשוט שם כבר יש הסבר
זה לא ממש נכון (בדקתי את זה)
RS רגיל יעיל במקרים של 1-2 רשומות. אח"כ עדיף GetString ולכמות גדולה יותר GetRows.
אה אוקיי.. אחלה! תודה!!! עוד שאלה..
בנוגע למסד נתונים.
אני עובד עם ACCESS
ואני בונה משהו רציני… כלומר אני מקווה שיגיע לסביבות 100 אנשים מחוברים בו זמנית (אולי אני אופטימי).
האם לעבור למסד אחר? mysql? MSsql?
הכל תלוי בקוד נכון
תלוי בקוד שנכתב – האם הוא נכון ויעיל כמו שצריך.
בעיקרון הנפח המירבי של Access הוא לכל היותר 2 ג'יגה (נפח מסד) והוא יכול להחזיק 100 איש מחוברים בו זמנית.
אם האפליקציה ממש כבדה כמו פורום רב משתמשים והודעות אז בהחלט אפשר לשקול מעבר ל MSSQL .
פשוט MySQL מסד צעצוע
אם אני זוכר נכון..
או כאן או בתפוז צרפו בנצ'מרק שלפני הניסיונות שם מעל 25 רשומות בלבד מומלץ להשתמש ב GetRows, שווה לבדוק את העניין הזה.
באיזה מסד משתמש WEBMASTER?
אז מה אני צריך לבדוק כמה רשומות…
יש לי ברקורדסט (ע"י קוד) ואז לבחור באיזו שיטה?.. זה יהיה יעיל?
SQL SERVER
ממש לא
אתה הרי בתור מתכנת יכול להעריך האם זה יהיה עדכון עמוד באתר (שאילתת update) ואז זו בעצם רשומה אחת או פורום גדוש הודעות (עשרות ואולי מאות אלפי רשומות).
אם הם היו משתמשים באקסס…
הוא היה מחזיק מעמד?
אני הייתי עובד אחרת
כי אני חושב שזה יותר יעיל:
מגדיר את החיבור ואת הרקורדסטים, פותח את החיבור בעזרת מחרוזת חיבור אחת ופותח כל רקורדסט עם החיבור (וסוגר את החיבור רק בסיום העבודה עם המסד).
אוקיי תודה רבה לכולם!!!
MSSQL
אבל עד לפני חצי/שלושת רבעי שנה האתר עמד על ACCESS
(אפשר למצוא את הזמן המדויק ע"י הגעה לעמוד החארון של הפורום ולחשב את הזמנים – הפורום גם שודרג)
או שזה מה שאתה אמרת ולא הבנתי
אני חושב שכן
ואם אני בונה מערכת גדולה…
יהיה לי קשה להעביר אותו לMSSQL או לכל מסד רציני אחר?
הוא התכוון ש…
הוא סוגר ופותח את החיבור למסד כל פעם: conn.open
ומוחק אותו רק בסוף… set conn = nothing
לא ירדתי לסוף דעתך
התכוונת למשהו כזה:
rs.open oConn, SQLstr
?
אני סה"כ נתתי דוגמא באופן כללי שתראה עבודה יעילה פחות או יותר עם המסד,
זה לא אומר שככה צריך לנהוג פשוט ככה זה יותר נראה לעין עם open ו close .
כעקרון לא
אבל לפעמים משנים את המבנה של המסד כדי שיעשה יותר יעיל בהתאם למסד
תלוי בעצמך
אתה צריך ללמוד Tsql ובהחלט יש שוני בתחביר ובעבודה מולם.
כן, התכוונתי לזה בדיוק
אוףףף אתם מבלבלים!
אז לסגור את החיבור רק בסוף או לאחר כל רקורדסט?…
למחוק חיבור בטוח בסוף אבל מה עם פתיחה וסגירה???
? אז מה אתם מיעצים לי לעשות<?>
לבנות עם ACCESS שאיתו אני יודע לעבוד…
או ישר לעבור ל MSSQL? והאם הוא חינמי?…
התבלבת קצת
rs.Open sqlStr, oConn
בפירוש לא חינמי
הוא עולה די הרבה כסף..
תשאר עם Access אם אין תקציב.
לאא… אני יודע… אבל מה עם…
החיבור למסד עצמו?!
set Conn=Server.CreateObject("ADODB.connection")
ConnString="DBQ=" & Server.Mappath("comments.mdb") & ";Driver={Microsoft Access Driver (*.mdb)};"
Conn.Open ConnString
שלוש השורות הראשונות אני כותב הראש העמוד… זה ברור…
אבל מה עם פתיחת הקונקשין?(Conn.Open ConnString)… לפני כל רקורדסט לפתוח מחדש ולסגור בסופו או לפתוח רק בתחילת העמוד ובסופו לסגור אותו???
🙂 אוקיי…
בכל מקרה
עד ה 25 הראשונות זה הבדל של מילישניות בודדות בהרצה של 1000 פעם, ככה שפשוט לא כדאי לשבור את הראש.
עוד פעם
א. לסגור חיבור אחרי כל פעולה עם המסד
ב. לנקות את החיבור מהזכרון בסיום הפעולה האחרונה עם המסד
או! לזה התכוונתי! תודה רבה גבר גבר!
לטובת GetRows או RS רגיל?
כל שנייה קובעת
(ככה לפחות המוטו של שח"ל)
אחלה, סע לשלום, המפתחות בפנים
נכון, אבל אני חושב שהמטרה הובנה
תודה! מה הייתי עושה בלעדיכם!?
עוד שאלה קטנה…!
עבדתי עד עכשיו עם VBS.
אני כותב מערכת פורומים חדשה כי את הקודמת (כפי שאני רואה עכשיו) ממה לא כתבתי בצורה יעילה.
האם לעבור ל JS? יש לי קליטה טובה לשפות תכנות… האם זה כדאי?
עם איזה רקע אתה מגיע?
באילו שפות תכנות?
אני מציע לך קודם
לתרגל את JS בלקוח ואחר כך לעבור עם JS לשרת
pascal, VB, delphi, פרולוג
כולם דומות ל VBS…. אבל לא יהיה לי קשה לעבור ל JS….
מה אתם אומרים?
זה משנה?…
את VBS לא תרגלתי בלקוח..
והסתדרתי טוב מאוד בשרת… מה זה משנה?
שחכתי… ASSEMBLER
השאלה האמיתי אם היא באמת…
JS באמת ממש ממש יותר טובה ויעילה מ VBS?
VBS לא רצוי לעשות בלקוח
זו היית רק הצעה. אתה יכול לעשות מה שבא לך
לא נראה לי שזה משנה משהו
אוקיי 🙂
אבל אם יותר נוח לי לכתוב ב VBS,
אני בטוח שגם JS יהיה בסדר האם כדאי לעבור שפה?
תראה
אתה סוגר ומוחק את החיבור בסיום הפעולה האחרונה עם המסד.
את החיבור אל תסגור ותפתח באמצע הפעולות עפ המסד.
תגובה?
תשמע
vbs היא שפה פשוטה, אתה לא היחיד שלא תירגל אותה בלקוח וישר התחיל איתה בשרת.
js היא שפה עצומה, ותאמין לי לא קל ללמוד אותה בשרת כמו שקל ללמוד vbs בשרת.
בקשר לשאלתך מה יותר עדיף, js או vbs, התשובה היא js, ובגדול, זאת עובדה.
בקיצור
תלמד ותבין את js בלקוח ואח"כ תעבור לשרת.
קראתי, הפנמתי, ניגש לעבודה 🙂 תודה.
JS יותר מהירה מ VBS
JS יותר מהירה מ VBS – תחביר יותר נוח ויפה (סקופים |מאוהב|).
אם יש לך זמן ללמוד לך על JS.
מה הקשר בין אסמבלי ל VBS?
לפעמים זה ולפעמים זה…
השוואת שיטות:
קראתי מאמר המסביר איל להעביר+להציג רקורדסט למערך (JS) מאמר שלכם.
יש בו 2 שיטות אחת בשרת ואחת בלקוח…
מה יותר יעילה? הרי להעביר ללקוח לוקח גם זמן… מה אתם ממליצים?
למה צעצוע? הוא לא טוב?
אני בניתי עליו מאוד מה הוא לא חזק יותר מאקסס?
המאמר שלי על getRows ב-JS
או על getString ?
getrows
בשרת
לא חבל לעבור פעמיים על אותו מערך ?!
הכמות הגולשים שיש באתר זה מספק….
את ה-ACCESS והוא לא יקרוס.
במקרה ויהיו פה הרבה מאות אנשים אולי ACCESS יחיה עדיין וגם לא בטוח.
משתמשים ב-SQL SERVER כשיש אלפי גולשים כבר באתר או בפורום.
שאלת יעילות!
האם כדאי לכתוב פונקציה שמעבירה מערך מרקורדסט למערך או פשוט לכתוב את הקוד בדף?
קוד הפונקיצה הוא:
function rstoarray(rs,sql,conn)
{
rs.Open(sql, conn, 3, 3);
if (!rs.EOF)
{
//מעביר רקורדסט למערך
var numflds = rs.Fields.Count;
var temparray = rs.GetRows();
//מחיקת חיבור למסד ורקורדסט
rs.Close;
delete rs;
rs = null;
conn.Close;
//מחזיר מערך רשומות
return temparray.toArray();
}
else
{
return "Empty";
rs.Close;
delete rs;
rs = null;
conn.Close;
}
}
ולקרוא לפונקציה שנמצאת בדף אינקלוד או פשוט כל פעם לכתוב אותה בקוד?
בנוסף שאלה לגבי interdev
כאשר אני כותב עם התוכנה + JS היא לא משלימה לי כאשר אני למשל כותב array.
או
conn.
היא משלימה רק בצד לקוח ולא בשרת מישהו יודע למה?
interdev יסתדר רק בקשר לשאלה 1 plz?
תמיד, אבל תמיד
(טוב כמעט תמיד)
הכי טוב SSI, אין טעם לכתוב את הקוד עשרות פעמים.
מה גם שאז הוא ייטען לך מהר יותר (שמור בזכרון המחשב).
הצחקת אותי
MySQL אומנם חינמי, אבל הוא בהחלט מסד צעצוע.
עדיין נשאר לו ללמוד קצת SPים, שאילתות מקוננות ועוד…
מה זה SSI?
Server Side Include
אה אז עם פונקציה?..?
אם הבנתי נכון?
לא
יש לך כמה שיטות.
א. אם אין לך פונקציות שצריך להעביר: (צד שרת)
server.execute "file.asp"
ב. אם אין לך פונקציות שצריך להעביר: (צד שרת)
server.transfer "file.asp"
ג. אם יש לך פונקציות להעביר (צד לקוח)
<!–#include virtual="file.asp"–>
(אפשרי גם filre במקום ה virtual.
לא הבנתי אם תוכל תן הסבר קצר…
יש לי דף שנקרא Sfuncs.asp ובו כל הפונקציות השימושיות של צד שרת
ודף שנקרא Cfuncs.asp ובו כל הפונקציות השימושיות של צד לקוח
איך להוסיף אותם?
ואם כדי לכתוב את כל הפעולות שחוזרות על עצמן בפונקציות?
הערה –
"ADO יהיה יותר מהר בגלל שהגישה נעשית פעם אחת אחרי הלולאה"
חשוב לזכור למקם את ה-rs.Update מחוץ ללואה.
לידיעתך
יש כיום את המסד הנתונים (או שזה הרחבה של mySql) בשם MaxDB שמאפשר SPים ושאילתות מקוננות ועוד כמה דברים ששופרו מ-mySql
אפשר להיכנס לאתר של mySql ולראות
ככה
include עושה הכללה של התוכן של הקובץ שרוצים לתוך העמוד שבו שמנו את האינקלוד. אפשר להשתמש בו עם האטריבוט(attribute) קובץ(file) או וירטואלי(virtual). (על ההבדל בניהים חפש כאן בפורום אני זוכר שהסברתי את זה)
Server.Execute "מקמפל" קובץ מסוים ואת התוצאה הוא מוציא בדף.
Server.Transfer מעביר את כל המשתנים לדף אחר שמהנקודה שבא השתמשנו בו הפסקנו את העיבוד של הדף הנוכחי והדף האחר עושה עיבוד משלו
(נראה לי שפיספסתי כאן משהו אז מישהו כאן יתקן/יוסיף על דבריי )
אוקיי אזז…
לגבי השאלה מלמעלה האם לכתוב פונקציה להעברת רקורדסט למערך או לכתוב את זה כל פעם בקוד… בכלליות מה יותר יעיל לכתוב פונקציות שחוזרות על עצמן או כל פעם מחדש בקוד?
זו השאלה…
עשיתי דף ASP של פונקציות func.asp ואני מוסיף אותו בתחילת עמוד עם אינקלוד…
האם זה יותר יעיל מאשר לכתוב בקוד עצמו!?…
טל
אבל הוא לא חלש ולא חזק נכון?
שזה נחשב טוב לא?
מה זה SP ושאילתות מקוננות?
דברים שלא תראה בגרסא הנוכחית של
mySQL לעולם
SP – שאילתא מאוחסנת(stored procedure) – בלוק של קוד/י SQL
שאילתה מקוננת – שאילתה שיש בה תת שאילתות למשל:
SELECT TOP 10 <fields> FROM tbl WHERE fldID not in(SELECT TOP 20 fldId FROM tbl)
השאילתא שבתוך הסוגריים זו התת שאילתא.
זו הייתה כוונתי
אין קשר פשוט….
למדתי את זה במסדרת מגמת רובוטיקה…
שאל מה הרקע שלי בתכנות…
🙂
קפיש?
למה?
<script language="jscript" runat="server" src="x.js"></script>
בקליינט אם אני לא טועה פשוט מורידים את ה runat
אני פשוט הסברתי לו את מה שרוני כתב
שמעתי על זה אבל אני דיברתי על MySQL
הכוונה הייתה ל MySQL 4 שקיים כיום ברוב חברות האיחסון.
יש כאלו שמשתמשות עדיין ב MySQL 3
לגבי VBS.. יש גם אפשרות כזו.?.
אין פה קשר ל VBS או JS
תגובה לך ולניר
אם זה רק פונקציות השימוש בדף ASP הוא מיותר ובזבזני… הכי טוב זה פשוט להשתמש בקובץ JS.
בעיה בקוד קטן
יש לי את הקוד הבא:
If not Rs.EOF then 'בודק האם המשתמש קיים
session("s_login") = 1
session("s_uid") = Rs.Fields("us_id")
session("s_uname") = Rs.Fields("us_nm")
session("s_admin") = Rs.Fields("us_admn")
Rs.close
Sql = "SELECT utils.site_logins FROM utils"
Rs.Open Conn, Sql
temp = Rs.Fields("site_logins")
Rs.Fields("site_logins") = Temp + 1
Rs.Update
Rs.Close
%><script type="text/javascript">
opener.focus();
opener.location.reload();
self.close();
self.window.top.close();
</script><%
Else 'אם לא
showmes = "Wrong Username or Password"
End if
והודעת השגיאה שאני מקבל היא:
Error Type:
ADODB.Recordset (0x800A0BB9)
Arguments are of the wrong type, are out of acceptable range, or are in conflict with one another.
/vol2/loginwin.asp, line 26
זה לאחר שאני מכניס שם משתמש וסיסמה שהם נכונים.
כאשר הלא נכונים הוא עובד טוב.
תודה מראש!
טל.
כך
Rs.Open Sql,Conn
וואוו תודה…
עוד שאלה, בקוד יש….
הוספה של
rs.fields("site_logins")
באחד… והוא לא מוסיף….
אתה צריך להגדיר
שאתה מעוניין לבצע עדכון נתונים, כך:
Rs.Open Sql,Conn, 3, 3
תודה! ועוד שאלה:..
כיצד אני יכול ליצורמחוק ספריה ע"י קוד?
כמו כן למחוק קובץ?..
(בלי שימוש בקומפוננט כלשהו)
תודה מראש!
זאת ניתן לעשות בעזרת FSO.
זה לא קומפוננט, אבל צריכים לאפשר לך גישה לזה.
יש את זה היום ברוב (אם לא כל) חברות האירוח בתשלום…
לפרטים, חפש עוד על Scripting.FileSystemObject .
שרשר שאלותיך!