Введение
Ранее в интернете я нашёл неплохой открытый проект, основанный на MVC. Однако после запуска я обнаружил, что он работает гораздо медленнее, чем ожидалось. После изучения кода я понял, что узкое место было не в чтении базы данных, как я предполагал. После нескольких попыток я обнаружил, что наиболее затратным по времени процессом была работа внутри фреймворка MVC. В проекте использовалось слишком много методов Html.partial, Html.Action и RenderPartial, а их реализация в MVC была довольно сложной, что приводило к снижению производительности.
Поскольку MVC также реализован с использованием Razor-синтаксиса, моей первой мыслью было найти более эффективный RazorEngine и попробовать его. Позже я нашёл реализацию RazorEngine в интернете и обнаружил, что она значительно быстрее, чем MVC для выполнения аналогичных функций.
Реализация
Кроме того, этот фреймворк сам по себе очень мощный и предоставляет различные методы, такие как прямая компиляция строк и компиляция шаблонов. Однако скомпилированные dll хранятся во временных файлах, и каждый раз создаётся новый файл. Учитывая потребности реального проекта, я сделал некоторые улучшения и обёртку на основе этого фреймворка:
Соответствующие шаблоны cshtml были помещены в отдельный проект библиотеки классов, а свойство файла было установлено как «встроенный ресурс». Кроме того, я переписал ключевые классы, чтобы процесс компиляции генерировал файлы в указанном каталоге (с настраиваемым именем файла).
Когда необходимо вызвать шаблон, достаточно загрузить ранее сгенерированный dll-файл, а затем вызвать общий метод, передавая имя ресурса cshtml и параметры. Используя этот метод, я сравнил производительность этого подхода с исходным MVC и обнаружил значительное улучшение скорости рендеринга. Кроме того, этот подход также может сократить время, затрачиваемое на компиляцию представлений при первом запуске веб-сайта.
Также стоит отметить, что некоторые команды MVC, такие как Section. Layout, пока не реализованы. Вместо них предоставляется команда CallFunc, которая позволяет вызывать шаблоны, передавая информацию о вызываемом подфункторе.
Описание проекта
Этот проект состоит из трёх подпроектов: 1. OF.SmartMVC.Core — библиотека классов; 2. OF.SmartMVC.TestView — библиотека шаблонов для тестирования; 3. OF.SmartMVC.Test — программа для тестирования (следует отметить, что в этом проекте используется консольное приложение, поэтому имена ресурсов имеют формат «... каталог.имя ресурса» с использованием символа . в качестве разделителя. В проектах MVC ресурсы обычно разделяются символом /).
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )