• Три правила проектирования интерфейсов с высокоскоростным пользовательским взаимодействием

      Эта запись о том, как увеличить скорость навигации и взаимодействия пользователя с интерфейсом, не прибегая к оптимизациям вычислений и рендеринга. Рекомендации касаются приложений, где сервер используется только для получения данных, а вся логика интерфейса находится в самом приложении. Эта запись о преимуществе клиентских приложений над приложениями с плохо разделённой логикой, представлением и данными.

      Особенно ценными рекомендации могут оказаться для тех, кому приходиться вести разработку или проектировать интерфейс, когда данные от сервера приходят не слишком быстро, а обращаться к нему чересчур часто нельзя.

      Правила организации высокоскоростного взаимодействия пользователя с приложением можно сформулировать следующим образом:

      1. Вычисления не должны блокировать взаимодействие с интерфейсом и его рендеринг — пользователь всегда должен иметь возможность указать на фокус своих интересов.
      2. Страница объекта, к которому обратился пользователь, должна отображаться мгновенно, не дожидаясь загрузки данных, в которых нуждается объект.
      3. Запросы в сеть не должны уходить одной большой группой, не должны отправляться сразу; должны откладываться на небольшое время, складываться и приоритезироваться в случае необходимости.


      Изложенная в этой заметке информация — это мой практический опыт проектирования и разработки интерфейса моего приложения для поиска и прослушивания музыки seesu.me. Приложения, в котором гармонично комбинируются огромные пласты данных из разрозненных сервисов, таких как last.fm, вконтакте, ex.fm, hypem.com, soundcloud.com, discogs.com, youtube.com


      Читать дальше →
    • Список оптимизаций рендеринга DOM, реализуемых на уровне Javascript фреймворка

        С октября 2009 года я занимаюсь разработкой приложения для поиска и прослушивания музыки. Я стремлюсь организовать возможность быстрого взаимодействия пользователя с интерфейсом, и в качестве одного из средств ускорения взаимодействия использую различные способы для быстрой отрисовки страниц.

        Предлагаю ознакомиться со способами, реализованными мной в приложении на системном уровне:

        • Использование CSS и переключение классов вместо перестроения DOM дерева
        • Повсемнестное кеширование выборок элементов ($('div.active_part span.highlighter')), атомарные операции по изменению (вместо всеобщей перерисовки, вместо переделывания больших участков DOM дерева)
        • Минимизации чтений DOM во время записи изменений состояний
        • Кеширование размеров и расположения элементов (это спасает от излишнего вычисления при считывании этих значений при наличии других изменений: чтение во время изменения множества частей дерева крайне негативно сказывается на производительности)
        • Аккуратное, не затягивающееся накопление изменений, необходимых произвести в DOM
        • Прикрепление частей изменяющихся коллекций единовременно (когда, например, в середину списка вставляется 3 новых элемента; createDocumentFragment) в конкретное место (after, before) вместо открепления всей коллекции от DOM и повторного прикрепления (и вместо того, чтобы перерисовывать весь список)
        • Прогрессивный асинхронный рендеринг: картина прорисовывается сразу с небольшим количеством деталей, затем деталей появляется всё больше
        • Клонирование нодов (как часть шаблонизации)
        • Кеширование и использование кеша результатов парсинга DOM шаблонов


        image image
        изображения из части с заголовком «Прикрепление частей изменяющихся коллекций единовременно...»
        Читать дальше →
      • Онлайн версия Seesu с вконтактовским Open API и поиском mp3 по soundcloud

          Сису — это очередное, небольшое приложение для удобнейшего поиска и прослушивания музыки. Комбинация last.fm, вконтакте, а также с недавних пор soundcloud. Написано на html/css/js.

          Со времени последнего поста на хабре о сису я не только запустил сайт проекта, но и благодаря вконтактовскому APIонлайн версию, которая работает не только на десктопе, но и на мобильных: проверены Android, iPhone, iPad и Opera Mini (в ней работает только soundcloud). Причём на айфонах работает в многозадачном режиме (в том числе на iPhone 3g, в котором в принципе нет многозадачности). Помимо онлайн версии существует виджет для оперы, расширение для хрома и виджет для apple dashboard.

          seesu
          Читать дальше →
        • Seesu (last.fm + vkontakte.ru виджет) в файрфоксе

            image
            Новая версия (1.7) виджета Seesu для поиска и прослушивания музыки может запускаться не только в опере, но и в файрфоксе. Для этого надо поставить расширение ZoooS Widget Runner. Последние изменения в виджете были произведены именно для поддержки этого расширения, хотя оно и сыровато.
            Читать дальше →
          • Удобный поиск по last.fm, проигрывание лучших треков и загрузка музыки с вконтакте в виджете Seesu

              seesu logoНовая (1.2) версия Seesu (зеркало), виджета для прослушивания музыки на основе last.fm и вконтакте.ру, приносит тонну баг фиксов, исправление проблемы инициализации флеша (если тот не во вьюпорте), лучшую поддержку ошибок серверов, улучшения в интерфейсе, рефакторинг кода и с ним лучшую скорость работы, а также

              — сробблинг (поддерживает «прослушивает сейчас» и общую отправку)
              — быстрый удобный поиск (саджестовый + полный), навигация по нему с клавиатуры
              — флеш в айфрейме (поэтому теперь не нужно добавлять виджет в белый список — флеш просто играет музыку)
              — уменьшен размер виджета с 225 кб до 70
              — поддержку Оперы 10.50

              seesu fast search

              С тех пор как была представлена версия 0.25 (или что-то около того) появилось и развилось много альтернатив
              Читать дальше →
            • Браузеры — автомобили

                До 17 марта Microsoft, в сответствии с директивой Еврокомиссии, должна была предложить пользователям Windows в странах ЕС специальное окно выбора браузеров (и предложила ). Так это выглядит — www.browserchoice.eu. Для нас, в отличие от ЕС, это событие выглядит скорее любопытным, чем практически полезным. Хочу приурочить в этому событию пост «А что было бы, если бы браузеры были автомобилями», в котором обыграть плюсы и минусы пятёрки ведущих браузеров, сподвигли описания каждого из них в «экране выбора» — именно по этим описаниям пользователи из ЕС теперь будут выбирать чем ходить в Интернет. Конечно каждый кулик хвалит своё болото. Но в 1000-й раз говорить о преимуществах и недостатках «в лоб» — скучно :)

                Итак, что если браузеры были бы автомобилями? (Где соврал, чего недоговорил, кто прав, кто виноват?). У кого лучше подсвеска, кого не ведёт на дороге, за чей руль лучше не садится?
                Читать дальше →
              • Javascript производительность? А как насчёт производительности перерисовки страниц?

                • Перевод
                Тесты производительности нынче становятся все агрессивней, при этом похоже, что упор делается исключительно на искусственных тестах, которые могут показать нам производительность лишь некоторых компонентов браузеров в частности производительность выполнения JavaScript функций, выбранных для этих конкретных тестов.

                Удивительно, что так мало внимания уделяется другим, более соответствующим аспектам производительности современных страниц, либо вообще не уделяется. Например, как быстро работают браузеры с динамично меняющимся стилем страницы (CSS)?

                На Velocity 2009 Линдси Симон из компании Google говорил именно об этом. И на слайдах из презентации есть пара итересных графиков.
                opera css change perfomance
                Выяснилось, что Оперовский движок очень быстро работает с динамично меняющимся контентом страницы, а это именно то, что используется в интернете повсеместно. Что, если в будущем производительность браузера будет измеряться более комплексно, в отличии от простого JavaScript теста?

                Еще одни нюанс, который я отметил в другой день, – это недостаточные и узкоспециальные тесты памяти, которые не принимают во внимание, что различные браузеры работают с памятью по-разному. Например, они игнорируют разделяемую память Хрома, и совсем не похоже, что бы учитывался продвинутый кеш Оперы.

                Кроме того Опера очищает кэш от неиспользуемых элементов каждые 10 минут, но не видно что бы это было отражено в отчёте испытания. Мы могли бы очищать кеш все время, но тогда нам пришлось бы пожертвовать производительностью, как по всей видимости, делает Firefox.

                В контексте комплексного тестирования JavaScript и памяти Джаракан, похоже, увеличит показатели искусственных JavaScript тестов, но, возможно, за счет использования большего количества памяти.
              • P2P прямо в браузере

                  Новая версия p2p плагина Littleshoot делает возможным загружать торренты прямом в вашем браузере. Отлично работает на Маках и Виндоус; в IE, Лисе, Хроме и Сафари. А также поддерживает протокол Gnutella и интеграцию с Youtube.

                  Создатели проекта имеют опыт в разработке p2p проектах, а именно таких как Poisoned, Kazaa, XFactor, Pando, BitTorrent Inc., и Gizmo Project

                  Первый настоящий p2p плагин для браузеров (построен на NPAPI и ActiveX) поддерживает битторрент, гнутеллу (действительно децентрализованный протокол) и собственный Littleshoot p2p протокол.

                  www.littleshoot.org/beta (виа торрентфрик)

                  Глядишь и до реализации высказанной не так давно идеи проигрывания загружающегося видео и аудио прямо из p2p сетей непосредственно в браузере не так далеко.
                • Google присоединился к антимонопольной жалобе против Майкрософта

                    Гугл опубликовал следующий пост:

                    В прошлом месяце Европейская комиссия опубликовала постановление, в ответ на жалобу о том, что Майкрософт навязывает свой браузер Internet Explorer с операционной системой Windows, и нём было сказано, что такое навязывание «вредит конкуренции между веб браузерами, подрывает инновации и на корню подрезает выбор пользователей». Позже Митчел Бэйкер из Мозилы опубликовала комментарии: «Ослабление (фактически приближающаяся к полному истреблению) конкуренции, ослабление выбора пользователей и инноваций в том как люди получают доступ к интернету — это то, как компании Майкрософт ведёт бизнес»

                    Мы подписываемся, что бы стать третьей стороной в процессе Европейской комиссии.
                    Читать дальше →