сравнительное тестирование django приложения

В JavaScript функция - это объект, очень похожий на другие объекты.

Вы можете назначить функцию переменной.

let foo = function () {
  return "bar"
}

И позже вы можете добавить скобки к этому имени переменной для вызова функции.

foo() // Returns "bar".

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

function baz (some_function) {
  return some_function()
}

baz(foo) // Returns "bar".

Это то, что происходит в вашем примере. this.name передается в функцию, которая обрабатывает событие onChange, и в какой-то момент внутри этой функции он добавляет скобки для оценки переданной вами функции.

Вот почему, если вы добавляете круглые скобки при передаче функции, функция оценивается, и результат передается:

baz(foo()) // Uncaught TypeError: some_function is not a function

Здесь, foo() уже вычислено, и переменная some_function в baz содержит строку "bar" вместо функции.

14
задан Vebjorn Ljosa 15 December 2009 в 23:01
поделиться

2 ответа

Здесь есть два слоя. У нас есть большая часть # 1 для нашего тестирования. Мы собираемся начать с № 2.

  1. Джанго в изоляции. Обычные юнит-тесты Django здесь хорошо работают. Создайте несколько тестов, которые будут проходить через несколько (менее 6) «типичных» вариантов использования. Получите это, опубликуйте это и т.д. Соберите данные о времени. Это не реальная производительность в сети, но это простой в работе тестовый сценарий, который вы можете использовать для настройки.

  2. Весь ваш веб-стек. В этом случае вам нужен обычный сервер под управлением Squid, Apache, Django, MySQL, что угодно. Вам нужен второй компьютер (ы), чтобы клиент работал с вашим веб-сайтом через urllib2, выполняя несколько (менее 6) «типичных» вариантов использования. Получите это, опубликуйте это и т.д. Соберите данные о времени. Это все еще не "реальная" производительность в сети, потому что это не через Интернет, а настолько близко, насколько это возможно без действительно сложной настройки.

Обратите внимание, что # 2 (сквозное) включает в себя большое кеширование для производительности. Если ваши клиентские скрипты выполняют аналогичную работу, кэширование будет действительно полезным. если ваши клиентские скрипты каждый раз делают уникальные вещи, кэширование будет менее выгодным.

Сложнее всего определить, какова «типичная» рабочая нагрузка. Это не функциональное тестирование, поэтому рабочая нагрузка не должна включать все. Кроме того, чем больше одновременных сеансов запущено вашим клиентом, тем медленнее он становится. Не пытайтесь оптимизировать свой сервер, когда тестовый клиент является самой медленной частью обработки.


Редактировать

Если «построчно» означает «профилирование», то вы Мы запустили профилировщик Python.

https://docs.python.org/library/profile.html

Обратите внимание, что в слое Django ORM достаточно кеширования. Поэтому запуск функции просмотра полдюжины раз для получения значимого набора измерений не имеет смысла. Вы должны выполнить «типичный» набор операций, а затем найти горячие точки в профиле.

Как правило, ваше приложение легко оптимизировать - вам не нужно много делать. Ваши функции просмотра должны быть короткими и не иметь обработки, чтобы говорить о них. Точно так же ваши функции форм и методов модели должны быть очень короткими.

Вы должны выполнить «типичный» набор операций, а затем найти горячие точки в профиле.

Как правило, ваше приложение легко оптимизировать - вам не нужно много делать. Ваши функции просмотра должны быть короткими и не иметь обработки, чтобы говорить о них. Точно так же ваши функции форм и методов модели должны быть очень короткими.

Вы должны выполнить «типичный» набор операций, а затем найти горячие точки в профиле.

Как правило, ваше приложение легко оптимизировать - вам не нужно много делать. Ваши функции просмотра должны быть короткими и не иметь обработки, чтобы говорить о них. Точно так же ваши функции форм и методов модели должны быть очень короткими.

7
ответ дан 1 December 2019 в 14:45
поделиться

Один из способов построчно получить данные о производительности (профилирование) вашего приложения Django - это использовать компонент промежуточного программного обеспечения WSGI, например repoze.profile .

Предполагая, что вы используете mod_wsgi с Apache, вы можете вставить repoze.profile в свое приложение следующим образом:

...
application = django.core.handlers.wsgi.WSGIHandler()
...
from repoze.profile.profiler import AccumulatingProfileMiddleware
application = AccumulatingProfileMiddleware(
    application,
    log_filename='/path/to/logs/profile.log',
    discard_first_request=True,
    flush_at_shutdown=True,
    path='/_profile'
)

И теперь вы можете указать свой браузер на / _profile для просмотра данных вашего профиля. Конечно, это не будет работать с mod_python или внутренним сервером Django.

5
ответ дан 1 December 2019 в 14:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: