Необходимо выяснить, какой из методов (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так, как показано выше (см. "Результаты измерений").