feat(perf): lazy embed languages bundle for SFCs and Docs #791
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR introduces an optimization to load and bundle embedded languages lazily for some languages.
For example, in Vue SFC, you can have
<script lang="tsx">
,<template lang="pug">
,<style lang="scss">
to embed different languages in Vue files. This means to support properly support them, when loading Vue's grammar, it will also loadtsx
,jsx
,pug
,coffee
,scss
,sass
,less
... as it's dependencies - even you might not need most of the languages.In this PR, we make those embedded languages as lazy dependencies, meaning they are not initiated along with
vue
. Instead, you need to load the corresponding languages alongside them to get those embedded blocks properly highlighted. We consider this as a performance improvement on both runtime and bundle size, as this would only affect fine-grain bundle, and users should already loading the languages they needed in those cases.The same optimization applies to
vue
,vue-html
,astro
,svelte
,pug
,haml
,wikitext
,latex
,asciidoc
. Andmarkdown
,mdx
already worked that way.