优秀的编程知识分享平台

网站首页 > 技术文章 正文

什么是异步组件?同步变成异步的一般方式是什么?只有3大种类

nanyue 2024-08-10 18:45:27 技术文章 8 ℃

在大型应用中,我们可能需要将应用分割成小一些的代码块,并且只在需要的时候才从服务器加载一个模块。为了简化,Vue 允许你以一个工厂函数的方式定义你的组件,这个工厂函数会异步解析你的组件定义。Vue 只有在这个组件需要被渲染的时候才会触发该工厂函数,且会把结果缓存起来供未来重渲染。例如:

如你所见,这个工厂函数会收到一个 resolve 回调,这个回调函数会在你从服务器得到组件定义的时候被调用。你也可以调用 reject(reason) 来表示加载失败。

可以在工厂函数中返回一个 Promise,所以把 webpack 2 和 ES2015 语法加在一起,可以写成这样


当使用局部注册的时候,可以直接提供一个返回 Promise 的函数:

案例:

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>异步渲染</title>
 <script src="https://cdn.bootcss.com/vue/2.6.10/vue.min.js"></script>
</head>
<body>
 <div id="app">
 <component-child></component-child>
 </div>
 <script>
 Vue.component('component-child', function(resolve, reject) {
 setTimeout(function() {
 resolve({
 template: '<div>子组件异步渲染,3秒后把resolve参数返回去</div>'
 })
 }, 3000)
 })
 var app = new Vue({
 el: '#app',
 })
 </script>
</body>
</html>

如你所见,3秒之后,resolve( )的参数传递出去,作为component()的第二参数,也就是平常我们注册组件的模式。

有部分同学可能看不懂是什么意思,其实就是:

第二参数最终形态是一个对象,比如obj就是一个对象,obj ={hello:'world' },采用函数写:

var obj = (function(){ return{hello:'world' }})()

上述resolve相当于return。

拓展:同步变成异步的一般方式是什么?

我们需要异步是因为JavaScript是单线程的,异步可以显著改善性能。有哪些异步方式?


右侧绿色部分就是异步方式,比如事件,ajax,定时器等。

异步是一个很重要的课题,

1、延迟类型:setTimeout(setInterval也是可以的)、requestAnimationFrame、setImmediate(IE10及以上)

2、监听事件实现的类型:监听new Image加载状态、监听script加载状态、监听iframe加载状态、Message

3、带有异步功能类型: Promise、ajax( XMLHttpRequest、ActiveXObject)、Worker;

欢迎关注。

最近发表
标签列表