Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 31580|Відповідь: 0

[Джерело] ASP.NET MVC5 виходить у попередньо скомпільованому режимі, що покращує швидкість завантаження сторінки та продуктивність

[Копіювати посилання]
Опубліковано 2020-8-22 10:05:17 | | | |
Коли в проєкті занадто багато сторінок, IIS запускається, і сайт дуже повільний при першому відкритті, оскільки проєкт не скомпільований заздалегідь на момент релізу, а динамічно компілюється при відвідуванні веб-сторінки. Якщо ви хочете покращити продуктивність свого існуючого сайту та провести перевірку помилок на сайті, необхідно вибрати «Precompile during release» при публікації проєкту.

Введення

Для невеликих проєктів публікація за стандартними налаштуваннями практично відповідає нормальній роботі: перша сторінка відкривається за 56 секунд (залежно від конфігурації сервера), а перше відкриття інших сторінок фактично завершується за 12 секунд, а не перше миттєве відкриття.

Коли функції проєкту стають складними, а кількість файлів збільшується, відкривання першої сторінки після публікації займає понад 30 секунд, а для першого відкриття інших сторінок — близько 10 секунд, а не першого миттєвого відкриття.

Це пов'язано з тим, що проєкт не компілюється заздалегідь на момент релізу, а динамічно компілюється, коли користувач звертається до веб-сторінки, і після повторного використання пулу додатків або змін файлів проєкту він буде перекомпільований і знову проходить через повільний «перший раз», що є нестерпним.

Переваги прекомпіляції

  • Продуктивність. Скомпільований код виконується значно швидше, ніж скриптові мови, такі як ECMAScript або VBScript, оскільки він є ближчим до машинного коду і не потребує додаткового аналізу.
  • Охорона. Компільований код складніше реверс-інженерити, ніж некомпільований вихідний код, оскільки йому бракує читабельності та абстракції, які мають високорівневі мови. Крім того, інструменти фаззування покращують здатність скомпільованого коду протистояти зворотній інженерній обробці.
  • Стабільність. Перевірте код на наявність синтаксичних помилок, проблем із безпекою типів та інших проблем під час компіляції. Виявивши ці помилки під час збірки, можна усунути багато помилок у коді.
  • Сумісність. Оскільки код MSIL підтримує будь-яку мову .NET, можливо використовувати асемблі, спочатку написані іншими мовами в коді. Наприклад, якщо ви пишете ASP.NET веб-сторінку на C#, ви можете додати посилання на .dll-файл, написаний на Visual Basic.


ASP.NET Core попередньо скомпільовано

Попередньо зібране

Прекомпіляція — це стандартний спосіб для 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-файли, інші файли та оригінал, не має жодних змін, що всередині чи що, якщо інші відкривають його через Notepad, код, HTML-код тощо всередині можуть побачити інші з першого погляду.

Крім того, коли користувачі вперше відвідують певну сторінку, їх потрібно скомпілювати для виявлення помилок, і якщо помилок немає, їх можна отримати звичайний доступ, тож швидкість буде відносно повільною. Наступні візити — це нормально;

Зніміть галочку «Дозволити оновлення цього попередньо скомпільованого сайту»

Якщо ви не поставите галочку «Дозволити оновлення цього попередньо скомпільованого сайту» під час публікації вебу, результат такий: 1. Усі файли CS на сайті компільовані у файли DLL; 2. Окрім cs-файлу, інші файли, такі як ASPX, ASHX та інші, також компілюються разом, і кожен файл генерує відповідний *.compilated файл у каталозі BIN;

Після цього, якщо ви переглядаєте ASPX, ASHX та інші файли через блокнот, ви не побачите в них жодного коду, навіть розмітка HTML-коду не видно, відкрийте такий файл, у ньому лише один рядок тексту, вміст — «Це файл розмітки, згенерований попередньо скомпільованим інструментом, його не слід видаляти!», а розмір цих файлів становить 1kb;

Якщо ви спробуєте відкрити сторінку сайту, то побачите, що, окрім першої сторінки після початку проєкту, яка все одно займає 1~2 секунди (без EF), перший раз кожна сторінка відкривається миттєво (перша повільність EF виходить за межі цієї статті). Це змушує мене відчувати, що я запізнився з готовою компільованістю!

Тут я таємно кажу вам, що видалення каталогу Views не вплине на нормальне відкриття веб-сторінки~ Чому б вам не дозволити її видалити, ми не наважуємося питати і не наважуємося видалити.

Мета була досягнута, і виникли деякі наслідки, які потрібно було вирішити, наприклад, безлад у довіднику смітників.

Виберіть «Не об'єднувати». Створюйте окремі збірки для кожної сторінки та керування», і результат — набагато більше App_Web_*.dll файлів у бін.



Під час випуску корінь проєкту генерує файл PrecompiledApp.config. Зміст такий:



Файл PrecompiledApp.config використовується для відстеження того, як розгортається додаток і чи потрібно ASP.NET компілювати якісь файли під час запиту.




Попередній:Пояснення нових функцій і знань C# 8.0
Наступний:EF DbContext гарантує, що контекст є унікальним
Застереження:
Усе програмне забезпечення, програмні матеріали або статті, опубліковані Code Farmer Network, призначені лише для навчання та досліджень; Вищезазначений контент не повинен використовуватися в комерційних чи незаконних цілях, інакше користувачі несуть усі наслідки. Інформація на цьому сайті надходить з Інтернету, і спори щодо авторських прав не мають до цього сайту. Ви повинні повністю видалити вищезазначений контент зі свого комп'ютера протягом 24 годин після завантаження. Якщо вам подобається програма, будь ласка, підтримуйте справжнє програмне забезпечення, купуйте реєстрацію та отримайте кращі справжні послуги. Якщо є будь-яке порушення, будь ласка, зв'яжіться з нами електронною поштою.

Mail To:help@itsvse.com