كيفية تقليل / القضاء على وقت الانتظار / الكمون في طلب اياكس
-
09-12-2019 - |
سؤال
لدي ASP.NET مشروع مفك 3 حيث تقوم صفحة أسبكس الرئيسية بتحميل ديناميكي لأجزائها باستخدام جكري أجاكس.لذلك أساسا عندما يتم تحميل الموقع ، فإنه يضرب / الصفحة الرئيسية /الفهرس ثم ضمن عرض الفهرس (أسبكس) ، وهناك عدة أسطر من مسج التي تجعل المكالمات أجاكس (ل/هوم /بارتون و/هوم / بارتو لملء أجزاء من الصفحة.
لذلك في كل مرة يتم فيها تحميل الصفحة ، فإنها تقوم بشكل أساسي بـ 3 طلبات:للحصول على الفهرس ، للحصول على جزء واحد ، ثم الجزء الثاني.
السؤال:لماذا هناك نوع من" الانتظار " الوقت لطلب الثالث لتنفيذ?اعتقدت أن هذا هو حد الطلب المتزامن للمتصفح, ولكن لماذا لا يتم تنفيذه بعد الانتهاء من الطلب 1?
عندما وضعت تجريبيا" أوتبوتكاش "السمة على" بارتو " ، فإنه يتصرف كما هو متوقع ، أنه كان ينفذ بسرعة.هذا يلمح إلى أن المشكلة ليست في إيس ، ولكن في مكان ما بعد ذلك وقبل أن يضرب طريقة العمل بلدي.
هنا لقطة شاشة من الكروم شبكة التعريف:
هنا هو لقطة الشاشة على مفمينيبروفيلر-نظرة على الصف 3 / القيمة ، فإنه ينتظر 500 مللي ثانية قبل تنفيذ رمز العمل وحدة تحكم بلدي.
رمز وحدة التحكم الخاصة بي يشبه هذا.على الرغم من أنني قص التعليمات البرمجية الفعلية ، ولكن رمز ل بارتو هو تافهة جدا (لا حساب طويل ، لا يدعو دب، الخ):
public class HomeController : Controller {
public ActionResult Index() {
// do something here
return View();
}
public ActionResult PartOne() {
// do something here
return View();
}
public ActionResult PartTwo() {
// do something here
return View();
}
}
جافا سكريبت:
$(document).ready(function () {
$.ajax({
url: "/Home/PartOne",
cache: false,
success: function (data, textStatus, request) {
$("#TestContainerOne").html(data);
}
});
$.ajax({
url: "/Home/PartTwo",
cache: false,
success: function (data, textStatus, request) {
$("#TestContainerTwo").html(data);
}
});
});
فهرس بلدي.اسبكس:
<h2>Home page</h2>
<div id="TestContainerOne"></div>
<div id="TestContainerTwo"></div>
بارتون.أسكس:
<h2>Part One</h2>
الجزء الثاني.أسكس:
<h2>Part Two</h2>
مساعدة?
المحلول
يجب عليك استخدام حالة جلسة القراءة فقط أو تعطيلها تماما من أجل الحصول على معالجة موازية لطلبات أجاكس.بشكل افتراضي ، يقوم الخادم بتأمين حالة الجلسة للطلبات القادمة من نفس العميل ، بحيث يتم تنفيذ الطلبات بشكل متسلسل.
يتم ذلك عن طريق تزيين وحدة التحكم الخاصة بك مع SessionState
السمة:
[SessionState(System.Web.SessionState.SessionStateBehavior.ReadOnly)]
public class HomeController : Controller {
public ActionResult Index() {
// do something here
return View();
}
public ActionResult PartOne() {
// do something here
return View();
}
public ActionResult PartTwo() {
// do something here
return View();
}
}