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

Άποψη: 31580|Απάντηση: 0

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

[Αντιγραφή συνδέσμου]
Δημοσιεύτηκε στις 2020-8-22 10:05:17 | | | |
Όταν υπάρχουν πάρα πολλές σελίδες σε ένα έργο, οι υπηρεσίες IIS ξεκινούν και η τοποθεσία Web είναι πολύ αργή όταν την ανοίγετε για πρώτη φορά, επειδή το έργο δεν είναι προ-μεταγλωττισμένο κατά τη στιγμή της κυκλοφορίας, αλλά μεταγλωττίζεται δυναμικά όταν ο χρήστης επισκέπτεται την ιστοσελίδα. Εάν θέλετε να βελτιώσετε την απόδοση του υπάρχοντος ιστότοπού σας και να πραγματοποιήσετε έλεγχο σφαλμάτων στον ιστότοπό σας, είναι απαραίτητο να επιλέξετε "Προμεταγλώττιση κατά την κυκλοφορία" όταν δημοσιεύετε το έργο σας.

Εισαγωγή

Για μικρά έργα, η δημοσίευση σύμφωνα με τις προεπιλεγμένες ρυθμίσεις μπορεί βασικά να ανταποκριθεί στην κανονική λειτουργία, η πρώτη σελίδα ανοίγει σε 56 δευτερόλεπτα (ανάλογα με τη διαμόρφωση του διακομιστή) και το πρώτο άνοιγμα άλλων σελίδων ολοκληρώνεται βασικά σε 12 δευτερόλεπτα, όχι το πρώτο στιγμιαίο άνοιγμα.

Μόλις οι λειτουργίες του έργου γίνουν πολύπλοκες και ο αριθμός των αρχείων αυξηθεί, θα χρειαστούν περισσότερα από 30 δευτερόλεπτα για να ανοίξει η πρώτη σελίδα για την πρώτη εκτέλεση μετά τη δημοσίευση και περίπου 10 δευτερόλεπτα για το πρώτο άνοιγμα άλλων σελίδων, όχι το πρώτο στιγμιαίο άνοιγμα.

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

Οφέλη της προμεταγλώττισης

  • Εκτέλεση. Ο μεταγλωττισμένος κώδικας εκτελείται πολύ πιο γρήγορα από τις γλώσσες δέσμης ενεργειών όπως η ECMAScript ή η VBScript επειδή είναι μια αναπαράσταση πιο κοντά στον κώδικα μηχανής και δεν απαιτεί πρόσθετη ανάλυση.
  • Ασφάλεια. Ο μεταγλωττισμένος κώδικας είναι πιο δύσκολο να αναστραφεί από τον μη μεταγλωττισμένο πηγαίο κώδικα, επειδή δεν έχει την αναγνωσιμότητα και την αφαίρεση που έχουν οι γλώσσες υψηλού επιπέδου. Επιπλέον, τα εργαλεία fuzzing ενισχύουν την ικανότητα του μεταγλωττισμένου κώδικα να αντιστέκεται στην επεξεργασία αντίστροφης μηχανικής.
  • Σταθερότητα. Ελέγξτε τον κώδικά σας για σφάλματα σύνταξης, ζητήματα ασφάλειας τύπου και άλλα ζητήματα κατά τη μεταγλώττιση. Εντοπίζοντας αυτά τα σφάλματα κατά το χρόνο κατασκευής, πολλά σφάλματα μπορούν να εξαλειφθούν στον κώδικα.
  • Διαλειτουργικότητα. Δεδομένου ότι ο κώδικας MSIL υποστηρίζει οποιαδήποτε γλώσσα .NET, είναι δυνατή η χρήση συγκροτημάτων που γράφτηκαν αρχικά σε άλλες γλώσσες στον κώδικα. Για παράδειγμα, εάν γράφετε ASP.NET ιστοσελίδα σε C#, μπορείτε να προσθέσετε μια αναφορά σε ένα αρχείο .dll γραμμένο σε Visual Basic.


ASP.NET Πυρήνας προμεταγλωττισμένος

Προμεταγλωττισμένο

Η προμεταγλώττιση είναι ο προεπιλεγμένος τρόπος για το ASP .Net Core. Κατά τη στιγμή της δημοσίευσης, όλες οι προβολές Razor στο σύστημα είναι προμεταγλωττισμένες από προεπιλογή. Το μεταγλωττισμένο DLL προβολής ονομάζεται ομοιόμορφα xxx.PrecompiledViews.dll ή xxx.Views.dll

Δυναμική συλλογή

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



ASP.NET Προσύνταξη της ιστοσελίδας

Χρησιμοποιούμε το Visual Studio για να δημοσιεύσουμε έναν ιστότοπο με τους ακόλουθους τρόπους:




Η έννοια της επιλογής "Να επιτρέπονται ενημερώσεις σε αυτόν τον προμεταγλωττισμένο ιστότοπο" Όταν δημοσιεύουμε ένα έργο ιστού .Net, γενικά, όλα τα αρχεία . CS, το οποίο θα δημιουργήσει αυτόματα μια βιβλιοθήκη δυναμικών συνδέσμων DLL, η οποία μπορεί να προστατεύσει πολύ καλά τον πηγαίο κώδικα του ιστότοπου, επειδή ο κώδικας από την πλευρά του διακομιστή τοποθετείται γενικά στο . Δεδομένου ότι τα αρχεία DLL στο αρχείο CS δημιουργούνται όλα και, στη συνέχεια, μεταφορτώστε τα στον διακομιστή, άλλοι δεν μπορούν εύκολα να τα ανοίξουν!

Ωστόσο, άλλα αρχεία, όπως το ashx, το aspx και άλλα αρχεία, αυτό που υπάρχει σε αυτό, είναι αυτό που είναι, άλλα μπορούν να ανοίξουν αυτά τα αρχεία για προβολή, αν και άλλοι δεν μπορούν να δουν τον κώδικα CS, αλλά μπορούν ακόμα να δουν τον κώδικα HTML ή ορισμένα στοιχεία ελέγχου διακομιστή και σχετικά χαρακτηριστικά στο αρχείο ASPX. Ένα αρχείο όπως το ashx είναι ισοδύναμο με ένα αρχείο CS και ο κώδικας σε αυτό είναι εύκολα ορατός.

Επομένως, . Τα αρχεία CS είναι ασφαλή, αλλά τα αρχεία ASPX, ashx και άλλα αρχεία δεν είναι ασφαλή. Λοιπόν, υπάρχει τρόπος να κάνετε ασφαλή τα αρχεία ιστού που μεταφορτώνονται στον διακομιστή; Υπάρχει ένας τρόπος, δηλαδή, κατά τη δημοσίευση, μην επιλέξετε "Να επιτρέπονται ενημερώσεις σε αυτόν τον προμεταγλωττισμένο ιστότοπο".

Επιλέξτε Να επιτρέπονται ενημερώσεις σε αυτήν την προμεταγλωττισμένη τοποθεσία

Εάν επιλέξετε "Να επιτρέπεται η ενημέρωση αυτού του προμεταγλωττισμένου ιστότοπου" κατά τη δημοσίευση του ιστού, τότε το αποτέλεσμα είναι το εξής: Ολόκληρο το αρχείο ιστότοπου, εκτός από όλα τα αρχεία CS που έχουν μεταγλωττιστεί σε αρχεία DLL, άλλα αρχεία και το αρχικό δεν έχει αλλαγές, τι υπάρχει μέσα ή τι, εφόσον άλλοι το ανοίγουν μέσω του Σημειωματάριου, ο κώδικας, ο κώδικας HTML κ.λπ.

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

Καταργήστε την επιλογή "Να επιτρέπονται ενημερώσεις σε αυτόν τον προμεταγλωττισμένο ιστότοπο"

Εάν δεν επιλέξετε "Να επιτρέπεται η ενημέρωση αυτού του προμεταγλωττισμένου ιστότοπου" κατά τη δημοσίευση του ιστού, τότε το αποτέλεσμα είναι το εξής: 1. Όλα τα αρχεία CS στον ιστότοπο μεταγλωττίζονται σε αρχεία DLL. 2. Εκτός από το αρχείο cs, άλλα αρχεία, όπως ASPX, ASHX και άλλα αρχεία, μεταγλωττίζονται επίσης μαζί και κάθε αρχείο δημιουργεί ένα αντίστοιχο αρχείο *.compiled στον κατάλογο BIN.

Μετά από αυτό, εάν προβάλετε ASPX, ASHX και άλλα αρχεία μέσω του σημειωματάριου, δεν θα δείτε κανέναν κώδικα σε αυτά, ακόμη και η σήμανση κώδικα HTML δεν είναι ορατή, ανοίξτε ένα τέτοιο αρχείο, υπάρχει μόνο μία γραμμή κειμένου σε αυτό, το περιεχόμενο είναι "Αυτό είναι ένα αρχείο σήμανσης που δημιουργήθηκε από το προμεταγλωττισμένο εργαλείο, δεν πρέπει να διαγραφεί!", και το μέγεθος αυτών των αρχείων είναι 1kb.

Εάν προσπαθήσετε να ανοίξετε μια σελίδα ιστότοπου, θα διαπιστώσετε ότι εκτός από την πρώτη σελίδα μετά την έναρξη του έργου, η οποία εξακολουθεί να διαρκεί 1~2 δευτερόλεπτα (χωρίς EF), η πρώτη φορά κάθε άλλης σελίδας ανοίγει ακαριαία (η πρώτη βραδύτητα του EF είναι πέρα από το πεδίο εφαρμογής αυτού του άρθρου). Αυτό με κάνει να νιώθω ότι άργησα να δω προμεταγλωττισμένο!

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

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

Επιλέξτε "Να μην γίνει συγχώνευση". Δημιουργήστε ξεχωριστές συναρμολογήσεις για κάθε σελίδα και στοιχείο ελέγχου" και το αποτέλεσμα είναι πολύ περισσότερα App_Web_*.dll αρχεία στον κάδο.



Κατά τη στιγμή της κυκλοφορίας, η ρίζα του έργου δημιουργεί ένα αρχείο PrecompiledApp.config. Το περιεχόμενο έχει ως εξής:



Το αρχείο PrecompiledApp.config χρησιμοποιείται για την παρακολούθηση του τρόπου ανάπτυξης της εφαρμογής και εάν ASP.NET χρειάζεται να μεταγλωττίσει αρχεία τη στιγμή της αίτησης.




Προηγούμενος:Επεξήγηση των νέων χαρακτηριστικών και σημείων γνώσης C# 8.0
Επόμενος:Το EF DbContext εγγυάται ότι το πλαίσιο είναι μοναδικό
Αποκήρυξη:
Όλο το λογισμικό, το υλικό προγραμματισμού ή τα άρθρα που δημοσιεύονται από το Code Farmer Network προορίζονται μόνο για μαθησιακούς και ερευνητικούς σκοπούς. Το παραπάνω περιεχόμενο δεν θα χρησιμοποιηθεί για εμπορικούς ή παράνομους σκοπούς, άλλως οι χρήστες θα υποστούν όλες τις συνέπειες. Οι πληροφορίες σε αυτόν τον ιστότοπο προέρχονται από το Διαδίκτυο και οι διαφορές πνευματικών δικαιωμάτων δεν έχουν καμία σχέση με αυτόν τον ιστότοπο. Πρέπει να διαγράψετε εντελώς το παραπάνω περιεχόμενο από τον υπολογιστή σας εντός 24 ωρών από τη λήψη. Εάν σας αρέσει το πρόγραμμα, υποστηρίξτε γνήσιο λογισμικό, αγοράστε εγγραφή και λάβετε καλύτερες γνήσιες υπηρεσίες. Εάν υπάρχει οποιαδήποτε παραβίαση, επικοινωνήστε μαζί μας μέσω email.

Mail To:help@itsvse.com