Обновленный синтаксис Getters/Setters в IE8

Источник: thevista

Как программный менеджер, мне нравится писать спецификации функций (это требование есть даже в описании должности!). В каждом отдельном случае программный менеджер взвешивает все за и против каждого проектного компромисса, основываясь при этом на пользовательских предпочтениях, данных обратной связи и телеметрии и так далее. На базе всех этих данных мы строим определенные предположения о том, какие функции реализовывать и как именно. Несмотря на все наши усилия при планировании, мы знаем, что некоторые из наших предположений, сделанных в ранних версиях спецификаций, могут измениться в любой момент разработки. И наиболее часто меняются, пожалуй, веб-стандарты, поэтому мы заранее запланировали дополнительное время на повторную проверку поддержки стандартов и внесение необходимых изменений.

Сгеагировать на изменения, внесенные в веб-стандарт в середине цикла разработки новой версии продукта, бывает достаточно сложно по ряду причин. Если говорить с точки зрения разработки, то изменения в работе функции не даются бесплатно - эти изменения влекут за собой шлейф ошибок, на поиск и исправление которых необходимо время. Другие изменения также рискованны, так как стандарты, на которых они основаны, могут измениться в любой момент. Каждый раз, когда мы рассматриваем вопрос внесения изменений, мы должны четко взвесить все возможные последствия.

В данной статье я хотел бы рассказать о важном событии в эволюции одного ве-стандарта и том, как мы среагировали на него в Internet Explorer 8. Я думаю, что данная статья даст вам уникальную возможность увидеть сложности, связанные с необходимостью реагировать на внесение изменений в принятый веб-стандарт во время цикла разработки программы.

ECMAScript 3.1
ECMAScript - стандарт, определяющий JavaScript, который последний раз обновлялся почти 10 лет назад. Однако, в прошлом году ревизия, которая впоследствии получила название ECMAScript 3.1, быстрыми темпами начала двигаться к стандартизации. Когда мы начинали работать над Internet Explorer 8, мы ожидали, что новая ревизия ECMAScript скоро будет стандартизирована, что даст нам возможность интегрировать ее в наши планы. Учитывая столь стремительное принятие ECMAScript 3.1, нам пришлось пересмотреть эти планы. Нам не хотелось интегрировать в Internet Explorer 8 функции, которые в итоге могут быть несовместимы с тем, что мы увидим в будущем черновике ECMAScript 3.1.

ECMAScript 3.1 включает в себя массу расширений для JavaScript, которые упрощают и ускоряют веб-разработку. Одной из таких функций является поддержка JSON и мы тут же решили, что встроенная в IE8 поддержка JSON API должна быть такой же, как в черновике ECMAScript 3.1. Еще одной функцией из этого черновика, которая тут же привлекла мое внимание, была поддержка синтаксиса Getters и Setters.

Макеты DOM
Много месяцев мы работали над функцией, которая помогла бы сделать DOM более совместимыми с языком JavaScript с помощью концепции JavaScript-макетов в DOM. Используя DOM-макеты, находчивые разработчики могут легко расширить функциональность HTML-элементов и других объектов DOM, разрабатывать более мощные библиотеки и уровни абстракции и даже заменять любые встроенные свойства и методы собственными. Это была, пожалуй, одна из наиболее востребованной серьезными JavaScript-экспертами функций. Одним из самых важных элементов данной функции являются свойства getters/setters в DOM.

До появления ревизии 3.1 ECMAScript не включал концепцию свойств getters/setters, но некоторые реализации JavaScript ее поддерживали, используя API, которые поддерживаются несколькими основными браузерами и системами программирования. Когда мы начали работать над поддержкой макетов DOM, мы решили реализовать поддержку этого API.

В спецификации ECMAScript 3.1 свойства getter/setter включены, но используя более гибкий API, а не фактический. Это решение было принято в разрез со всеми основными производителями браузеров, учитывая тех, которые уже поддерживают оригинальный getter/setter API. Учитывая, что разработка ECMAScript 3.1 в самом разгаре, а в данный процесс вовлечены разработчики основных браузеров, нам необходимо принять очень важное решение: реагировать ли нам на это неожиданное изменение и заниматься реализацией getter/setter API для DOM от ECMAScript 3.1 или же выпускать IE8 с тем, что у нас есть сейчас, а ECMAScript 3.1 API реализовать в будущем релизе?

В действительно ответ зависит от того, что лучше для веб-разработчиков. Им нужно интероперабельность, а если мы обеспечим поддержку getters/setters по ECMAScript 3.1, то мы гарантировать наличие интероперабельности нашего браузера в течение обозримого будущего. Учитывая, что на тот момент мы находились всего лишь в нескольких неделях от выпуска Beta 2, мы не хотели подвергать опасности качество данного релиза, и что важнее выпустить существующую реализацию (фактический getters/setters), чтобы дать разработчикам возможность протестировать данную функцию и найти серьезные ошибки, вместо того, чтобы убрать ее из Beta 2 и оставить для RC1. Поэтому у нас было достаточно времени, чтобы среагировать на те проблемы с совместимостью, на которые в ином случае времени могло и не хватить .

Первым делом стандарты
Сейчас я рад сообщить, что в Internet Explorer 8 RC будет добавлена не только высококачественная реализация макетов DOM, но и будут внесени изменения в реализацию getter/setter - теперь она будет в полной мере соответствовать черновику стандарта ECMAScript 3.1. И хотя наш JavaScript-движок и DOM в IE8 не будут поддерживать все изменения, представленные в ECMAScript 3.1, это значит, что код, разработанный для поддержки getters и setters в DOM в Internet Explorer 8 будет работать и сейчас, и в будущем, так как это код написан в соответствии с принятыми веб-стандартами.

Я безумно рад, что IE8 обзавелся этой функцией! Чтобы помочь начинающим веб-разработчикам, я написал несколько вводных статей по макетам DOM и getter/setters, а также новому синтаксису, который станет доступен в RC-сборке.

  • Document Object Model Prototypes, Part 1: Introduction
  • Document Object Model Prototypes, Part 2: Accessor (getter/setter) Support[/list[

    Кроме того, некоторые из вас могли заметить, что статья на MSDN была обновлена и теперь включает в себя макеты, поддерживаемые в Internet Explorer 8!

    Макеты DOM и getters/setters позволяют реализовать несколько классных возможностей по программированию. В будущих статьях я попытаюсь более подробно рассказать о нескольких сценариях, которые можно реализовать в IE8. Буду принателен, если в комментариях вы поделитесь своим опытом, какие сценарии удалось вам реализовать с помощью данной функции.

    Возвращаясь к вопросу целесообразности реакции на изменения, то изменения в веб-стандартах могут происходить и в ходе цикла разработки продукта. Опыт, который я получил с методами getters/setters во время разработки Internet Explorer 8, это только подтверждает. Как только мы завершим разработку IE8 и начнем задумываться о будущем, мы продолжим собирать нужные данные, прислушиваться к отзывам пользователей и вносить изменения там, где это необходимо. Скажу лишь одно - наша команда действительно заботиться о соответствии принятым веб-стандартам и об их поддержке, как способе достижения интероперабельности. В конечном итоге это позволяет разработчикам работать более эффективнее. А поддержка ECMAScript 3.1 - еще один шаг в этом направлении.


Страница сайта http://test.interface.ru
Оригинал находится по адресу http://test.interface.ru/home.asp?artId=23804