Напоследък, когато работех по проект, някои страници трябваше да заредят много данни, а понякога кликвах върху страницата без да чакам да се зареди, а после пак кликвах на друга страница
Ще има много бавно състояние на суспендирана анимация при зареждане на уеб страницата, затова нека го разгледаме внимателно днес.
Първоначално мислех, че тази ситуация ще се случи на много сайтове или на проблема ми с компютърната мрежа, но установих, че този сайт няма такава ситуация – понякога се зациклях при публикуване, но кликвах на други страници в таба, за да заредя бързо.
Нека разгледаме по-отблизо днес!! Кодът беше тестван първи:
Код за Homeview:
Код на контролера:
За анализ на тестов код нашият контролер има 3 метода – единият е началната страница, а другите два са тестови методи
Заявката Test1 блокира за 5 секунди и след това връща данните на потребителя
Test2 заявките няма да блокират и ще върнат данни директно на потребителя
Нашата начална страница има два интерфейса за заявки на Ajax, които са асинхронни заявки, така че няма проблем с блокирането.
Ще установим, че методът Test1 извежда съдържание само след като Test2 издаде съдържание (Обикновено страницата директно извежда съдържанието, върнато от Test2, и след това изчаква 5 секунди, за да изведат съдържанието, върнато от Test1, защото js не блокира)
След това директно достъпваме интерфейсите Test1 и Test2, първо достъпваме Test1, а след това веднага достъпваме Test2, и установяваме, че Test2 трябва да изчака, докато Test1 се върне, за да завърши, както е показано на фигурата по-долу:
Ако заявка за страница постави заключване на четец, други заявки, които се обработват едновременно в същата сесия, няма да могат да актуализират състоянието на сесията, но поне могат да бъдат прочетени. Ако страница поиска заключване за запис за състоянието на сесията, всички останали страници се блокират, независимо дали искат да четат или пишат съдържание. Например, ако два програмни изгледа пишат съдържание в една и съща сесия по едно и също време, едната програма трябва да изчака другата програма да бъде завършена, преди да може да бъде написана. В програмирането на AJAX е важно да се знае за това.
Специална бележка: Само при писане на сесия Asp.net блокира заявката, но докато сте посетили страницата, където е записана сесията, например операцията след влизане в системата с нея (сесията е заключена до изтичането си, разбира се, само в случай че SessionID е същият). Ще има този проблем.
Netizen информация
Докато уебсайтът използва сесия, всяка заявка ще я заключва през целия ѝ живот, така че заявките с един и същ sessionid трябва да изчакат да бъдат отключени
Това означава, че ако сайтът има страница с ограничено време, той не може да направи нищо и трябва да изчакате страницата с ограничено време да се зареди.
Не можеш да го направиш, няколко едновременно заявки на Ajax на една и съща страница, не можеш да го направиш, изпращай заявки за анкетиране.
В обобщение:Ако проведете сесия към заявката, ако не направите сесия по заявката, горната ситуация няма да се случи
Решение:
Добавена функцията SessionState(System.Web.SessionState.SessionStateBehavior.ReadOnly) към контролера на контролера
Бележка:
Задължително означава, че искате изключителна заключване на Session (т.е. без паралелна обработка на заявки за един и същ session ID) ReadOnly означава, че искате неексклузивна заключване в Session (т.е. заявката ви все още трябва да изчака за заявки с ексклузивно заключване, за да приключи, но можете да обработвате заявки с неексклузивни заключения заключва се паралелно. Въпреки това, зависи от вас да се уверите, че кодът ви няма да се записва в Session. Не е задължително да се налага от рамката) Задължително означава сесийния мютекс, който сте поискали (т.е. няма изискване да обработвате същия SessionID паралелно)
ReadOnly означава, че сесията, която искате, е неексклузивна заключваща (т.е. заявката ви все още трябва да изчака за завършване, заявката за ексклузивен заключване, но можете да обработите заявка с паралелна неексклузивна заключваща връзка). Но трябва да сте сигурни, че кодът ви не записва сесии. Не е задължително да се изпълнява от фреймуърка)
|