Αυτό το άρθρο είναι ένα άρθρο καθρέφτη της αυτόματης μετάφρασης, κάντε κλικ εδώ για να μεταβείτε στο αρχικό άρθρο.

Άποψη: 29669|Απάντηση: 3

[ASP.NET] ASP.NET πολλαπλών αιτημάτων στη σελίδα ταυτόχρονα, υπάρχει μια κατάσταση αναστολής κινούμενων εικόνων αποκλεισμού

[Αντιγραφή συνδέσμου]
Δημοσιεύτηκε στις 22/9/2017 5:32:59 μ.μ. | | | |
Πρόσφατα, όταν δούλευα σε ένα έργο, ορισμένες σελίδες έπρεπε να φορτώσουν πολλά δεδομένα και μερικές φορές, έκανα κλικ στη σελίδα χωρίς να περιμένω να ολοκληρωθεί η φόρτωση της σελίδας και μετά έκανα ξανά κλικ σε άλλη σελίδα

Θα υπάρχει μια πολύ αργή κατάσταση αναστολής κινούμενων εικόνων κατά τη φόρτωση της ιστοσελίδας, οπότε ας τη μελετήσουμε προσεκτικά σήμερα.

Στην αρχή, νόμιζα ότι αυτή η κατάσταση θα συνέβαινε σε πολλούς ιστότοπους ή στο πρόβλημα ταχύτητας του δικτύου του υπολογιστή μου, αλλά διαπίστωσα ότι αυτός ο ιστότοπος δεν είχε αυτήν την κατάσταση, μερικές φορές, κολλούσα όταν δημοσίευα, αλλά έκανα κλικ σε άλλες σελίδες στην καρτέλα για γρήγορη φόρτωση.

Ας ρίξουμε μια πιο προσεκτική ματιά σήμερα!! Ο κώδικας που δοκιμάστηκε πρώτος:

Κωδικός Homeview:

Κωδικός Ελεγκτή:



Για την ανάλυση κώδικα δοκιμής, ο ελεγκτής μας έχει 3 μεθόδους, η μία είναι η αρχική σελίδα και οι άλλες δύο είναι μέθοδοι δοκιμής

Το αίτημα Test1 αποκλείει για 5 δευτερόλεπτα και στη συνέχεια επιστρέφει δεδομένα στον χρήστη

Τα αιτήματα δοκιμής 2 δεν θα αποκλείσουν και θα επιστρέψουν δεδομένα απευθείας στον χρήστη

Η αρχική μας σελίδα είναι δύο διεπαφές για αιτήματα Ajax, τα οποία είναι ασύγχρονα αιτήματα, επομένως δεν υπάρχει πρόβλημα αποκλεισμού.

Θα διαπιστώσουμε ότι η μέθοδος Test1 εξάγει περιεχόμενο μόνο αφού η Test2 εξάγει περιεχόμενο (Κανονικά, η σελίδα θα εξάγει απευθείας το περιεχόμενο που επιστρέφεται από το Test2 και, στη συνέχεια, θα περιμένει 5 δευτερόλεπτα για να εξάγει το περιεχόμενο που επιστρέφεται από το Test1, επειδή το js δεν αποκλείει



Στη συνέχεια, έχουμε απευθείας πρόσβαση στις διεπαφές Test1 και Test2, έχουμε πρόσβαση πρώτα στο Test1 και, στη συνέχεια, έχουμε άμεση πρόσβαση στο Test2 και διαπιστώνουμε ότι το Test2 πρέπει να περιμένει μέχρι να επιστρέψει το Test1 για να ολοκληρωθεί, όπως φαίνεται στο παρακάτω σχήμα:



Εάν μια αίτηση σελίδας ορίζει ένα κλείδωμα αναγνώστη, άλλες αιτήσεις που υποβάλλονται σε επεξεργασία ταυτόχρονα στην ίδια περίοδο λειτουργίας δεν θα μπορούν να ενημερώσουν την κατάσταση της συνεδρίας, αλλά τουλάχιστον μπορούν να διαβαστούν. Εάν μια σελίδα ζητήσει κλείδωμα εγγραφής για την κατάσταση της συνεδρίας, τότε όλες οι άλλες σελίδες αποκλείονται, ανεξάρτητα από το αν θέλουν να διαβάσουν ή να γράψουν περιεχόμενο. Για παράδειγμα, εάν δύο προβολές προγράμματος εγγράφουν περιεχόμενο στην ίδια περίοδο λειτουργίας ταυτόχρονα, το ένα πρόγραμμα πρέπει να περιμένει μέχρι να ολοκληρωθεί το άλλο πρόγραμμα για να μπορέσει να γραφτεί. Στον προγραμματισμό AJAX, είναι σημαντικό να γνωρίζετε ότι συμβαίνει αυτό.

Ειδική σημείωση: Μόνο κατά τη σύνταξη μιας συνεδρίας, Asp.net θα αποκλείσει το αίτημα, αλλά εφόσον έχετε επισκεφτεί τη σελίδα όπου είναι γραμμένη η περίοδος σύνδεσης, όπως η λειτουργία μετά τη σύνδεση στο σύστημα με τη συνεδρία (η συνεδρία είναι κλειδωμένη μέχρι να λήξει, φυσικά, είναι μόνο η περίπτωση που το SessionID είναι το ίδιο). Θα υπάρξει αυτό το πρόβλημα.

Πληροφορίες Netizen

Εφόσον ο ιστότοπος χρησιμοποιεί μια περίοδο λειτουργίας, κάθε αίτημα θα κλειδώνει τη συνεδρία καθ' όλη τη διάρκεια ζωής της, έτσι ώστε τα αιτήματα με το ίδιο αναγνωριστικό συνεδρίας να πρέπει να περιμένουν να ξεκλειδωθούν

Αυτό σημαίνει ότι εάν ο ιστότοπος έχει μια σελίδα που έχει λήξει, δεν μπορεί να κάνει τίποτα και πρέπει να περιμένετε να φορτώσει η χρονομετρημένη σελίδα.

Ούτε εσύ μπορείς να το κάνεις, πολλαπλά ajax ταυτόχρονα αιτήματα στην ίδια σελίδα, δεν μπορείς να το κάνεις, αιτήματα δημοσκόπησης μηνυμάτων.



Για να το συνοψίσουμε:Εάν κάνετε μια συνεδρία στο αίτημα, εάν δεν φέρετε μια συνεδρία στο αίτημα, η παραπάνω κατάσταση δεν θα συμβεί

Λύση:

Προστέθηκε η δυνατότητα SessionState (System.Web.SessionState.SessionStateBehavior.ReadOnly) στον ελεγκτή

Σημείωση:

Απαιτείται σημαίνει ότι ζητάτε αποκλειστικό κλείδωμα στο Session (δηλαδή δεν υπάρχει παράλληλη επεξεργασία αιτημάτων για το ίδιο sessionID)
Μόνο για ανάγνωση σημαίνει ότι ζητάτε ένα μη αποκλειστικό κλείδωμα στο Session (δηλαδή το αίτημά σας πρέπει ακόμα να περιμένει να ολοκληρωθούν τα αιτήματα με αποκλειστικό κλείδωμα, αλλά μπορείτε να επεξεργαστείτε αιτήματα με μη αποκλειστικό κλείδωμα κλειδαριές παράλληλα. Ωστόσο, εναπόκειται σε εσάς να διασφαλίσετε ότι ο κώδικάς σας δεν γράφει στο Session. Δεν επιβάλλεται απαραίτητα από το πλαίσιο)
Απαιτείται σημαίνει το mutex συνεδρίας που ζητήσατε (δηλαδή δεν απαιτείται η παράλληλη επεξεργασία του ίδιου SessionID)

Μόνο για ανάγνωση σημαίνει ότι η περίοδος λειτουργίας που ζητάτε είναι ένα μη αποκλειστικό κλείδωμα (δηλαδή το αίτημά σας πρέπει ακόμα να περιμένει για ολοκλήρωση, το αίτημα για αποκλειστικό κλείδωμα, αλλά μπορείτε να επεξεργαστείτε ένα αίτημα με ένα παράλληλο μη αποκλειστικό κλείδωμα). Αλλά θέλετε να βεβαιωθείτε ότι ο κώδικάς σας δεν γράφει συνεδρίες. Δεν χρειάζεται να εκτελεστεί από το πλαίσιο)





Προηγούμενος:CEF: Ενσωματώστε ένα Chrome για τον πελάτη
Επόμενος:Σφάλμα HTTP 503. Η υπηρεσία δεν είναι διαθέσιμη.
Δημοσιεύτηκε στις 6/7/2018 11:53:31 π.μ. |
Για WebForms, προσθέστε μετά τη σελίδα στο επάνω μέρος του aspx (απλώς φορτώστε αυτήν τη σελίδα αποκλεισμού):

EnableSessionState="Μόνο για ανάγνωση"
 Σπιτονοικοκύρης| Δημοσιεύτηκε στις 14/7/2019 8:34:17 μ.μ. |
Οι περισσότερες αναπτύξεις ιστού χρησιμοποιούν συνεδρίες για την αποθήκευση καταστάσεων συνεδρίας, αλλά η χρήση περιόδων λειτουργίας σε asp.net εφαρμογές μπορεί να έχει σημαντικό αντίκτυπο στην απόδοση των εφαρμογών ιστού. Γιατί και τι θα το επηρεάσει αναλύεται παρακάτω

Η επεξήγηση του MSDN για τις ταυτόχρονες αιτήσεις και τις καταστάσεις συνεδρίας:

Ταυτόχρονες αιτήσεις και κατάσταση συνεδρίας
Η πρόσβαση στην κατάσταση ASP.NET περιόδου λειτουργίας είναι ανά περίοδο λειτουργίας, πράγμα που σημαίνει ότι εάν δύο διαφορετικοί χρήστες στείλουν ένα αίτημα ταυτόχρονα, η πρόσβαση σε κάθε μεμονωμένη περίοδο λειτουργίας εκχωρείται ταυτόχρονα. Ωστόσο, εάν τα δύο ταυτόχρονα αιτήματα αφορούν την ίδια περίοδο σύνδεσης (χρησιμοποιώντας την ίδια τιμή SessionID), το πρώτο αίτημα θα αποκτήσει αποκλειστική πρόσβαση στις πληροφορίες περιόδου σύνδεσης. Το δεύτερο αίτημα θα εκτελεστεί μόνο μετά την ολοκλήρωση του πρώτου αιτήματος. (Εάν το αποκλειστικό κλείδωμα στις πληροφορίες συνεδρίας απελευθερωθεί επειδή η πρώτη αίτηση υπερβαίνει το χρονικό όριο κλειδώματος, αποκτά πρόσβαση και η δεύτερη περίοδος λειτουργίας.) Εάν ορίσετε την τιμή EnableSessionState στην οδηγία @Page σε Μόνο για ανάγνωση, οι αιτήσεις για πληροφορίες περιόδου λειτουργίας μόνο για ανάγνωση δεν οδηγούν σε αποκλειστικό κλείδωμα των δεδομένων περιόδου λειτουργίας. Ωστόσο, τα αιτήματα μόνο για ανάγνωση σε δεδομένα περιόδου λειτουργίας ενδέχεται να χρειαστεί να περιμένουν μέχρι να ξεκλειδωθεί το κλείδωμα από το αίτημα ανάγνωσης/εγγραφής που ορίζεται από τα δεδομένα περιόδου λειτουργίας.
Αποκήρυξη:
Όλο το λογισμικό, το υλικό προγραμματισμού ή τα άρθρα που δημοσιεύονται από το Code Farmer Network προορίζονται μόνο για μαθησιακούς και ερευνητικούς σκοπούς. Το παραπάνω περιεχόμενο δεν θα χρησιμοποιηθεί για εμπορικούς ή παράνομους σκοπούς, άλλως οι χρήστες θα υποστούν όλες τις συνέπειες. Οι πληροφορίες σε αυτόν τον ιστότοπο προέρχονται από το Διαδίκτυο και οι διαφορές πνευματικών δικαιωμάτων δεν έχουν καμία σχέση με αυτόν τον ιστότοπο. Πρέπει να διαγράψετε εντελώς το παραπάνω περιεχόμενο από τον υπολογιστή σας εντός 24 ωρών από τη λήψη. Εάν σας αρέσει το πρόγραμμα, υποστηρίξτε γνήσιο λογισμικό, αγοράστε εγγραφή και λάβετε καλύτερες γνήσιες υπηρεσίες. Εάν υπάρχει οποιαδήποτε παραβίαση, επικοινωνήστε μαζί μας μέσω email.

Mail To:help@itsvse.com