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

Як програмний менеджер, мені подобається писати специфікації функцій (ця вимога є навіть в описі посади!). У кожному окремому випадку програмний менеджер зважує всі за і проти кожного проектного компромісу, спираючись при цьому на користувацьких перевагах, даних зворотного зв'язку і телеметрії і так далі. На базі всіх цих даних ми будуємо певні припущення про те, які функції реалізовувати і як саме. Незважаючи на всі наші зусилля при плануванні, ми знаємо, що деякі з наших припущень, зроблених у ранніх версіях специфікацій, можуть змінитися в будь-який момент розробки. І найбільш часто змінюються, мабуть, веб-стандарти, тому ми заздалегідь запланували додатковий час на повторну перевірку підтримки стандартів та внесення необхідних змін.

Сгеагіровать на зміни, внесені до веб-стандарт в середині циклу розробки нової версії продукту, буває досить складно з ряду причин. Якщо говорити з точки зору розробки, то зміни в роботі функції не даються безкоштовно – ці зміни тягнуть за собою шлейф помилок, на пошук і виправлення яких потрібен час. Інші зміни також ризиковані, тому що стандарти, на яких вони засновані, можуть змінитися в будь-який момент. Кожен раз, коли ми розглядаємо питання внесення змін, ми повинні чітко зважити всі можливі наслідки.

У даній статті я хотів би розповісти про важливу подію в еволюції одного ве-стандарту і тому, як ми зреагували на нього в 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-складання.


Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*