共用方式為


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

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

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

В статье я хотел бы рассказать о важном событии в эволюции одного веб-стандарта и том, как мы среагировали на него в 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 RC1 будет добавлена не только высококачественная реализация макетов 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

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

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

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

Тревис Лейтхед (Travis Leithead),

программный менеджер Internet Explorer

Comments