Как использовать MiniProfiler с одностраничным веб-приложением/сервером REST?

У меня есть одностраничное javascript-приложение (выполненное с помощью JavascriptMvc) и бэкэнд со службами REST, построенными поверх ASP.NET MVC3 (выполненное с помощью NServiceMVC).

В службах REST установлен и запущен MiniProfiler, а заголовки X-MiniProfiler-Ids возвращаются с каждым запросом AJAX. На самом деле у меня запущен и работает минипрофилер, но я не смог найти никакой информации об этом, поэтому я не уверен, что делаю это правильно.

Является ли это поддерживаемым сценарием, и есть ли конкретный способ сделать это сейчас?


Что я сейчас делаю, так это:

В приложении HTML (которое представляет собой статический код, без динамического материала) у меня есть:

<script type="text/javascript" src="/api/profiler"></script>

В моем приложении MVC у меня есть:

    public ActionResult Profiler()
    {
        if (!ControllerContext.HttpContext.IsDebuggingEnabled)
        {
            return new EmptyResult();
        }
        return new ContentResult() { 
            Content = StackExchange.Profiling.MiniProfiler.RenderIncludes(
                        position: RenderPosition.Right,
                        showControls: true
                      )
                      .ToString()
                      .Replace("<script type=\"text/javascript\">", "")
                      .Replace("</script>", "") 
        };
    }

Очевидно, что здесь есть хак, чтобы убрать жестко закодированные теги <script>.

Помимо этого, с остальной стороны MVC, профилировщик используется точно так же, как обычно. Когда вы выполняете действие в приложении, которое вызывает вызов REST, miniprofiler показывает это в углу. Здесь также очень полезно использовать параметр showControls:true, так как появляется кнопка очистки, потому что в противном случае вы просто получите постоянный список действий, поскольку вся страница практически никогда не обновляется.

Это "правильный" способ сделать это, или есть лучший способ?


person gregmac    schedule 22.03.2012    source источник
comment
Просто для ясности: ваше решение работает, но вы хотите подтвердить, что следуете лучшим практикам?   -  person Kirk Woll    schedule 23.03.2012
comment
@KirkWoll Да. Поскольку документации по профилировщику не так много, я хочу знать, не упускаю ли я из виду существующее решение. В худшем случае этот вопрос может предоставить некоторую документацию для будущих веб-поисков. Если это лучший способ, я, вероятно, отправлю патч, чтобы мне не пришлось делать мой .replace() взлом и делать это действительно официальным способом.   -  person gregmac    schedule 23.03.2012
comment
У меня такой же вопрос. Вы все еще делаете это таким образом?   -  person Jerry    schedule 26.06.2013
comment
это должно быть на codereview.stackexchange.com?   -  person Liam    schedule 06.02.2014


Ответы (1)


В вашем коде есть предположение, что @MiniProfiler.RenderIncludes() генерирует весь свой контент с помощью javascript. Хотя это может быть правильным предположением в настоящее время, это может измениться.

Почему бы просто не избежать взломов и не использовать ajax-запрос для загрузки профилировщика? В любом сценарии, будь то ajax или встроенный скрипт, вставка профилировщика через обратный вызов несколько повлияет на результат профилирования.

<div id="profiler"></div>
<script type="text/javascript">
  $.load("#profiler","api/profiler");
</script>
person B2K    schedule 04.03.2014