Ознакомился сегодня с тестовой версией коммерческого словаря «Ибице». Так уж получилось, что ознакомление у меня произошло посредством планшетного компьютера, благодаря чему я и выявил все те ошибки, о которых сегодня хочу написать. Прежде всего, стоит отметить то, что планшет у меня намертво зависал при открытии какой-либо страницы коммерческой версии словаря. Сначала я подумал, что это какие-то проблемы в iOS 7, однако позже я задумался и пошел к стационарному компьютеру со средствами отладки. Что же вы думаете? Браузер намертво вешает именно программное обеспечение словаря, а конкретно механизм поисковых предположений при вводе. Стал копаться дальше. При отключенном скрипте предположений все работает отлично, но стоит только его включить, как все снова начинает ужасно тормозить. Самое интересное, что на компьютере с 5Гб оперативной памяти также наблюдалось некоторое торможение. Я продолжил свое расследование и результаты его оказались весьма неожиданными. Но обо всем по порядку.
Для начала скажу, что функционал коммерческой версии планировался заранее. Я даже как-то писал о том, что планировалось ввести в новой версии, поэтому ни для кого не было секретом то, что в новой версии появится более удобный скрипт поисковой подсказки. Я посмотрел сайты с бесплатными jQuery скриптами и проанализировав их код сделал вывод, что написать что-либо аналогичное по функционалу будет не особенно-то и сложно. Но наши разработчики решили сэкономить свои ресурсы и просто взяли уже существующий скрипт Twitter Bootstrap Autocomplete с открытым исходным кодом и переделали его под свои нужды. Но скрипт этот предназначен-то не совсем для того, для чего нужно нам, из-за чего, во-первых, достаточно тяжелый, а во-вторых не особенно подходит для нашего вида данных. Скрипт поддерживает живые запросы к серверу, однако с нашей страницей, отдающей результаты поиска, совершенно дружить не захотел. После этого было решено взять да и слить все уникальные вхождения из базы данных словаря в один json ответ, отсортировав предварительно в алфавитном порядке, а также в порядке возрастания по количеству знаков.Все бы ничего, только вот наша база данных объемом в более чем сорок тысяч слов весит далеко не 10Кб, а почти 5Мб. Autocomplete для хранения данных для подсказок использует localStorage и, по-видимому, на этапе записи зависает, а потом прекращает работу вообще. Самое интересное, что этот скрипт со столь зверским заполнением данными не работал нигде, кроме последней версии Mozilla Firefox. В этом браузере даже при открытии страницы, содержащей обращения к скрипту, никакого зависания не наблюдалось, но серьезно тормозить браузер начинал при попытке очистить кэш предположений через дополнение SQLite Manager. В итоге этот ужасный скрипт я, конечно же, сегодня при ревизии кода устранил и заменил на более щадящий, который будет подгружать на компьютер пользователя не более сотни предположений (несколько Кб).
Вообще работой нашего отдела разработки я на этот раз недоволен, так как они выпустили, можно сказать, полуфабрикат, который сегодня мне пришлось дорабатывать и в некоторых местах переписывать заново в виду того, что я совершенно не мог понять логики наведенных вычислений. Среди наиболее ужасного хотелось бы отметить отсутствие некоторых правил перезаписи, благодаря которым поиск с некоторыми параметрами не работал вообще, а также систему постоянных ссылок, основанную на методике случайных вычислений. Я протестировал все варианты поиска и ни разу система не угадала и не сформировала корректную постоянную ссылку на страницу результатов поиска по базе данных словаря. Самое интересное, что механизм построения постоянной ссылки вызывался в скрипте дважды и ни разу не обрабатывался верно. И все это при наличии штатной функции, используемой исключительно для формирования запросов и ссылок. С отделом разработки мы разберемся завтра, а я пока расскажу о положительных чертах обновления.
После того, как я заменил скрипт поисковых подсказок, он стал работать намного быстрее и практически на всех платформах, кроме мобильных телефонов, где не поддерживается исполнение сценариев javascript. Постоянные ссылки на страницы результатов поиска по базе данных словаря теперь работают именно так, как это задумывалось, однако не забывайте, что поделиться ссылкой на такую страницу Вы сможете только с пользователем, имеющим коммерческий аккаунт, так как реверсивное перенаправление для данного типа операций не поддерживается и пользователь увидит приглашение войти в систему, пройдя процедуру авторизации. Что касается ссылок бесплатной версии, то оттуда все пользователи, имеющие коммерческие учетные записи, будут автоматически перенаправляться на коммерческую версию словаря. Функция, о которой я заявлял ранее, а именно формирование собственных словарей и добавление отдельных словарных статей в закладки в рамках нашего словаря, как выяснилось, доступна нынче только для тех, кто добавлял слова в закладки в прежней версии словаря. Для новых клиентов такая возможность появится через некоторое время, когда система формирования собственных словарей пройдет процедуру тестирования и будет объявлена стабильной. Честно говоря, я не понимаю, какая была необходимость обновлять коммерческую версию словаря на новую, если новая версия еще не прошла полностью процедуру тестирования. Но я надеюсь, что это было первое такое низкокачественное открытие и последнее.