الغرض من هذه المقالة هو تحقيق التصفح المقسم إلى صفحات للبيانات الضخمة وتحسين السرعة.
تعد وظيفة تصفح الترحيل ضرورية لإنشاء تطبيق ويب؛ وكانت هذه المشكلة أيضًا هي المشكلة الأكثر شيوعًا لفترة طويلة، وقد تم حلها جيدًا، ومن بينها العديد من خوارزميات الترحيل لبرامج ASP، مثل استخدام سمات PageSize لكائن ado. قم بحساب الصفحات بناءً على العدد الإجمالي للسجلات، ثم انتقل إلى مجموعة السجلات ثم قم بالإخراج؛ وهناك أيضًا طرق لكتابة الإجراءات المخزنة لتنفيذ بيانات الترحيل سأقدم أدناه خوارزمية ترحيل سريعة جدًا في المشاريع الفعلية
: SQL (يتم تنفيذها باستخدام TOP والترقيم التلقائي)
بيئة
البرنامج النصي للصفحة (وظيفة احتياطية للمتصفح)
:
IIS/SQL Server/الوصول
هيكل الجدول:
إنشاء جدول محتوى الجدول(
معرف الرقم التلقائي (int، 1،1) ليس فارغًا،
رمز التصنيف<I>var</I>char(20) null,
العنوان<I>var</I>char(255) NULL،
المحتوى<I>فار</I>شار(4000) فارغ،
الوقت التاريخ الوقت فارغة،
)
مبدأ التنفيذ:
تم إعداد هذا الجدول بحقل ترقيم تلقائي، وتتمثل خاصية هذا الحقل في إنشاء أشكال غير مكررة، بما في ذلك أن الحقل سيظل "مرنًا" بعد حذف السجل (ملاحظة: عادةً ما يتم ذلك عند إنشاء جداول النظام). نادرًا ما يتم استخدام الحقل، لأنه لا يمكن إدارة الرقم بحرية، ولكن يتم استخدامه هنا بشكل أساسي لأنني أريد حذف رمز صيانة الرقم في المقالة).
ترقيم الصفحات:
ثم الخطوة الأولى هي الاستعلام عن بيانات الصفحة، إذا كان هناك 100 سجل وتم استخدام 20 سجلاً لصفحة واحدة، فإن خوارزمية الترحيل المعتادة هي "إجمالي عدد الصفحات = إجمالي السجلات مقسومًا على عدد التحكم في الترحيل [إذا هناك باقي، العدد الإجمالي للصفحات بالإضافة إلى واحد]"، يؤدي هذا الأسلوب إلى الحاجة إلى إنشاء مجموعة سجلات كبيرة من جميع السجلات؛ لذلك، اقترح بعض الأشخاص استخدام خوارزمية ترحيل الصفحات للإجراءات المخزنة. الأول هو asp البرنامج النصي لإنشاء مجموعة سجلات كبيرة، وهو بطيء جدًا، وهذا الأخير يقتل الدجاج. على الرغم من أنني غالبًا ما أكتب الإجراءات المخزنة، وفقًا لتفكيري، أجد أن كتابة الإجراءات المخزنة زائدة عن الحاجة تمامًا.
في SQL، يعرف العديد من الأصدقاء الجدد دور الكلمة الرئيسية المعدلة، على سبيل المثال: حدد TOP 1 * من الجدول 1 - بهذه الطريقة، يتم إرجاع مجموعة سجل تحتوي على سجل واحد فقط من جدول Table1 الهدف من تحسين الترحيل هو تجنب إمكانية التحكم الكامل في إنشاء مجموعة سجلات كبيرة جدًا من خلال TOP؛ والآن يجب أن يحدد جدول الاستعلام أعلى 20 ترقيمًا تلقائيًا، والعنوان، والمحتوى، والوقت من جدول المحتوى.
ولكن لا تزال هناك مشكلة الآن، وهي كيفية تحديد موضعها، فمن المستحيل أن يقوم Top بوضع صفحة معينة وإخراجها لنا تلقائيًا. هذا هو المكان الذي تم فيه تصميم الجملة لإخراج المحتوى الصحيح وفقًا لشرط معين؛ ملاحظة: الترتيب حسب فرز السجلات مهم جدًا، وهذا يحدد نجاح أو فشل هذه الخوارزمية.
العرض التوضيحي هنا هو طريقة DESC، والتي يتم ترتيبها بترتيب عكسي. على سبيل المثال، بالنسبة لتحديثات البرامج على موقع ويب، يتم وضع آخر تحديث أولاً، وهذه هي طريقة الترتيب العكسي.
حسنًا، دعونا نلقي نظرة على الكود الفعلي أولاً، يجب علينا تحديد ما إذا كانت هذه هي صفحة البداية.
خافت strSQL، i، endID، isBeginPage
const Cnt_PageSize = 20 'حدد حجم كل صفحة من السجلات
"تحديد ما إذا كانت عملية الدخول إلى الصفحة التالية هي عملية عن طريق التحقق من قيمة معلمة الصفحة التي يمررها المتصفح."
isBeginPage = isEmpty(request("Page")) أو request("Page")="" أو request("Page")<>"التالي"
'هنا هو جوهر الترحيل
إذا كانت isBeginPage ثم "إذا كانت هي صفحة البداية."
'Query = قم بإدراج السجلات التي يساوي رمز تصنيفها المعلمة flbm، بترتيب عكسي، وقم فقط بإدراج قلم Cnt_PageSize الأول (Cnt_PageSize هو تعريف ثابت، مثل 20)
strSQL = "select TOP " & Cnt_pageSize & " الترقيم التلقائي، العنوان، المحتوى، الوقت من جدول المحتوى حيث ترميز التصنيف = '" & TRIM(SQLEncode(request("flbm"))) & "' الترتيب حسب تنازلي الترقيم التلقائي"
آخر "إذا لم تكن صفحة البداية."
إذا كان الطلب ("الصفحة") = "next" فإن "هذا مكتوب هنا لتحسين أداء الكود. إذا كانت المعلمة هي التالية، فهذا يعني أخذ محتوى الصفحة."
'Query = قم بإدراج السجلات التي يساوي رمز تصنيفها المعلمة flbm ويجب أن يكون أقل من معرف النهاية التلقائي للرقم (endID هو أيضًا معلمة)، وقم بفرزها بترتيب عكسي، وقم فقط بإدراج قلم Cnt_PageSize الأول (Cnt_PageSize هو تعريف ثابت، مثل 20)
strSQL = "select TOP" & Cnt_pageSize & "الترقيم التلقائي والعنوان والمحتوى والوقت من جدول المحتوى حيث ترميز التصنيف = '" & TRIM(SQLEncode(request("flbm"))) & "' والترقيم التلقائي<" & الطلب ("endID") و"الطلب حسب الرقم التلقائي"
انتهي إذا
end if
"افتح اتصال البيانات لتنفيذ SQL وإنشاء مجموعة سجلات."
مجموعة rs = Cnn.Execute(strSQL)
إذا لم يكن rs.Eof، فاكتب هنا لتحديد ما إذا كان الأمر Eof ليس ضروريًا، ولكن له معنى خاصًا هنا.
اتصل بـ TableTitle 'هذه وظيفة مكتوبة ذاتيًا تُستخدم لإنشاء علامات الجدول
استدعاء beginTr 'هنا علامة tr لإنشاء الجدول
لـ i=0 إلى rs.fields.Count-1' اجتياز حقول مجموعة السجلات
استدعاء AddCol(rs(i).name) 'اسم حقل الإخراج
التالي
استدعاء endTr
بينما لا rs.eof 'قم بتكرار محتويات مجموعة السجلات والإخراج
استدعاء beginTr
لـ i=0 إلى rs.fields.Count-1
استدعاء AddRow(ASPEncode(rs(i).value))
التالي
نهاية المكالمة
endID = rs("الترقيم التلقائي") 'هنا يتم حفظ قيمة الترقيم التلقائي لكل مخرجات
rs.MoveNext
ويند
استدعاء TableBottom 'حتى الآن، ما عليك سوى إخراج جميع محتويات مجموعة السجلات
'يتم إخراج علامة تقليب الصفحة هنا، وvbaIIF هي وظيفة مكتوبة ذاتيًا
النموذج الأولي هو <I>function</I> vbaIIF(a,b,c)
إذا كان ذلك الحين
vbaIIF=b
آخر
vbaIIF =c
نهاية إذا
نهاية <I>الوظيفة</I>
يتم تنفيذ الصفحة السابقة عن طريق استدعاء وظيفة المتصفح History.back(1) من خلال برنامج نصي، ثم ليست هناك حاجة لإعادة إنشاء البيانات على جانب الخادم عند العودة إلى الصفحة، ولا يلزم مراعاة السرعة. .
عندما تكون في الصفحة الرئيسية، يجب أن يكون الرابط إلى الصفحة السابقة غير صالح، ويتم تحقيق ذلك من خلال vbaIIF(isBeginPage, "disabled", ""). ليست الصفحة الرئيسية، قم بإضافة History.back (1)؛ أمر البرنامج النصي، المستخدم لاسترجاع صفحة التصفح.
الصفحة التالية هي تمرير معلمة الصفحة ومعلمة endID. يتم تعيين الصفحة على التالي للإشارة إلى إجراء الصفحة التالية. يشير endID إلى رقم نهاية مجموعة السجلات الحالية، وسيتم ترقيم الصفحة التالية من هذا.
Response.Write("〈a href=""#"" onclick=""java<I>script</I>:" & vbaIIF(isBeginPage,"",history.back(1);") & "" " " & vbaIIF(isBeginPage،" معطل ""،") & "〉الصفحة السابقة〈/a〉|〈a href=""TypeOptions.asp?flbm=" & request("flbm") & "&Page=next&endID = " & معرف النهاية & """〉الصفحة التالية〈/a〉")
آخر
'هنا، من خلال الحكم على ما إذا كانت مجموعة السجلات فارغة، يمكننا حل مشكلة الاستمرار في تقليب الصفحات حتى الصفحة الأخيرة.
إذا لم يكن كذلكBeginPage إذن
"تحديد ما إذا كان هذا سجلًا فارغًا وليس صفحة البداية، ثم إنشاء برنامج نصي لصفحة التراجع. التأثير هو أنه بعد الدخول إلى الصفحة، سيعود تلقائيًا إلى الصفحة السابقة."
Response.Write "〈<I>script</I> language=java<I>script</I>〉" & vbCrlf
الاستجابة.اكتب "history.back(1);" & vbCrlf
الاستجابة.اكتب "〈/<I>النص</I>〉"
الاستجابة.النهاية
else 'إذا كان هذا هو سجل صفحة البداية، فسيكون فارغًا، وسيطالبك بعدم وجود محتوى.
Response.Write "〈لون الخط=أزرق〉لا يوجد محتوى في هذه الفئة〈/font〉"
نهاية إذا
endIf
ملخص: من خلال البرامج النصية للواجهة الأمامية ومهارات استعلام SQL، تكون برامج الترحيل عالية الأداء بسيطة وسريعة،
وآمل أن يتمكن الزملاء من التوصل إلى خوارزميات أفضل لترحيل البيانات في الوقت الفعلي.
ملاحظة: نظرًا لأن المنتدى يحد من أحرف HTML، فإن الرموز الرئيسية موجودة الحروف الصينية الكبيرة.