[{"data":1,"prerenderedAt":2013},["ShallowReactive",2],{"page-\u002Fvue\u002F对keep-alive组件的理解":3},{"id":4,"title":5,"body":6,"description":2006,"extension":2007,"meta":2008,"navigation":393,"path":2009,"seo":2010,"stem":2011,"__hash__":2012},"content\u002FVue\u002F对keep-alive组件的理解.md","对keep-alive组件的理解",{"type":7,"value":8,"toc":2000},"minimark",[9,12,21,25,39,110,130,261,303,334,604,632,666,669,716,892,925,1121,1136,1457,1476,1976,1979,1987,1990,1996],[10,11,5],"h1",{"id":5},[13,14,15,16,20],"p",{},"当在组件之间切换的时候，有时会想保持这些组件的状态，以避免反复重渲染导致的性能等问题，使用",[17,18,19],"code",{},"\u003Ckeep-alive>","包裹动态组件时，会缓存不活动的组件实例，而不是销毁它们。",[22,23,24],"h2",{"id":24},"描述",[13,26,27,28,30,31,34,35,38],{},"重新创建动态组件的行为通常是非常有用的，但是在有些情况下我们更希望那些标签的组件实例能够被在它们第一次被创建的时候缓存下来，此时使用",[17,29,19],{},"包裹组件即可缓存当前组件实例，将组件缓存到内存，用于保留组件状态或避免重新渲染，和",[17,32,33],{},"\u003Ctransition>","相似它，其自身不会渲染一个",[17,36,37],{},"DOM","元素，也不会出现在组件的父组件链中。",[40,41,46],"pre",{"className":42,"code":43,"language":44,"meta":45,"style":45},"language-html shiki shiki-themes github-light github-dark","\u003Ckeep-alive>\n    \u003Ccomponent v-bind:is=\"currentComponent\" class=\"tab\">\u003C\u002Fcomponent>\n\u003C\u002Fkeep-alive>\n","html","",[17,47,48,64,100],{"__ignoreMap":45},[49,50,53,57,61],"span",{"class":51,"line":52},"line",1,[49,54,56],{"class":55},"sVt8B","\u003C",[49,58,60],{"class":59},"s9eBZ","keep-alive",[49,62,63],{"class":55},">\n",[49,65,67,70,74,78,81,85,88,90,93,96,98],{"class":51,"line":66},2,[49,68,69],{"class":55},"    \u003C",[49,71,73],{"class":72},"s7hpK","component",[49,75,77],{"class":76},"sScJk"," v-bind:is",[49,79,80],{"class":55},"=",[49,82,84],{"class":83},"sZZnC","\"currentComponent\"",[49,86,87],{"class":76}," class",[49,89,80],{"class":55},[49,91,92],{"class":83},"\"tab\"",[49,94,95],{"class":55},">\u003C\u002F",[49,97,73],{"class":72},[49,99,63],{"class":55},[49,101,103,106,108],{"class":51,"line":102},3,[49,104,105],{"class":55},"\u003C\u002F",[49,107,60],{"class":59},[49,109,63],{"class":55},[13,111,112,113,115,116,118,119,121,122,125,126,129],{},"被",[17,114,19],{},"包含的组件不会被再次初始化，也就意味着不会重走生命周期函数，",[17,117,19],{},"保持了当前的组件的状态，在第一次创建的时候回正常触发其创建生命周期，但是由于组件其实并未销毁，所以不会触发组件的销毁生命周期，而当组件在",[17,120,19],{},"内被切换时，它的",[17,123,124],{},"activated","和",[17,127,128],{},"deactivated","这两个生命周期钩子函数将会被对应执行。",[40,131,135],{"className":132,"code":133,"language":134,"meta":45,"style":45},"language-javascript shiki shiki-themes github-light github-dark","export default {\n    data: function() {\n        return {\n        \n        }\n    },\n    activated: function(){\n        console.log(\"activated\");\n    },\n    deactivated: function(){\n        console.log(\"deactivated\");\n    },\n}\n","javascript",[17,136,137,149,163,170,176,182,188,201,219,224,236,250,255],{"__ignoreMap":45},[49,138,139,143,146],{"class":51,"line":52},[49,140,142],{"class":141},"szBVR","export",[49,144,145],{"class":141}," default",[49,147,148],{"class":55}," {\n",[49,150,151,154,157,160],{"class":51,"line":66},[49,152,153],{"class":76},"    data",[49,155,156],{"class":55},": ",[49,158,159],{"class":141},"function",[49,161,162],{"class":55},"() {\n",[49,164,165,168],{"class":51,"line":102},[49,166,167],{"class":141},"        return",[49,169,148],{"class":55},[49,171,173],{"class":51,"line":172},4,[49,174,175],{"class":55},"        \n",[49,177,179],{"class":51,"line":178},5,[49,180,181],{"class":55},"        }\n",[49,183,185],{"class":51,"line":184},6,[49,186,187],{"class":55},"    },\n",[49,189,191,194,196,198],{"class":51,"line":190},7,[49,192,193],{"class":76},"    activated",[49,195,156],{"class":55},[49,197,159],{"class":141},[49,199,200],{"class":55},"(){\n",[49,202,204,207,210,213,216],{"class":51,"line":203},8,[49,205,206],{"class":55},"        console.",[49,208,209],{"class":76},"log",[49,211,212],{"class":55},"(",[49,214,215],{"class":83},"\"activated\"",[49,217,218],{"class":55},");\n",[49,220,222],{"class":51,"line":221},9,[49,223,187],{"class":55},[49,225,227,230,232,234],{"class":51,"line":226},10,[49,228,229],{"class":76},"    deactivated",[49,231,156],{"class":55},[49,233,159],{"class":141},[49,235,200],{"class":55},[49,237,239,241,243,245,248],{"class":51,"line":238},11,[49,240,206],{"class":55},[49,242,209],{"class":76},[49,244,212],{"class":55},[49,246,247],{"class":83},"\"deactivated\"",[49,249,218],{"class":55},[49,251,253],{"class":51,"line":252},12,[49,254,187],{"class":55},[49,256,258],{"class":51,"line":257},13,[49,259,260],{"class":55},"}\n",[13,262,263,265,266,269,270,273,274,276,277,280,281,283,284,287,288,291,292,295,296,299,300,302],{},[17,264,19],{},"可以接收",[17,267,268],{},"3","个属性做为参数进行匹配对应的组件进行缓存，匹配首先检查组件自身的",[17,271,272],{},"name","选项，如果",[17,275,272],{},"选项不可用，则匹配它的局部注册名称，即父组件",[17,278,279],{},"components","选项的键值，匿名组件不能被匹配，除了使用",[17,282,19],{},"的",[17,285,286],{},"props","控制组件缓存，通常还可以配合",[17,289,290],{},"vue-router","在定义时的",[17,293,294],{},"meta","属性以及在",[17,297,298],{},"template","定义的",[17,301,19],{},"进行组件的有条件的缓存控制。",[304,305,306,313,328],"ul",{},[307,308,309,312],"li",{},[17,310,311],{},"include",": 包含的组件，可以为字符串，数组，以及正则表达式,只有匹配的组件会被缓存。",[307,314,315,318,319,321,322,324,325,327],{},[17,316,317],{},"exclude",": 排除的组件，以为字符串，数组，以及正则表达式,任何匹配的组件都不会被缓存，当匹配条件同时在",[17,320,311],{},"与",[17,323,317],{},"存在时，以",[17,326,317],{},"优先级最高。",[307,329,330,333],{},[17,331,332],{},"max",": 缓存组件的最大值，类型为字符或者数字,可以控制缓存组件的个数，一旦这个数字达到了，在新实例被创建之前，已缓存组件中最久没有被访问的实例会被销毁掉。",[40,335,337],{"className":42,"code":336,"language":44,"meta":45,"style":45},"\u003C!-- 包含 逗号分隔字符串 -->\n\u003Ckeep-alive include=\"a,b\">\n    \u003Ccomponent :is=\"show\">\u003C\u002Fcomponent>\n\u003C\u002Fkeep-alive>\n\n\u003C!-- 包含 正则表达式 使用v-bind -->\n\u003Ckeep-alive :include=\"\u002Fa|b\u002F\">\n    \u003Ccomponent :is=\"show\">\u003C\u002Fcomponent>\n\u003C\u002Fkeep-alive>\n\n\u003C!-- 包含 数组 使用v-bind -->\n\u003Ckeep-alive :include=\"['a', 'b']\">\n    \u003Ccomponent :is=\"show\">\u003C\u002Fcomponent>\n\u003C\u002Fkeep-alive>\n\n\u003C!-- 排除 逗号分隔字符串 -->\n\u003Ckeep-alive exclude=\"a,b\">\n    \u003Ccomponent :is=\"show\">\u003C\u002Fcomponent>\n\u003C\u002Fkeep-alive>\n\n\u003C!-- 最大缓存量 数字 -->\n\u003Ckeep-alive :max=\"10\">\n    \u003Ccomponent :is=\"show\">\u003C\u002Fcomponent>\n\u003C\u002Fkeep-alive>\n",[17,338,339,345,361,381,389,395,400,416,434,442,446,451,466,484,493,498,504,520,539,548,553,559,576,595],{"__ignoreMap":45},[49,340,341],{"class":51,"line":52},[49,342,344],{"class":343},"sJ8bj","\u003C!-- 包含 逗号分隔字符串 -->\n",[49,346,347,349,351,354,356,359],{"class":51,"line":66},[49,348,56],{"class":55},[49,350,60],{"class":59},[49,352,353],{"class":76}," include",[49,355,80],{"class":55},[49,357,358],{"class":83},"\"a,b\"",[49,360,63],{"class":55},[49,362,363,365,367,370,372,375,377,379],{"class":51,"line":102},[49,364,69],{"class":55},[49,366,73],{"class":72},[49,368,369],{"class":76}," :is",[49,371,80],{"class":55},[49,373,374],{"class":83},"\"show\"",[49,376,95],{"class":55},[49,378,73],{"class":72},[49,380,63],{"class":55},[49,382,383,385,387],{"class":51,"line":172},[49,384,105],{"class":55},[49,386,60],{"class":59},[49,388,63],{"class":55},[49,390,391],{"class":51,"line":178},[49,392,394],{"emptyLinePlaceholder":393},true,"\n",[49,396,397],{"class":51,"line":184},[49,398,399],{"class":343},"\u003C!-- 包含 正则表达式 使用v-bind -->\n",[49,401,402,404,406,409,411,414],{"class":51,"line":190},[49,403,56],{"class":55},[49,405,60],{"class":59},[49,407,408],{"class":76}," :include",[49,410,80],{"class":55},[49,412,413],{"class":83},"\"\u002Fa|b\u002F\"",[49,415,63],{"class":55},[49,417,418,420,422,424,426,428,430,432],{"class":51,"line":203},[49,419,69],{"class":55},[49,421,73],{"class":72},[49,423,369],{"class":76},[49,425,80],{"class":55},[49,427,374],{"class":83},[49,429,95],{"class":55},[49,431,73],{"class":72},[49,433,63],{"class":55},[49,435,436,438,440],{"class":51,"line":221},[49,437,105],{"class":55},[49,439,60],{"class":59},[49,441,63],{"class":55},[49,443,444],{"class":51,"line":226},[49,445,394],{"emptyLinePlaceholder":393},[49,447,448],{"class":51,"line":238},[49,449,450],{"class":343},"\u003C!-- 包含 数组 使用v-bind -->\n",[49,452,453,455,457,459,461,464],{"class":51,"line":252},[49,454,56],{"class":55},[49,456,60],{"class":59},[49,458,408],{"class":76},[49,460,80],{"class":55},[49,462,463],{"class":83},"\"['a', 'b']\"",[49,465,63],{"class":55},[49,467,468,470,472,474,476,478,480,482],{"class":51,"line":257},[49,469,69],{"class":55},[49,471,73],{"class":72},[49,473,369],{"class":76},[49,475,80],{"class":55},[49,477,374],{"class":83},[49,479,95],{"class":55},[49,481,73],{"class":72},[49,483,63],{"class":55},[49,485,487,489,491],{"class":51,"line":486},14,[49,488,105],{"class":55},[49,490,60],{"class":59},[49,492,63],{"class":55},[49,494,496],{"class":51,"line":495},15,[49,497,394],{"emptyLinePlaceholder":393},[49,499,501],{"class":51,"line":500},16,[49,502,503],{"class":343},"\u003C!-- 排除 逗号分隔字符串 -->\n",[49,505,507,509,511,514,516,518],{"class":51,"line":506},17,[49,508,56],{"class":55},[49,510,60],{"class":59},[49,512,513],{"class":76}," exclude",[49,515,80],{"class":55},[49,517,358],{"class":83},[49,519,63],{"class":55},[49,521,523,525,527,529,531,533,535,537],{"class":51,"line":522},18,[49,524,69],{"class":55},[49,526,73],{"class":72},[49,528,369],{"class":76},[49,530,80],{"class":55},[49,532,374],{"class":83},[49,534,95],{"class":55},[49,536,73],{"class":72},[49,538,63],{"class":55},[49,540,542,544,546],{"class":51,"line":541},19,[49,543,105],{"class":55},[49,545,60],{"class":59},[49,547,63],{"class":55},[49,549,551],{"class":51,"line":550},20,[49,552,394],{"emptyLinePlaceholder":393},[49,554,556],{"class":51,"line":555},21,[49,557,558],{"class":343},"\u003C!-- 最大缓存量 数字 -->\n",[49,560,562,564,566,569,571,574],{"class":51,"line":561},22,[49,563,56],{"class":55},[49,565,60],{"class":59},[49,567,568],{"class":76}," :max",[49,570,80],{"class":55},[49,572,573],{"class":83},"\"10\"",[49,575,63],{"class":55},[49,577,579,581,583,585,587,589,591,593],{"class":51,"line":578},23,[49,580,69],{"class":55},[49,582,73],{"class":72},[49,584,369],{"class":76},[49,586,80],{"class":55},[49,588,374],{"class":83},[49,590,95],{"class":55},[49,592,73],{"class":72},[49,594,63],{"class":55},[49,596,598,600,602],{"class":51,"line":597},24,[49,599,105],{"class":55},[49,601,60],{"class":59},[49,603,63],{"class":55},[13,605,606,608,609,612,613,615,616,618,619,283,621,624,625,627,628,631],{},[17,607,19],{},"是用在其一个直属的子组件被开关的情形，如果在其中有",[17,610,611],{},"v-for","则不会工作，如果有上述的多个条件性的子元素，",[17,614,19],{},"要求同时只有一个子元素被渲染，通俗点说，",[17,617,19],{},"最多同时只能存在一个子组件，在",[17,620,19],{},[17,622,623],{},"render","函数中定义的是在渲染",[17,626,19],{},"内的组件时，",[17,629,630],{},"Vue","是取其第一个直属子组件来进行缓存。",[40,633,635],{"className":132,"code":634,"language":134,"meta":45,"style":45},"const vnode: VNode = getFirstComponentChild(this.$slots.default);\n",[17,636,637],{"__ignoreMap":45},[49,638,639,642,646,649,652,655,658,660,663],{"class":51,"line":52},[49,640,641],{"class":141},"const",[49,643,645],{"class":644},"sj4cs"," vnode",[49,647,648],{"class":141},":",[49,650,651],{"class":76}," VNode",[49,653,654],{"class":141}," =",[49,656,657],{"class":76}," getFirstComponentChild",[49,659,212],{"class":55},[49,661,662],{"class":644},"this",[49,664,665],{"class":55},".$slots.default);\n",[22,667,668],{"id":668},"实现",[13,670,671,673,674,676,677,680,681,684,685,688,689,692,693,695,696,699,700,125,703,706,707,710,711,125,713,715],{},[17,672,630],{},"中",[17,675,19],{},"组件源码定义在",[17,678,679],{},"dev\u002Fsrc\u002Fcore\u002Fcomponents\u002Fkeep-alive.js","，本次分析实现的",[17,682,683],{},"commit id","为",[17,686,687],{},"215f877","。",[690,691],"br",{},"\n在",[17,694,19],{},"初始化时的",[17,697,698],{},"created","阶段会初始化两个变量，分别为",[17,701,702],{},"cache",[17,704,705],{},"keys","，",[17,708,709],{},"mounted","阶段会对",[17,712,311],{},[17,714,317],{},"变量的值做监测。",[40,717,719],{"className":132,"code":718,"language":134,"meta":45,"style":45},"export default {\n    created () {\n        this.cache = Object.create(null)\n        this.keys = []\n    },\n    mounted () {\n        this.$watch('include', val => {\n            pruneCache(this, name => matches(val, name))\n        })\n        this.$watch('exclude', val => {\n            pruneCache(this, name => !matches(val, name))\n        })\n    },\n}\n",[17,720,721,729,737,761,773,777,784,811,832,837,858,880,884,888],{"__ignoreMap":45},[49,722,723,725,727],{"class":51,"line":52},[49,724,142],{"class":141},[49,726,145],{"class":141},[49,728,148],{"class":55},[49,730,731,734],{"class":51,"line":66},[49,732,733],{"class":76},"    created",[49,735,736],{"class":55}," () {\n",[49,738,739,742,745,747,750,753,755,758],{"class":51,"line":102},[49,740,741],{"class":644},"        this",[49,743,744],{"class":55},".cache ",[49,746,80],{"class":141},[49,748,749],{"class":55}," Object.",[49,751,752],{"class":76},"create",[49,754,212],{"class":55},[49,756,757],{"class":644},"null",[49,759,760],{"class":55},")\n",[49,762,763,765,768,770],{"class":51,"line":172},[49,764,741],{"class":644},[49,766,767],{"class":55},".keys ",[49,769,80],{"class":141},[49,771,772],{"class":55}," []\n",[49,774,775],{"class":51,"line":178},[49,776,187],{"class":55},[49,778,779,782],{"class":51,"line":184},[49,780,781],{"class":76},"    mounted",[49,783,736],{"class":55},[49,785,786,788,791,794,796,799,802,806,809],{"class":51,"line":190},[49,787,741],{"class":644},[49,789,790],{"class":55},".",[49,792,793],{"class":76},"$watch",[49,795,212],{"class":55},[49,797,798],{"class":83},"'include'",[49,800,801],{"class":55},", ",[49,803,805],{"class":804},"s4XuR","val",[49,807,808],{"class":141}," =>",[49,810,148],{"class":55},[49,812,813,816,818,820,822,824,826,829],{"class":51,"line":203},[49,814,815],{"class":76},"            pruneCache",[49,817,212],{"class":55},[49,819,662],{"class":644},[49,821,801],{"class":55},[49,823,272],{"class":804},[49,825,808],{"class":141},[49,827,828],{"class":76}," matches",[49,830,831],{"class":55},"(val, name))\n",[49,833,834],{"class":51,"line":221},[49,835,836],{"class":55},"        })\n",[49,838,839,841,843,845,847,850,852,854,856],{"class":51,"line":226},[49,840,741],{"class":644},[49,842,790],{"class":55},[49,844,793],{"class":76},[49,846,212],{"class":55},[49,848,849],{"class":83},"'exclude'",[49,851,801],{"class":55},[49,853,805],{"class":804},[49,855,808],{"class":141},[49,857,148],{"class":55},[49,859,860,862,864,866,868,870,872,875,878],{"class":51,"line":238},[49,861,815],{"class":76},[49,863,212],{"class":55},[49,865,662],{"class":644},[49,867,801],{"class":55},[49,869,272],{"class":804},[49,871,808],{"class":141},[49,873,874],{"class":141}," !",[49,876,877],{"class":76},"matches",[49,879,831],{"class":55},[49,881,882],{"class":51,"line":252},[49,883,836],{"class":55},[49,885,886],{"class":51,"line":257},[49,887,187],{"class":55},[49,889,890],{"class":51,"line":486},[49,891,260],{"class":55},[13,893,894,895,897,898,900,901,903,904,907,908,910,911,913,914,917,918,917,921,924],{},"上边的",[17,896,793],{},"方法能够对参数的变化进行检测，如果",[17,899,311],{},"或者",[17,902,317],{},"的值发生变化，就会触发",[17,905,906],{},"pruneCache","函数，不过筛选的条件需要根据",[17,909,877],{},"函数的返回值来决定，",[17,912,877],{},"函数接收三种类型的参数",[17,915,916],{},"string","、",[17,919,920],{},"RegExp",[17,922,923],{},"Array","，用以决定是否进行缓存。",[40,926,928],{"className":132,"code":927,"language":134,"meta":45,"style":45},"function matches (pattern: string | RegExp | Array\u003Cstring>, name: string): boolean {\n    if (Array.isArray(pattern)) {\n        return pattern.indexOf(name) > -1\n    } else if (typeof pattern === 'string') {\n        return pattern.split(',').indexOf(name) > -1\n    } else if (isRegExp(pattern)) {\n        return pattern.test(name)\n    }\n    \u002F* istanbul ignore next *\u002F\n    return false\n}\n",[17,929,930,981,995,1017,1045,1072,1087,1099,1104,1109,1117],{"__ignoreMap":45},[49,931,932,934,936,939,942,944,947,950,953,955,958,960,962,965,967,969,971,974,976,979],{"class":51,"line":52},[49,933,159],{"class":141},[49,935,828],{"class":76},[49,937,938],{"class":55}," (",[49,940,941],{"class":804},"pattern",[49,943,648],{"class":141},[49,945,946],{"class":644}," string",[49,948,949],{"class":141}," |",[49,951,952],{"class":76}," RegExp",[49,954,949],{"class":141},[49,956,957],{"class":76}," Array",[49,959,56],{"class":55},[49,961,916],{"class":644},[49,963,964],{"class":55},">, ",[49,966,272],{"class":804},[49,968,648],{"class":141},[49,970,946],{"class":644},[49,972,973],{"class":55},")",[49,975,648],{"class":141},[49,977,978],{"class":644}," boolean",[49,980,148],{"class":55},[49,982,983,986,989,992],{"class":51,"line":66},[49,984,985],{"class":141},"    if",[49,987,988],{"class":55}," (Array.",[49,990,991],{"class":76},"isArray",[49,993,994],{"class":55},"(pattern)) {\n",[49,996,997,999,1002,1005,1008,1011,1014],{"class":51,"line":102},[49,998,167],{"class":141},[49,1000,1001],{"class":55}," pattern.",[49,1003,1004],{"class":76},"indexOf",[49,1006,1007],{"class":55},"(name) ",[49,1009,1010],{"class":141},">",[49,1012,1013],{"class":141}," -",[49,1015,1016],{"class":644},"1\n",[49,1018,1019,1022,1025,1028,1030,1033,1036,1039,1042],{"class":51,"line":172},[49,1020,1021],{"class":55},"    } ",[49,1023,1024],{"class":141},"else",[49,1026,1027],{"class":141}," if",[49,1029,938],{"class":55},[49,1031,1032],{"class":141},"typeof",[49,1034,1035],{"class":55}," pattern ",[49,1037,1038],{"class":141},"===",[49,1040,1041],{"class":83}," 'string'",[49,1043,1044],{"class":55},") {\n",[49,1046,1047,1049,1051,1054,1056,1059,1062,1064,1066,1068,1070],{"class":51,"line":178},[49,1048,167],{"class":141},[49,1050,1001],{"class":55},[49,1052,1053],{"class":76},"split",[49,1055,212],{"class":55},[49,1057,1058],{"class":83},"','",[49,1060,1061],{"class":55},").",[49,1063,1004],{"class":76},[49,1065,1007],{"class":55},[49,1067,1010],{"class":141},[49,1069,1013],{"class":141},[49,1071,1016],{"class":644},[49,1073,1074,1076,1078,1080,1082,1085],{"class":51,"line":184},[49,1075,1021],{"class":55},[49,1077,1024],{"class":141},[49,1079,1027],{"class":141},[49,1081,938],{"class":55},[49,1083,1084],{"class":76},"isRegExp",[49,1086,994],{"class":55},[49,1088,1089,1091,1093,1096],{"class":51,"line":190},[49,1090,167],{"class":141},[49,1092,1001],{"class":55},[49,1094,1095],{"class":76},"test",[49,1097,1098],{"class":55},"(name)\n",[49,1100,1101],{"class":51,"line":203},[49,1102,1103],{"class":55},"    }\n",[49,1105,1106],{"class":51,"line":221},[49,1107,1108],{"class":343},"    \u002F* istanbul ignore next *\u002F\n",[49,1110,1111,1114],{"class":51,"line":226},[49,1112,1113],{"class":141},"    return",[49,1115,1116],{"class":644}," false\n",[49,1118,1119],{"class":51,"line":238},[49,1120,260],{"class":55},[13,1122,1123,1125,1126,1129,1130,1133,1134,688],{},[17,1124,906],{},"函数用以修建不符合条件的",[17,1127,1128],{},"key","值，每当过滤条件改变，都需要调用",[17,1131,1132],{},"pruneCacheEntry","方法从已有的缓存中修建不符合条件的",[17,1135,1128],{},[40,1137,1139],{"className":132,"code":1138,"language":134,"meta":45,"style":45},"function pruneCache (keepAliveInstance: any, filter: Function) {\n    const { cache, keys, _vnode } = keepAliveInstance\n    for (const key in cache) {\n        const cachedNode: ?VNode = cache[key]\n        if (cachedNode) {\n            const name: ?string = getComponentName(cachedNode.componentOptions)\n            if (name && !filter(name)) {\n                pruneCacheEntry(cache, key, keys, _vnode)\n            }\n        }\n    }\n}\n\nfunction pruneCacheEntry (\n    cache: VNodeCache,\n    key: string,\n    keys: Array\u003Cstring>,\n    current?: VNode\n) {\n    const cached = cache[key]\n    if (cached && (!current || cached.tag !== current.tag)) {\n        cached.componentInstance.$destroy()\n    }\n    cache[key] = null\n    remove(keys, key)\n}\n",[17,1140,1141,1170,1197,1215,1236,1244,1266,1284,1292,1297,1301,1305,1309,1313,1323,1336,1347,1363,1374,1378,1389,1418,1429,1433,1443,1452],{"__ignoreMap":45},[49,1142,1143,1145,1148,1150,1153,1155,1158,1160,1163,1165,1168],{"class":51,"line":52},[49,1144,159],{"class":141},[49,1146,1147],{"class":76}," pruneCache",[49,1149,938],{"class":55},[49,1151,1152],{"class":804},"keepAliveInstance",[49,1154,648],{"class":141},[49,1156,1157],{"class":644}," any",[49,1159,801],{"class":55},[49,1161,1162],{"class":76},"filter",[49,1164,648],{"class":141},[49,1166,1167],{"class":76}," Function",[49,1169,1044],{"class":55},[49,1171,1172,1175,1178,1180,1182,1184,1186,1189,1192,1194],{"class":51,"line":66},[49,1173,1174],{"class":141},"    const",[49,1176,1177],{"class":55}," { ",[49,1179,702],{"class":644},[49,1181,801],{"class":55},[49,1183,705],{"class":644},[49,1185,801],{"class":55},[49,1187,1188],{"class":644},"_vnode",[49,1190,1191],{"class":55}," } ",[49,1193,80],{"class":141},[49,1195,1196],{"class":55}," keepAliveInstance\n",[49,1198,1199,1202,1204,1206,1209,1212],{"class":51,"line":102},[49,1200,1201],{"class":141},"    for",[49,1203,938],{"class":55},[49,1205,641],{"class":141},[49,1207,1208],{"class":644}," key",[49,1210,1211],{"class":141}," in",[49,1213,1214],{"class":55}," cache) {\n",[49,1216,1217,1220,1223,1225,1228,1231,1233],{"class":51,"line":172},[49,1218,1219],{"class":141},"        const",[49,1221,1222],{"class":644}," cachedNode",[49,1224,648],{"class":141},[49,1226,1227],{"class":141}," ?",[49,1229,1230],{"class":76},"VNode",[49,1232,654],{"class":141},[49,1234,1235],{"class":55}," cache[key]\n",[49,1237,1238,1241],{"class":51,"line":178},[49,1239,1240],{"class":141},"        if",[49,1242,1243],{"class":55}," (cachedNode) {\n",[49,1245,1246,1249,1252,1254,1256,1258,1260,1263],{"class":51,"line":184},[49,1247,1248],{"class":141},"            const",[49,1250,1251],{"class":644}," name",[49,1253,648],{"class":141},[49,1255,1227],{"class":141},[49,1257,916],{"class":644},[49,1259,654],{"class":141},[49,1261,1262],{"class":76}," getComponentName",[49,1264,1265],{"class":55},"(cachedNode.componentOptions)\n",[49,1267,1268,1271,1274,1277,1279,1281],{"class":51,"line":190},[49,1269,1270],{"class":141},"            if",[49,1272,1273],{"class":55}," (name ",[49,1275,1276],{"class":141},"&&",[49,1278,874],{"class":141},[49,1280,1162],{"class":76},[49,1282,1283],{"class":55},"(name)) {\n",[49,1285,1286,1289],{"class":51,"line":203},[49,1287,1288],{"class":76},"                pruneCacheEntry",[49,1290,1291],{"class":55},"(cache, key, keys, _vnode)\n",[49,1293,1294],{"class":51,"line":221},[49,1295,1296],{"class":55},"            }\n",[49,1298,1299],{"class":51,"line":226},[49,1300,181],{"class":55},[49,1302,1303],{"class":51,"line":238},[49,1304,1103],{"class":55},[49,1306,1307],{"class":51,"line":252},[49,1308,260],{"class":55},[49,1310,1311],{"class":51,"line":257},[49,1312,394],{"emptyLinePlaceholder":393},[49,1314,1315,1317,1320],{"class":51,"line":486},[49,1316,159],{"class":141},[49,1318,1319],{"class":76}," pruneCacheEntry",[49,1321,1322],{"class":55}," (\n",[49,1324,1325,1328,1330,1333],{"class":51,"line":495},[49,1326,1327],{"class":804},"    cache",[49,1329,648],{"class":141},[49,1331,1332],{"class":76}," VNodeCache",[49,1334,1335],{"class":55},",\n",[49,1337,1338,1341,1343,1345],{"class":51,"line":500},[49,1339,1340],{"class":804},"    key",[49,1342,648],{"class":141},[49,1344,946],{"class":644},[49,1346,1335],{"class":55},[49,1348,1349,1352,1354,1356,1358,1360],{"class":51,"line":506},[49,1350,1351],{"class":804},"    keys",[49,1353,648],{"class":141},[49,1355,957],{"class":76},[49,1357,56],{"class":55},[49,1359,916],{"class":644},[49,1361,1362],{"class":55},">,\n",[49,1364,1365,1368,1371],{"class":51,"line":522},[49,1366,1367],{"class":804},"    current",[49,1369,1370],{"class":141},"?:",[49,1372,1373],{"class":76}," VNode\n",[49,1375,1376],{"class":51,"line":541},[49,1377,1044],{"class":55},[49,1379,1380,1382,1385,1387],{"class":51,"line":550},[49,1381,1174],{"class":141},[49,1383,1384],{"class":644}," cached",[49,1386,654],{"class":141},[49,1388,1235],{"class":55},[49,1390,1391,1393,1396,1398,1400,1403,1406,1409,1412,1415],{"class":51,"line":555},[49,1392,985],{"class":141},[49,1394,1395],{"class":55}," (cached ",[49,1397,1276],{"class":141},[49,1399,938],{"class":55},[49,1401,1402],{"class":141},"!",[49,1404,1405],{"class":55},"current ",[49,1407,1408],{"class":141},"||",[49,1410,1411],{"class":55}," cached.tag ",[49,1413,1414],{"class":141},"!==",[49,1416,1417],{"class":55}," current.tag)) {\n",[49,1419,1420,1423,1426],{"class":51,"line":561},[49,1421,1422],{"class":55},"        cached.componentInstance.",[49,1424,1425],{"class":76},"$destroy",[49,1427,1428],{"class":55},"()\n",[49,1430,1431],{"class":51,"line":578},[49,1432,1103],{"class":55},[49,1434,1435,1438,1440],{"class":51,"line":597},[49,1436,1437],{"class":55},"    cache[key] ",[49,1439,80],{"class":141},[49,1441,1442],{"class":644}," null\n",[49,1444,1446,1449],{"class":51,"line":1445},25,[49,1447,1448],{"class":76},"    remove",[49,1450,1451],{"class":55},"(keys, key)\n",[49,1453,1455],{"class":51,"line":1454},26,[49,1456,260],{"class":55},[13,1458,1459,1460,1462,1463,1465,1466,1468,1469,1471,1472,1475],{},"在每次渲染即",[17,1461,623],{},"时，首先获取第一个子组件，之后便是获取子组件的配置信息，获取其信息，判断该组件在渲染之前是否符合过滤条件，不需要缓存的便直接返回该组件，符合条件的直接将该组件实例从缓存中取出，并调整该组件在",[17,1464,705],{},"数组中的位置，将其放置于最后，如果缓存中没有该组件，那么将其加入缓存，并且定义了",[17,1467,332],{},"并且缓存组件数量如果超出",[17,1470,332],{},"定义的值则将第一个缓存的",[17,1473,1474],{},"vnode","移除，之后返回组件并渲染。",[40,1477,1479],{"className":132,"code":1478,"language":134,"meta":45,"style":45},"export default {\n  render () {\n    const slot = this.$slots.default\n    const vnode: VNode = getFirstComponentChild(slot)\n    const componentOptions: ?VNodeComponentOptions = vnode && vnode.componentOptions\n    if (componentOptions) {\n      \u002F\u002F check pattern\n      const name: ?string = getComponentName(componentOptions)\n      const { include, exclude } = this\n      if (\n        \u002F\u002F not included\n        (include && (!name || !matches(include, name))) ||\n        \u002F\u002F excluded\n        (exclude && name && matches(exclude, name))\n      ) {\n        return vnode\n      }\n\n      const { cache, keys } = this\n      const key: ?string = vnode.key == null\n        \u002F\u002F same constructor may get registered as different local components\n        \u002F\u002F so cid alone is not enough (#3269)\n        ? componentOptions.Ctor.cid + (componentOptions.tag ? `::${componentOptions.tag}` : '')\n        : vnode.key\n      if (cache[key]) {\n        vnode.componentInstance = cache[key].componentInstance\n        \u002F\u002F make current key freshest\n        remove(keys, key)\n        keys.push(key)\n      } else {\n        cache[key] = vnode\n        keys.push(key)\n        \u002F\u002F prune oldest entry\n        if (this.max && keys.length > parseInt(this.max)) {\n          pruneCacheEntry(cache, keys[0], keys, this._vnode)\n        }\n      }\n\n      vnode.data.keepAlive = true\n    }\n    return vnode || (slot && slot[0])\n  }\n}\n",[17,1480,1481,1489,1496,1511,1528,1552,1559,1564,1584,1603,1610,1615,1641,1646,1663,1668,1675,1680,1684,1702,1724,1729,1734,1773,1781,1788,1798,1804,1812,1824,1834,1844,1853,1859,1892,1912,1917,1922,1927,1938,1943,1965,1971],{"__ignoreMap":45},[49,1482,1483,1485,1487],{"class":51,"line":52},[49,1484,142],{"class":141},[49,1486,145],{"class":141},[49,1488,148],{"class":55},[49,1490,1491,1494],{"class":51,"line":66},[49,1492,1493],{"class":76},"  render",[49,1495,736],{"class":55},[49,1497,1498,1500,1503,1505,1508],{"class":51,"line":102},[49,1499,1174],{"class":141},[49,1501,1502],{"class":644}," slot",[49,1504,654],{"class":141},[49,1506,1507],{"class":644}," this",[49,1509,1510],{"class":55},".$slots.default\n",[49,1512,1513,1515,1517,1519,1521,1523,1525],{"class":51,"line":172},[49,1514,1174],{"class":141},[49,1516,645],{"class":644},[49,1518,648],{"class":141},[49,1520,651],{"class":76},[49,1522,654],{"class":141},[49,1524,657],{"class":76},[49,1526,1527],{"class":55},"(slot)\n",[49,1529,1530,1532,1535,1537,1539,1542,1544,1547,1549],{"class":51,"line":178},[49,1531,1174],{"class":141},[49,1533,1534],{"class":644}," componentOptions",[49,1536,648],{"class":141},[49,1538,1227],{"class":141},[49,1540,1541],{"class":76},"VNodeComponentOptions",[49,1543,654],{"class":141},[49,1545,1546],{"class":55}," vnode ",[49,1548,1276],{"class":141},[49,1550,1551],{"class":55}," vnode.componentOptions\n",[49,1553,1554,1556],{"class":51,"line":184},[49,1555,985],{"class":141},[49,1557,1558],{"class":55}," (componentOptions) {\n",[49,1560,1561],{"class":51,"line":190},[49,1562,1563],{"class":343},"      \u002F\u002F check pattern\n",[49,1565,1566,1569,1571,1573,1575,1577,1579,1581],{"class":51,"line":203},[49,1567,1568],{"class":141},"      const",[49,1570,1251],{"class":644},[49,1572,648],{"class":141},[49,1574,1227],{"class":141},[49,1576,916],{"class":644},[49,1578,654],{"class":141},[49,1580,1262],{"class":76},[49,1582,1583],{"class":55},"(componentOptions)\n",[49,1585,1586,1588,1590,1592,1594,1596,1598,1600],{"class":51,"line":221},[49,1587,1568],{"class":141},[49,1589,1177],{"class":55},[49,1591,311],{"class":644},[49,1593,801],{"class":55},[49,1595,317],{"class":644},[49,1597,1191],{"class":55},[49,1599,80],{"class":141},[49,1601,1602],{"class":644}," this\n",[49,1604,1605,1608],{"class":51,"line":226},[49,1606,1607],{"class":141},"      if",[49,1609,1322],{"class":55},[49,1611,1612],{"class":51,"line":238},[49,1613,1614],{"class":343},"        \u002F\u002F not included\n",[49,1616,1617,1620,1622,1624,1626,1629,1631,1633,1635,1638],{"class":51,"line":252},[49,1618,1619],{"class":55},"        (include ",[49,1621,1276],{"class":141},[49,1623,938],{"class":55},[49,1625,1402],{"class":141},[49,1627,1628],{"class":55},"name ",[49,1630,1408],{"class":141},[49,1632,874],{"class":141},[49,1634,877],{"class":76},[49,1636,1637],{"class":55},"(include, name))) ",[49,1639,1640],{"class":141},"||\n",[49,1642,1643],{"class":51,"line":257},[49,1644,1645],{"class":343},"        \u002F\u002F excluded\n",[49,1647,1648,1651,1653,1656,1658,1660],{"class":51,"line":486},[49,1649,1650],{"class":55},"        (exclude ",[49,1652,1276],{"class":141},[49,1654,1655],{"class":55}," name ",[49,1657,1276],{"class":141},[49,1659,828],{"class":76},[49,1661,1662],{"class":55},"(exclude, name))\n",[49,1664,1665],{"class":51,"line":495},[49,1666,1667],{"class":55},"      ) {\n",[49,1669,1670,1672],{"class":51,"line":500},[49,1671,167],{"class":141},[49,1673,1674],{"class":55}," vnode\n",[49,1676,1677],{"class":51,"line":506},[49,1678,1679],{"class":55},"      }\n",[49,1681,1682],{"class":51,"line":522},[49,1683,394],{"emptyLinePlaceholder":393},[49,1685,1686,1688,1690,1692,1694,1696,1698,1700],{"class":51,"line":541},[49,1687,1568],{"class":141},[49,1689,1177],{"class":55},[49,1691,702],{"class":644},[49,1693,801],{"class":55},[49,1695,705],{"class":644},[49,1697,1191],{"class":55},[49,1699,80],{"class":141},[49,1701,1602],{"class":644},[49,1703,1704,1706,1708,1710,1712,1714,1716,1719,1722],{"class":51,"line":550},[49,1705,1568],{"class":141},[49,1707,1208],{"class":644},[49,1709,648],{"class":141},[49,1711,1227],{"class":141},[49,1713,916],{"class":644},[49,1715,654],{"class":141},[49,1717,1718],{"class":55}," vnode.key ",[49,1720,1721],{"class":141},"==",[49,1723,1442],{"class":644},[49,1725,1726],{"class":51,"line":555},[49,1727,1728],{"class":343},"        \u002F\u002F same constructor may get registered as different local components\n",[49,1730,1731],{"class":51,"line":561},[49,1732,1733],{"class":343},"        \u002F\u002F so cid alone is not enough (#3269)\n",[49,1735,1736,1739,1742,1745,1748,1751,1754,1757,1759,1762,1765,1768,1771],{"class":51,"line":578},[49,1737,1738],{"class":141},"        ?",[49,1740,1741],{"class":55}," componentOptions.Ctor.cid ",[49,1743,1744],{"class":141},"+",[49,1746,1747],{"class":55}," (componentOptions.tag ",[49,1749,1750],{"class":141},"?",[49,1752,1753],{"class":83}," `::${",[49,1755,1756],{"class":55},"componentOptions",[49,1758,790],{"class":83},[49,1760,1761],{"class":55},"tag",[49,1763,1764],{"class":83},"}`",[49,1766,1767],{"class":141}," :",[49,1769,1770],{"class":83}," ''",[49,1772,760],{"class":55},[49,1774,1775,1778],{"class":51,"line":597},[49,1776,1777],{"class":141},"        :",[49,1779,1780],{"class":55}," vnode.key\n",[49,1782,1783,1785],{"class":51,"line":1445},[49,1784,1607],{"class":141},[49,1786,1787],{"class":55}," (cache[key]) {\n",[49,1789,1790,1793,1795],{"class":51,"line":1454},[49,1791,1792],{"class":55},"        vnode.componentInstance ",[49,1794,80],{"class":141},[49,1796,1797],{"class":55}," cache[key].componentInstance\n",[49,1799,1801],{"class":51,"line":1800},27,[49,1802,1803],{"class":343},"        \u002F\u002F make current key freshest\n",[49,1805,1807,1810],{"class":51,"line":1806},28,[49,1808,1809],{"class":76},"        remove",[49,1811,1451],{"class":55},[49,1813,1815,1818,1821],{"class":51,"line":1814},29,[49,1816,1817],{"class":55},"        keys.",[49,1819,1820],{"class":76},"push",[49,1822,1823],{"class":55},"(key)\n",[49,1825,1827,1830,1832],{"class":51,"line":1826},30,[49,1828,1829],{"class":55},"      } ",[49,1831,1024],{"class":141},[49,1833,148],{"class":55},[49,1835,1837,1840,1842],{"class":51,"line":1836},31,[49,1838,1839],{"class":55},"        cache[key] ",[49,1841,80],{"class":141},[49,1843,1674],{"class":55},[49,1845,1847,1849,1851],{"class":51,"line":1846},32,[49,1848,1817],{"class":55},[49,1850,1820],{"class":76},[49,1852,1823],{"class":55},[49,1854,1856],{"class":51,"line":1855},33,[49,1857,1858],{"class":343},"        \u002F\u002F prune oldest entry\n",[49,1860,1862,1864,1866,1868,1871,1873,1876,1879,1882,1885,1887,1889],{"class":51,"line":1861},34,[49,1863,1240],{"class":141},[49,1865,938],{"class":55},[49,1867,662],{"class":644},[49,1869,1870],{"class":55},".max ",[49,1872,1276],{"class":141},[49,1874,1875],{"class":55}," keys.",[49,1877,1878],{"class":644},"length",[49,1880,1881],{"class":141}," >",[49,1883,1884],{"class":76}," parseInt",[49,1886,212],{"class":55},[49,1888,662],{"class":644},[49,1890,1891],{"class":55},".max)) {\n",[49,1893,1895,1898,1901,1904,1907,1909],{"class":51,"line":1894},35,[49,1896,1897],{"class":76},"          pruneCacheEntry",[49,1899,1900],{"class":55},"(cache, keys[",[49,1902,1903],{"class":644},"0",[49,1905,1906],{"class":55},"], keys, ",[49,1908,662],{"class":644},[49,1910,1911],{"class":55},"._vnode)\n",[49,1913,1915],{"class":51,"line":1914},36,[49,1916,181],{"class":55},[49,1918,1920],{"class":51,"line":1919},37,[49,1921,1679],{"class":55},[49,1923,1925],{"class":51,"line":1924},38,[49,1926,394],{"emptyLinePlaceholder":393},[49,1928,1930,1933,1935],{"class":51,"line":1929},39,[49,1931,1932],{"class":55},"      vnode.data.keepAlive ",[49,1934,80],{"class":141},[49,1936,1937],{"class":644}," true\n",[49,1939,1941],{"class":51,"line":1940},40,[49,1942,1103],{"class":55},[49,1944,1946,1948,1950,1952,1955,1957,1960,1962],{"class":51,"line":1945},41,[49,1947,1113],{"class":141},[49,1949,1546],{"class":55},[49,1951,1408],{"class":141},[49,1953,1954],{"class":55}," (slot ",[49,1956,1276],{"class":141},[49,1958,1959],{"class":55}," slot[",[49,1961,1903],{"class":644},[49,1963,1964],{"class":55},"])\n",[49,1966,1968],{"class":51,"line":1967},42,[49,1969,1970],{"class":55},"  }\n",[49,1972,1974],{"class":51,"line":1973},43,[49,1975,260],{"class":55},[22,1977,1978],{"id":1978},"每日一题",[40,1980,1985],{"className":1981,"code":1983,"language":1984},[1982],"language-text","https:\u002F\u002Fgithub.com\u002FWindrunnerMax\u002FEveryDay\n","text",[17,1986,1983],{"__ignoreMap":45},[22,1988,1989],{"id":1989},"参考",[40,1991,1994],{"className":1992,"code":1993,"language":1984},[1982],"https:\u002F\u002Fzhuanlan.zhihu.com\u002Fp\u002F85120544\nhttps:\u002F\u002Fcn.vuejs.org\u002Fv2\u002Fapi\u002F#keep-alive\nhttps:\u002F\u002Fjuejin.im\u002Fpost\u002F6844904082038063111\nhttps:\u002F\u002Fjuejin.im\u002Fpost\u002F6844903919273918477\nhttps:\u002F\u002Fjuejin.im\u002Fpost\u002F6844904099272458253\nhttps:\u002F\u002Fjuejin.im\u002Fpost\u002F6844904160962281479\nhttps:\u002F\u002Ffullstackbb.com\u002Fvue\u002Fdeep-into-keep-alive-in-vuejs\u002F\nhttps:\u002F\u002Fblog.liuyunzhuge.com\u002F2020\u002F03\u002F20\u002F%E7%90%86%E8%A7%A3vue%E4%B8%ADkeep-alive%E7%BB%84%E4%BB%B6%E6%BA%90%E7%A0%81\u002F\n",[17,1995,1993],{"__ignoreMap":45},[1997,1998,1999],"style",{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .s7hpK, html code.shiki .s7hpK{--shiki-default:#B31D28;--shiki-default-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":45,"searchDepth":66,"depth":66,"links":2001},[2002,2003,2004,2005],{"id":24,"depth":66,"text":24},{"id":668,"depth":66,"text":668},{"id":1978,"depth":66,"text":1978},{"id":1989,"depth":66,"text":1989},"当在组件之间切换的时候，有时会想保持这些组件的状态，以避免反复重渲染导致的性能等问题，使用\u003Ckeep-alive>包裹动态组件时，会缓存不活动的组件实例，而不是销毁它们。","md",{},"\u002Fvue\u002F对keep-alive组件的理解",{"title":5,"description":2006},"Vue\u002F对keep-alive组件的理解","UKnBxNDxHAXAiJ_aW01pFbI3JHwnECpEDcn3u61iuk4",1791042472378]