В данном руководстве мы обсудим различия между двумя подходами к разработке:
Постепенное ухудшение
Предоставление альтернативной версии функциональности или уведомление пользователя о недостатках продукта, как мера предосторожности для указания применимости продукта.
Прогрессивное улучшение
Начиная с некоторой базовой допустимой функциональности
Может показаться, что эти два подхода очень похожи, и что они должны предоставить почти одинаковые результаты, но необходимо отметить, что существуют различия, которые мы рассмотрим ниже.
Мы начнем с объяснения необходимости этих методов. Затем мы рассматриваем более содержательное определение, показывая примеры реализации, после чего проводим сравнение и указываем, когда и что использовать. Давайте начнем с объяснения, почему требуются такие специальные подходы к web-разработке.
Лекция имеет следующую структуру:
Почти как капитан Немо из "20,000 лье под водой" разработчики web ощущают себя в постоянно изменяющейся и неустойчивой среде, которая может быть достаточно враждебна по отношению к тому, что мы пытаемся получить.
Инфраструктура Web была создана и определена для использования с любым устройством отображения, на любом языке, везде, где может понадобиться. От конечного пользователя ожидается только, что он использует устройство просмотра, которое может соединиться с Web и понимает протоколы, используемые для передачи информации - http, https, ftp и т.д.
Это означает, что мы не можем ожидать никакой настройки или возможностей от конечных пользователей. Мы можем быть также совершенно уверены, что наш опыт работы с Web в качестве разработчиков совершенно отличен от опыта тех людей, которых мы хотим охватить.
Не требуется обязательного обновления технологий, чтобы получить доступ к содержимому Интернет. Люди и компании будут придерживаться определенной среды, и не будут изменять или обновлять ее просто потому, что мы этого захотим. Множество людей хотят только потреблять Web и не обращают внимания на технологии, которые лежат в основе - они ожидают только возможность получить доступ к содержимому, которое мы им обещаем. Это разработчики операционных систем и браузеров должны поддерживать их системы на современном уровне - разработчики Web ничего не могут сделать в этом отношении.
Все это приводит к очень хрупкой среде разработки, например, офисы, где по умолчанию используются 9-летние старые браузеры с отключенными сценариями и
Мы могли бы теперь заявить, что такие компании "опоздали на поезд" и нет никакого смысла пытаться поддерживать устаревшие технологии. Но такое отношение может заставить нас забыть, что эти люди могут быть очень важны для успеха наших продуктов. Во многих случаях они не имеют необходимых прав для изменения своего технического окружения. Когда речь идет о доступности, то все еще более очевидно: конечный пользователь с дислексией не сможет понять сложные инструкции, а слепой пользователь не сможет "щелкнуть на зеленой кнопке, чтобы продолжить", даже если мы и указали, что это требуется для использования наших систем.
Мы работаем в неизвестности, и нам требуется найти способ заставить все работать. Здесь на помощь и приходят как
Вы уже видели краткое определение этих понятий выше, в этом разделе будет представлено более содержательное определение и рассмотрено, что из себя действительно представляет реализация этих методологий.
Итак,
Давайте посмотрим на пример, показывающий подход, который использует
Возможно, что ссылки, которые позволяют пользователям печатать текущий документ, бесполезны - нажатие на иконке принтера в панели инструментов браузера делает то же самое. Однако тестирование пользователей показывает, что в качестве последнего шага процесса резервирования (например, на web-сайте авиакомпании) они являются хорошим приглашающим сигналом к действию. Пользователи чувствуют, что контролируют ситуацию, и получают чувство завершения того, что они начали.
Проблема со ссылками "Печать страницы" в том, что в HTML не существует способа соединиться с кнопкой принтера браузера - для этого требуется window браузера имеет метод print(), который можно вызвать для запуска печати. Возможно, наиболее распространенный способ состоит в использовании псевдопротокола
<p id="printthis"> <a href="javascript:window.print()">Print this page</a> </p>
Это работает, когда поддержка print. Однако, если
Чтобы ослабить эту проблему разработчики сайтов обычно используют подход noscript. Все внутри этого элемента будет показано конечному пользователю, когда
<p id="printthis">
<a href="javascript:window.print()">Печать страницы </a>
</p>
<noscript>
<p class="scriptwarning">
Печать страницы требует использования JavaScript.
Пожалуйста, включите поддержку JavaScript в браузере.
</p>
</noscript>
Это считается постепенным
Возможно, немного лучше будет следующий подход:
<p id="printthis">
<a href="javascript:window.print()">Печать страницы </a>
</p>
<noscript>
<p class="scriptwarning">
Распечатайте копию своего подтверждения.
Выберите иконку "Print" в браузере,
Или выберите "Print" в меню "File".
</p>
</noscript>
Это исключает некоторые из перечисленных выше проблем, но предполагает, что функция печати одинакова во всех браузерах. Кроме того, остается факт - проблема с подходом такого типа состоит в том, что мы предлагаем некоторую функциональность, полностью осознавая, что она может не работать, и затем должны объяснять это. Технически нет необходимости для наличия кнопки "напечатать это", именно поэтому подход с прогрессивным
Если мы должны решить эту проблему с помощью
кнопки: Кнопки не имеют поведения по умолчанию. Каждая кнопка может иметь клиентские сценарии, связанные с атрибутами событий элемента. Когда происходит событие (например, пользователь нажимает кнопку, отпускает ее, и т.д.), включается связанный сценарий.
Второй шаг состоит в исключении предположения, что пользователь имеет включенный
<p id="printthis">Спасибо за Ваш заказ. Пожалуйста, распечатайте эту страницу для собственного учета.</p>
Это работает в любом случае. Для остальной функциональности мы используем ненавязчивый
<p id="printthis">Спасибо за Ваш заказ. Пожалуйста, распечатайте эту страницу для собственного учета.</p>
<script type="text/javascript">
(function(){
if(document.getElementById){
var pt = document.getElementById('printthis');
if(pt typeof window.print === 'function'){
var but = document.createElement('input');
but.setAttribute('type','button');
but.setAttribute('value','Print this now');
but.onclick = function(){
window.print();
};
pt.appendChild(but);
}
}
})();
</script>
Обратите внимание, насколько ненавязчив сценарий - мы не предполагаем ничего.
(function(){})() - мы не оставляем за собой никаких глобальных переменных.window и метод print (проверяя, что type этого свойства будет function ).window.print() в качестве обработчика события щелчка.Это будет работать для каждого пользователя, независимо от технической среды. Мы никогда не обещаем пользователю элемент интерфейса, который не работает - наоборот, мы показываем кнопку, только когда она работает.
Я могу быть идеалистом, но я действительно не люблю идею
Я помню себя, использующим Blackberry, когда это устройство не могло найти беспроводную сеть, и я был крайне разочарован, когда web-продукты сообщили, что им требуется
Однако, постепенное ухудшение становится жизнеспособным в нескольких ситуациях:
Во всех остальных случаях, прогрессивное улучшение сделает и конечных пользователей и вас более счастливыми:
Поддержание прогрессивно улучшенного продукта современным требует значительно меньше работы, чем обслуживание двух версий.
Можно сказать, что как
Крис Хайлман работает Web-разработчиком уже десять лет, с тех пор как бросил радио-журналистику. Он работает для Yahoo! в Великобритании в качестве инструктора и ведущего разработчика, и осуществляет надзор за качеством кода внешнего представления для Европы и Азии.
Крис поддерживает блог на сайте Wait till I come (http://wait-till-i.com/) и доступен во многих социальных сетях под ником "codepo8".
Фото с разрешения: Bluesmoon (http://www.flickr.com/photos/bluesmoon/1545636474/)
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.