Необходимо выяснить, какой из методов (friends.get
или friends.getOnline
) тратит больше времени на получение имени и фамилии очередного друга пользователя, находящегося в сети. Причем необходимо отсеивать тех, кто в сети не находится.
Для тестов были выбраны три пользователя: id1
(724 друга на время теста), id5070786
(4611 друзей) и id177168718
(9922 друга).
Каждое измерение запускало оба метода по 20 раз. Для каждого пользователя проводилось по три измерения.
Способ, использующий friends.get
был обозначен цифрой 2
, friends.getOnline
-- 1
.
$ python3 measurements.py 1 -n 20
mean:
1: 0.003892 2: 0.002767 delta: 0.001124
max:
1: 0.006189 2: 0.004677 delta: 0.001512
min:
1: 0.002597 2: 0.001613 delta: 0.000984
$ python3 measurements.py 1 -n 20
mean:
1: 0.003439 2: 0.002455 delta: 0.000984
max:
1: 0.005072 2: 0.004250 delta: 0.000822
min:
1: 0.002160 2: 0.001540 delta: 0.000620
python3 measurements.py 1 -n 20
mean:
1: 0.004076 2: 0.003412 delta: 0.000664
max:
1: 0.006750 2: 0.005130 delta: 0.001620
min:
1: 0.002309 2: 0.001683 delta: 0.000627
$ python3 measurements.py 5070786 -n 20
mean:
1: 0.005103 2: 0.004412 delta: 0.000691
max:
1: 0.009284 2: 0.006967 delta: 0.002317
min:
1: 0.003269 2: 0.002512 delta: 0.000757
$ python3 measurements.py 5070786 -n 20
mean:
1: 0.008317 2: 0.004883 delta: 0.003434
max:
1: 0.057713 2: 0.007388 delta: 0.050326
min:
1: 0.003186 2: 0.002171 delta: 0.001015
python3 measurements.py 5070786 -n 20
mean:
1: 0.004735 2: 0.004877 delta: -0.000142
max:
1: 0.007543 2: 0.015527 delta: -0.007984
min:
1: 0.002979 2: 0.002376 delta: 0.000603
$ python3 measurements.py 177168718 -n 20
mean:
1: 0.002503 2: 0.001999 delta: 0.000504
max:
1: 0.003425 2: 0.002650 delta: 0.000775
min:
1: 0.001392 2: 0.001441 delta: -0.000048
$ python3 measurements.py 177168718 -n 20
mean:
1: 0.002301 2: 0.002202 delta: 0.000099
max:
1: 0.004480 2: 0.003547 delta: 0.000933
min:
1: 0.001670 2: 0.001511 delta: 0.000159
$ python3 measurements.py 177168718 -n 20
mean:
1: 0.002463 2: 0.002297 delta: 0.000166
max:
1: 0.003240 2: 0.006651 delta: -0.003411
min:
1: 0.001735 2: 0.001558 delta: 0.000178
- В среднем, способ с
friends.getOnline
работал дольше. - Разрыв редко превышал
0.001
секунды на онлайн-друга. - Более большие разрывы, скорее всего, провоцировал сам ВКонтакте. Например, в измерении №5 и №9 наблюдается большой разрыв в максимальном времени исполнения, причем как в одну, так и другую сторону.
- С увеличением количества друзей у человека разрыв по времени между двумя способами уменьшался. Это связано с тем, что способ с
friends.getOnline
работает тем эффективнее, чем меньше отношение количества онлайн-друзей к общему числу друзей. - Способ с
friends.getOnline
мало оправдывает себя, потому что упомянутое отношение у людей обычно недостаточно маленькое (этому способствует и ограничение на колчество друзей). - Способ с
friends.getOnline
имеет race condition: если в перерыве между загрузкой списка друзей и скачиванием списка онлайн-друзей человек добавляет онлайн-друга, возникаетKeyError
. - Способ с
friends.getOnline
позволяет получить информацию о том, с какого устройства человек зашел на сайт. - Способ с
friends.getOnline
является примером преждевременной оптимизации: он не улучшает времени исполнения (хотя, чисто в теории, мог бы) и добавляет функциональность, не требовавшуюся в задании.
- Зарегистрировать standalone-приложение ВКонтакте, https://vk.com/editapp?act=create, вставить
APP_ID
в эту ссылку и перейти по ней:https://oauth.vk.com/authorize?client_id=<APP_ID>&display=page&redirect_uri=https://oauth.vk.com/blank.html&scope=friends,offline&response_type=token&v=5.52
. Авторизовать приложение, а затем скопировать все междуaccess_token=
и&
и положить в переменную окружения TEST_VK_ACCESS_TOKEN. - Скачать
vk.py
иmeasurements.py
в одну папку. Запуститьmeasurements.py
так, как показано выше (см. "Результаты измерений").