
Небольшой компьютерный ликбез, если кто не в курсе: подобно телефонам, все серверы в интернет имеют уникальные цифровые номера (IP адреса). Чтобы человек мог легко запомнить нужный адрес, каждому IP адресу присваивается имя (domen name). Как пример — IP этого сайта: 188.134.31.189, имя: www.backtomusic.ru, все по подобию с телефонной книгой. Раньше, когда сеть интернет была относительно небольшой, функция замены IP на доменное имя реализовывалась с помощью обычных таблиц, на сегодня определением IP по имени занимается сложная сеть специализированных компьютеров с криптографической проверкой целостности данных, рекурсивными запросами, резервированием и другими необходимыми для надежной работы наворотами.
На Backtomusic история с доменами стала актуальной во время работы над отдельным плеером БТМ, когда понадобились два дополнительных доменных имени — для самого плеера и для его наладки. Плеер был размещен на субдомене play.backtomusic.ru, его разработка и отладка велась на test.backtomusic.ru.
Промежуточная проверка качества звучания плеера на тестовом сайте проводились после каждого изменения кода плеера. На каждом значительном этапе работы, если в коде не было ошибок и звук оказывался нормальным, весь проект копировался на play.backtomusic.ru. После нескольких таких копирований стало очевидно, что по какой-то причине один и тот же код плеера на test.backtomusic.ru звучит выразительней, чем на play.backtomusic.ru. Чтобы разобраться в чем дело, был проведен эксперимент — конфигурация сайтов на сервере была переписана таким образом, чтобы домен Тест соответствовал плееру из проекта Play, в свою очередь домен Play был перенаправлен на плеер из проекта Test. В результате Play, на котором теперь велась разработка, все так же звучал хуже, чем Test. Отсюда был сделан вывод, что проблема не в сервере, а где-то вне его.
Следующим шагом стала регистрация третьего субдомена clean.backtomusic.ru. Новое имя было протестировано, как с сайтом для разработки, так и с его публичной копией. Звук Clean оказался неплохим, слегка хуже Test и значительно лучше Play. На этом этапе ситуация уже более-менее прояснилась, стало очевидно, что:
- Использование субдомена однозначно влияет на звук
- Разные субдомены влияют на звук различно
- Характерный звук каждого субдомена возникает при регистрации и не меняется
Разбор полетов показал значительную разницу в том, как браузер компьютера ищет нужный сайт в случае, если вы указали ему прямой IP и в случае использования доменного имени:
Последовательность событий при поиске IP через DNS
- Пользователь вводит в адресную строку браузера доменное имя
- Браузер проверяет локальный кэш DNS
- При неудаче браузер обращается к программе DNS-resolver операционной системы
- DNS-resolver запрашивает DNS-серверы в интернет и получает в ответ IP
- Браузер подключается к серверу по IP
Таким образом, браузер при поиске IP по имени дополнительно задействует ресурсы операционной системы компьютера и общается с DNS серверами. Это как минимум, что там на самом деле происходит знают только разработчики — сейчас мало кого волнует оптимизация работы кода, компьютеры справляются без заметных задержек и ладно.
Понятно, что для человека не сведущего в тонкостях аудио ситуация с влиянием DNS на звук выглядит сказочной, особенно в случае, когда IP искомого сервера уже находится в кэше браузера. Однако, во время разработки плеера БТМ уже выяснились многие подобные, невероятные на первый взгляд факторы, влияющие на качество звучания, например:
- замена синтаксиса Javascript (JS)
- использование определенных, предпочтительных по звуку методов JS
- использование определенных ключевых слов, например, в JS пришлось отказаться от ‘this’, хотя это усложняет код
- упрощение кода (группировка повторяющихся фрагментов и выбор оптимальной логики)
- размещение HTML и скриптов плеера в одном, едином файле так, чтобы код плеера не ссылался на скрипты в соседних файлах.
В связи с этим был проведен еще один эксперимент: на сервере был создан дополнительный сайт, обслуживающий запрос чистого IP и загружающий при этом тот же код плеера, что и публичные DNS сайты — play.backtumusic.ru и clean.backtomusic.ru. Как и следовало ожидать, из всех вариантов, наилучшим и стабильным по звуку оказался вариант с IP!
Эксперименты, проведенные с DNS демонстрируют, что ничего лишнего в причинно-следственных связях, создаваемых кодом программ, связанных с воспроизведением аудио быть не должно. При этом не важно, связана какая-то определенная часть кода с аудио сигналом напрямую или это часть кода, ответственная за дизайн плеера или за формирование ссылки на аудио файл, как в нашем случае. Любые связи, задействованные «по пути» между компьютером слушателя и аудио файлом на сервере влияют на восприятие музыки в той или иной степени.
На данный момент Player BTM clean использует все три способа оптимизации его звучания, найденные за последнее время:
- Исключение CMS (Content Management System) WordPress — код плеера общается прямо с сервером без посредников
- Работа через протокол HTTP (исключение шифрования потока данных)
- Прямое соединение с браузером через IP
Плеер, как и раньше, использует общую с Backtomusic.ru базу аудио файлов. После замены DNS ссылок плеера на IP, разница в качестве воспроизведения одних и тех же файлов между DNS плеерами, расположенными на Backtomusic и BTM Player clean стала еще более выраженной, в чем можно убедиться, сравнив звучание одних и тех же треков по этим двум ссылкам.