As qingming comes rain, especially great release to the soul. On April 3rd, uVU posted an article titled “[RFC] on IE11 support for Vue 3” on Zhihu, about the proposal that Vue 3 will no longer support IE11:

See this news, in the mind unexpectedly no waves, because we have been burdened by IE for too long. I believe that many students who are still doing PC pages are deeply affected by IE. I still remember that when I first made a web page in 2009, I had to pay attention to the compatibility of IE5. There was a time when IE compatibility was a common topic in front-end interviews. Twelve years later, Internet Explorer 11 was finally abandoned by Microsoft itself.

Many students in the community translated the original TEXT of RFC at the first time. I had a vaccination during the holiday and had a rest until yesterday. In addition to the RFC translation, let’s take a look at some facts about the news:

knowledge

What is the RFC

RFC is a Request For Comments. React also has RFC. Whether React or Vue, when authors or developers want to make a lot of changes or add new features, they usually need to write a proposal that includes motivation and detailed design.

The React Hooks introduced in the React Conf in 2018 are in the form of RFC. This “IE11 support for Vue 3” is also RFC, meaning that the matter is subject to community consultation and is not final.

However, in general, RFCS are well thought out, and proposals that are mentioned in the RFC, especially by the authors themselves, are generally approved, but more details are added to the discussion.

The current situation of IE11 – dad doesn’t love it

Microsoft is ditching its old Internet Explorer browser to focus more on its new son, Edge. Many of its core products no longer support IE11, such as Microsoft 365. Today, IE11’s global adoption has fallen to less than 1%. Such a miserable situation, the old IE is to disappear earlier.

Does Vue not support IE11? What should IE users do

Of course not, Vue still supports IE11 in version 2.x, if you want to use new features like Vue 3, you can wait for Vue 2.7. The RFC announced a backward compatibility for version 2.7, porting some of the new features of 3.x to ensure a similar development experience between the two versions. I have learned a lot from this practice of UNIVERSITY of Utah. Sometimes, I can change my mind and see a brighter future.

The RFC translation

  • Address: vuE3-IE11-support
  • Original author: Yu Yuxi
  • Original publication time: 2021-04-03
  • Permanent link to this article: github.com/Ivocin/Tran…
  • Clear autumn
  • Start Date: 2021-04-02
  • Target version: 3.x
  • Reference Issue: N/A
  • Implement PR: N/A

Abstract

  • Removed support for Internet Explorer 11 from Vue 3.
  • Focus on moving compatibility features forward to Vue 2.7.

motivation

From the start of Vue 3 development until the end of 2018, we were asked questions about IE11 support. A lot of users have asked if Vue 3 will support IE11, and our original plan was to release Vue 3 first, stabilize it, and then add IE11 support at a later stage. During the lengthy development process, we did additional research and experiments on COMPATIBILITY with IE11, but this was a lower priority due to its complexity and the amount of other work at hand.

When we look at this again in 2021, the landscape for browsers and JavaScript has changed dramatically. More developers are now using modern language features and, more importantly, Microsoft itself is actively pushing users away from IE and continuing to focus on Edge. It also removed support for IE11 from its main products, such as Microsoft 365. This comes just days after WordPress made its own decision to remove support for Internet Explorer 11. Global adoption of IE11 has fallen to less than 1%. When we talk about public-facing websites and apps, the decline in IE11 is obvious.

We thought this was a good opportunity to rethink Vue 3 support for IE11.

The cost of supporting IE11 in Vue 3

Behavior inconsistency

Vue 2’s responsive system is based on ES5 getters /setters. Vue 3 leverages ES2015 proxies to achieve a higher performance, more complete responsive system, but cannot polyfill in IE11. This was our biggest hurdle, because it meant that if we were to support IE11, we would have to release two versions with different behaviors: a proxy-based reactive system and a reactive system based on ES5 getter/setters features similar to Vue 2.

Vue 3’s proxy-based responsive system provides near-complete coverage of language features. It can detect many operations that are completely undetectable in ES5, such as attributes to add or remove, array indexes and length changes, and in operator checks. Proxy-based code does not run in IE11. Not only does this create technical complexity for us, but it also creates a constant mental burden for developers.

Our original plan was to release both Proxy and ES5 responsive versions in support of IE11. When run in a proxy-enabled development environment, it detects and warns against incompatible IE11 uses. While feasible in theory, this introduces significant complexity because it requires mixing the two implementations together and increases the risk of inconsistent behavior between the development and production environments.

Long-term maintenance burden

Supporting IE11 also meant that we had to take into account the language features used throughout the code base and find the right Poliyfill/compile strategy for our release. Every new feature that can’t be polyfilled in IE11 brings new behavior warnings. Once Vue 3 is committed to supporting IE11, it won’t be able to get rid of it until the next big release.

Complexity for library developers

It would be acceptable to some extent if Vue itself could handle this complexity entirely. However, after discussions with community members, we realized that the coexistence of two responsive system implementations inevitably affected library authors as well.

By supporting IE11 in Vue 3, library authors essentially have to make the same decision. Library authors have to consider which Vue 3 version their library runs on (and possibly Vue 2 support). If they decide to support IE11, they will have to keep the warnings of ES5 responsive systems in mind as they write their libraries.

Contribute to the continued existence of IE11

No one wants to support IE11. It’s a dying browser stuck in the past. The further the Web ecosystem moves forward in the future, the more gaps we have to fill in order to support IE11. Ironically, if Vue 3 supports IE11, we’re breathing new life into it. Based on our user base, removing support for IE11 could accelerate its obsolescence.

For those who really need IE11 support

It’s also clear that the real demand for IE11 comes from users who can’t upgrade: financial institutions, the education sector, and screen readers who rely on IE11. If you’re building an application for these domains, you probably have no choice.

If you need IE11 support, we recommend using Vue 2. Rather than taking on huge technical debt for Vue3 and future releases, we thought it made more sense to focus on making Vue2 backward compatible and ensuring a more similar development experience between the two major releases.

Some features that are backward compatible with version 2.7:

  • Incorporate the @vue/ composition-API plugin into vue 2. This will allow libraries developed using the Composition API to support both Vue2 and Vue3.
  • < Script Setup > syntax in single-file components.
  • emitsOptions.
  • Improved TypeScript type support.
  • Official Vue 2 support in Vite (current support is through unofficial plug-ins)

Note: This list is tentative and may not be comprehensive, but we will discuss it in a separate RFC and make a final decision.