Ярослав Рабоволюк объяснил, как делать веб-приложения безопаснее |
Однако процедура эта достаточно сложная — программистам приходится решить, например, такие проблемы, как плохое изображение на экране высокой четкости, медленное исполнение сценариев JavaScript и поиск уязвимостей веб-приложений. На конференции клиентским проблемам был отведен один из трех параллельных потоков.
Сейчас появляется все больше устройств, способных поддерживать высокое разрешение экрана, на котором пользователь рассчитывает получить более качественную картинку. На деле оказывается, что он начинает замечать мелкие огрехи в графике приложений, которые незаметны в низком разрешении. Чтобы улучшить качество изображения, веб-разработчик должен выполнить некоторые дополнительные действия, о которых рассказал Вадим Макеев, веб-проповедник компании Opera Software. В частности, он рекомендовал использовать для небольших графических объектов типа элементов навигации файлы формата ICO, которые могут объединять изображения с разным разрешением — браузер сам выбирает, какой вариант картинки показывать пользователю.
Еще одна проблема графики высокой четкости связана с форматом JPEG, который обеспечивает сжатие изображений за счет удаления несущественных деталей. При увеличении разрешения артефакты этого формата становятся видны. Чтобы их уменьшить, предлагается использовать изображения в JPEG размером в два раза больше, чем нужно, и сжатием в 30%. При этом требуемый размер картинки нужно указать при верстке страницы в параметрах высоты и ширины тега img. В результате браузер выполнит все необходимые преобразования корректнее. Такой прием позволяет сократить вдвое размер артефактов JPEG, сохраняя при этом объем файла картинки.
Ряд трудностей, с которыми сталкиваются программисты, обусловлены медленным исполнением сценариев JavaScript в браузере. Особенностью этого языка является то, что по семантике он очень похож на процедурные языки типа Си, но по логике работы это функциональный язык, похожий на LISP. За оптимизацию его работы взялась компания Google во время создания собственного браузера Chrome. Вадим Егоров, инженер Google, который разрабатывал виртуальную машину V8, использующуюся в Chrome, поделился советами, как оптимизировать исполнение сценариев. «Наша виртуальная машина сделана так, чтобы быстрые сценарии ускорить, а медленные — замедлить, — пояснил он. — Если вы пишете в классическом стиле процедурных языков наподобие Си, то такие сценарии в V8 выполняются быстрее. Но если вы используете полиморфные возможности JavaScript, то такой код будет исполняться медленнее».
Связано это с тем, что V8 на ходу компилирует наиболее часто исполняемый код в последовательность команд процессора, однако при определенных условиях приходится отказываться от уже скомпилированного кода — выполнять декомпиляцию, то есть интерпретировать исходную программу. В частности, интерпретация включается в том случае, когда часто повторяющийся фрагмент кода работает с объектами разных типов и имеет другие полиморфные элементы. «Полиморфный код всегда работает медленнее, чем мономорфный», — предупредил Егоров. Поэтому, чтобы избежать задержек, лучше основной цикл сделать как можно проще, с использованием одинаковых типов данных и функций.
Не забывают в Mail.ru и о безопасности клиентских приложений. Ярослав Рабоволюк, руководитель службы информационной безопасности Mail.ru, рассказал о наиболее часто встречающихся уязвимостях в веб-приложениях и посоветовал, как от них избавиться: «У меня есть специальный пользователь alert, с помощью которого я тестирую наши ресурсы. Так вот срабатывает этот код в самых неожиданных местах». Рабовалюк привел примеры уязвимых кодов веб-приложений и рекомендации, как сделать их безопасными. Сводились они к тому, чтобы фильтровать информацию, получаемую от пользователей, и контролировать целостность сессии с помощью индивидуального кода пользователя. Веб-приложения становятся все более сложными, и разработчикам уже недостаточно просто создать минимально необходимый функционал.