suchen
HeimWeb-Frontendjs-TutorialReduzieren Sie die Anzahl der Anfragen an den Server durch Keep-Alive von Vue

In diesem Artikel wird hauptsächlich die Verwendung von Keep-Alive vorgestellt, um die Anzahl der Anfragen an den Server zu reduzieren. Der Artikel stellt auch die Punkte vor, die beim Aktivieren von Keep-Alive im Vue-Routing zu beachten sind dazu

Sehen wir uns an, wie man die Anzahl der Anfragen an den Server durch Keep-Alive von Vue reduzieren kann

VUE2.0 bietet eine Keep-Alive-Methode, die verwendet werden kann um Komponenten zwischenzuspeichern und das mehrfache Laden entsprechender Komponenten zu vermeiden. Reduzieren Sie den Leistungsverbrauch. Beispielsweise wurden die Daten einer Seite, darunter Bilder, Text usw., vom Benutzer geladen und der Benutzer springt dann durch Anklicken auf eine andere Oberfläche. Kehren Sie dann von einer anderen Schnittstelle zur ursprünglichen Schnittstelle zurück. Wenn es nicht gesetzt ist, werden die Informationen der ursprünglichen Schnittstelle erneut vom Server angefordert. Das von vue bereitgestellte Keep-Alive kann die angeforderten Daten der Seite speichern, die Anzahl der Anfragen reduzieren und die Benutzererfahrung verbessern.

Cache-Komponenten werden in zwei Typen unterteilt: Komponenten, die die gesamten Seiten der Website zwischenspeichern, und Komponenten, die Teilseiten zwischenspeichern.

1. Alle Seiten zwischenspeichern, geeignet für Situationen, in denen jede Seite eine Anfrage hat. Die Methode lautet wie folgt: Umschließen Sie die Router-Ansicht, die zwischengespeichert werden muss, mit dem Keep-Alive-Tag.

 <keep-alive>
      <router-view></router-view>
     </keep-alive>

Durch Schreiben der ersten Triggeranforderung in den erstellten Hook kann Caching erreicht werden. Wenn Sie beispielsweise von der Listenseite zur Detailseite wechseln, befinden Sie sich bei Ihrer Rückkehr immer noch auf der Originalseite.

2. Das Zwischenspeichern einiger Komponenten oder Seiten kann durch die Verwendung des router.meta-Attributs durch Beurteilung erreicht werden. Die Methode ist wie folgt:                                                                                                                                                                                                                                                                                      Der Name impliziert die Bedeutung, „einschließen“ bedeutet „einschließen“ und „ausschließen“ bedeutet „ausschließen“. Hier müssen Sie den Namen der Komponente zum Festlegen verwenden, daher muss der Name hinzugefügt werden. Das Hinzufügen der Komponenten a und b erfordert Caching, während die Komponenten c und d kein Caching erfordern. Es lautet wie folgt:

<keep-alive v-if="$route.meta.keepAlive">
      <router-view></router-view>
     </keep-alive>
     <router-view v-if="! $route.meta.keepAlive"></router-view>

Die Optimierung von Vue-Projekten kann auch durch das Laden von Komponenten bei Bedarf erreicht werden, genau wie das verzögerte Laden von Bildern, wenn der Kunde diese Bilder überhaupt nicht sieht, wir aber Öffnen Sie die Seite, wenn alles geladen ist. Dadurch wird die Anforderungszeit erheblich verlängert und die Benutzererfahrung verringert. Lazy Loading wird auf vielen Websites verwendet, z. B. auf Shopping-Websites wie Taobao, JD.com usw., die viele Bildlinks haben. Wenn Sie schnell nach unten scrollen, wird möglicherweise der Bildladezustand angezeigt.

Ergänzung:

Zu beachtende Punkte, wenn Vue-Routing Keep-Alive aktiviert

Dies Dies ist keine Geschäftsanforderung, aber da jedes Mal, wenn ich die Seite betrete, das DOM neu gerendert wird und dann die Daten abgerufen werden, um das DOM zu aktualisieren, halte ich es als Front-End-Ingenieur für notwendig, die Ladelogik zu optimieren . Vue bietet zufällig die Keep-Alive-Funktion, also habe ich es ausprobiert. Natürlich wird nichts reibungslos verlaufen, und Unebenheiten und Unebenheiten auf der Straße sind unvermeidlich. Deshalb schreibe ich die hier aufgetretenen Probleme auf und hoffe, dass die Leute, die diesen Artikel lesen, helfen können. ps: Das ist nicht schwierig. HTML-Teil:

 routers:[
        { path: &#39;/home&#39;,
          name: home,
          meta:{keepAlive: true}  // 设置为true表示需要缓存,不设置或者false表示不需要缓存          }
          ]

...1. In welchem ​​Stadium werden die Daten abgerufen

Der Seitenlebenszyklus-Hook ist wie in dargestellt der Code oben, Diese vier sind die am häufigsten verwendeten Teile. In diesem Teil ist zu beachten, dass bei der Einführung von Keep-Alive beim ersten Aufrufen der Seite die Auslösesequenz des Hooks erstellt->gemountet->aktiviert und beim Beenden deaktiviert wird. Bei erneuter Eingabe (vorwärts oder rückwärts) wird nur aktiviert ausgelöst. Wir wissen, dass die Seitenvorlage nach dem Keep-Alive zum ersten Mal initialisiert und in ein HTML-Fragment analysiert wird. Bei der erneuten Eingabe werden die Daten im Speicher nicht erneut analysiert, sondern gelesen. Das heißt, es wird nur verwendet, wenn sich die Daten ändern. Daher sollten auch die beim Betreten der Seite erfassten Daten aktiviert werden. Nachdem die Daten heruntergeladen wurden, sollte auch die manuelle Bedienung des DOM aktiviert werden, damit sie wirksam wird.

Sie sollten also eine Kopie des Datenerfassungscodes im aktivierten Zustand belassen oder den erstellten Teil weglassen und den erstellten Code direkt in den aktivierten Zustand übertragen.

2. Die Daten in $route können nicht gelesen werden

Die vorherige Schreibmethode bestand darin, die erforderlichen $route-Daten in Daten zuzuweisen, um die Verwendung anderer Methoden zu erleichtern. Aber nach der Verwendung von Keep-Alive müssen die Daten auf der Seite eingegeben und erneut aktiviert werden, um den Zweck der Aktualisierung zu erreichen. Definieren Sie eine initData-Methode und starten Sie sie dann aktiviert.

  <keep-alive include="a,b">
      <component></component>
     </keep-alive>  
     <keep-alive exclude="c,d">
      <component></component>
     </keep-alive>

3. Ändern Sie die URL auf der aktuellen Seite dynamisch

需求描述:当页面在进行轮播操作的时候希望能记录当前显示的轮播ID(activeIndex)。当进入下一个页面再返回的时候能记住之前的选择,将轮播打到之前的ID位置。所以我想将这部分信息固化在url中,轮播发生变化时,修改URL。这样实现比较符最小修改原则,其余页面不用变动。

之前的写法是将activeIndex放在 $route 的query中,当轮播后,将

activeIndex的值存入 $route.query.activeIndex 中,然后 $router.replace 当前路由,理论上应该能发生变化,但实际没有。

查看文档后说, $route 是只读模式。当然,对象部分是他监管不到的,我修改了并不是正统的做法。

神奇的地方来了:当我将activeIndex记在params中,轮播变动修改params中的参数,然后 $router.replace 当前路由,却能发生对应的变化。代码如下:

let swiperInstance = new Swiper(&#39;#swiper&#39;, {
 pagination: &#39;.swiper-pagination&#39;,
 paginationClickable: false,
 initialSlide: activeIndex,
 onSlideChangeEnd: function (swiper) {
  let _activeIndex = swiper.activeIndex;
  _this.$route.params.activeIndex = _activeIndex;
  // $router我放到了window上方便调用
  window.$router.replace({
   name: _this.$route.name,
   params: _this.$route.params,
   query: _this.$route.query
  });
  // 根据activeIndex,在这里初始化下面显示的数据
  _this.transferDetail = _this.allData.plans[_activeIndex].segments;
  _this.clearBusDetailFoldState();
 }
});

4. 事件如何处理

估计你也能猜到,发生的问题是事件绑定了很多次,比如上传点击input监听change事件,突然显示了多张相同图片的问题。

也就是说,DOM在编译后就缓存在内容中了,如果再次进入还再进行事件绑定初始化则就会发生这个问题。

解决办法:在mounted中绑定事件,因为这个只执行一次,并且DOM已准备好。如果插件绑定后还要再执行一下事件的handler函数的话,那就提取出来,放在activated中执行。比如:根据输入内容自动增长textarea的高度,这部分需要监听textarea的input和change事件,并且页面进入后还要再次执行一次handler函数,更新textarea高度(避免上次输入的影响)。

5. 地图组件处理

想必这是使用 keep-alive 最直接的性能表现。之前是进入地图页面后进行地图渲染+线路标记;现在是清除以前的线路标记绘制新的线路,性能优化可想而知!

我这里使用的是高德地图,在mounted中初始化map,代码示例如下:

export default {
 name: &#39;transferMap&#39;,
 data: function () {
  return {
   map: null,
  }
 },
 methods: {
  initData: function () {},
  searchTransfer: function (type) {},
  // 地图渲染 这个在transfer-map.html中使用
  renderTransferMap: function (transferMap) {}
 },
 mounted: function () {
  this.map = new AMap.Map("container", {
   showBuildingBlock: true,
   animateEnable: true,
   resizeEnable: true,
   zoom: 12 //地图显示的缩放级别
  });
 },
 activated: function () {
  let _this = this;
  _this.initData();
  // 设置title
  setDocumentTitle(&#39;换乘地图&#39;);
  _this.searchTransfer(_this.policyType).then(function (result) {
   // 数据加载完成
   // 换乘地图页面
   let transferMap = result.plans[_this.activeIndex];
   transferMap.origin = result.origin;
   transferMap.destination = result.destination;
   // 填数据
   _this.transferMap = transferMap;
   // 地图渲染
   _this.renderTransferMap(transferMap);
  });
 },
 deactivated: function () {
  // 清理地图之前的标记
  this.map.clearMap();
 },
}

6. document.title修改

这个不是 keep-alive 的问题,不过我也在这里分享下。

问题是,使用下面这段方法,可以修改Title,但是页面来回切换多次后就不生效了,我也不知道为啥,放到setTimeout中就直接不执行。

document.title = '页面名称';下面是使用2种环境的修复方法:

纯js实现

function setDocumentTitle(title) {
 "use strict";
 //以下代码可以解决以上问题,不依赖jq
 setTimeout(function () {
  //利用iframe的onload事件刷新页面
  document.title = title;
  var iframe = document.createElement(&#39;iframe&#39;);
  iframe.src = &#39;/favicon.ico&#39;; // 必须
  iframe.style.visibility = &#39;hidden&#39;;
  iframe.style.width = &#39;1px&#39;;
  iframe.style.height = &#39;1px&#39;;
  iframe.onload = function () {
   setTimeout(function () {
    document.body.removeChild(iframe);
   }, 0);
  };
  document.body.appendChild(iframe);
 }, 0);
}

jQuery/Zepto实现

function setDocumentTitle(title) {
 //需要jQuery
 var $body = $(&#39;body&#39;);
 document.title = title;
 // hack在微信等webview中无法修改document.title的情况
 var $iframe = $(&#39;<iframe src="/favicon.ico"></iframe>&#39;);
 $iframe.on(&#39;load&#39;, function () {
  setTimeout(function () {
   $iframe.off(&#39;load&#39;).remove();
  }, 0);
 }).appendTo($body);
}

上面是我整理给大家的,希望今后会对大家有帮助。

相关文章:

vue 指定组件缓存实例详解

使用JSON格式提交数据到服务端的实例代码

JavaScript动态加载重复绑定问题

Das obige ist der detaillierte Inhalt vonReduzieren Sie die Anzahl der Anfragen an den Server durch Keep-Alive von Vue. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Python vs. JavaScript: Die Lernkurve und BenutzerfreundlichkeitPython vs. JavaScript: Die Lernkurve und BenutzerfreundlichkeitApr 16, 2025 am 12:12 AM

Python eignet sich besser für Anfänger mit einer reibungslosen Lernkurve und einer kurzen Syntax. JavaScript ist für die Front-End-Entwicklung mit einer steilen Lernkurve und einer flexiblen Syntax geeignet. 1. Python-Syntax ist intuitiv und für die Entwicklung von Datenwissenschaften und Back-End-Entwicklung geeignet. 2. JavaScript ist flexibel und in Front-End- und serverseitiger Programmierung weit verbreitet.

Python gegen JavaScript: Community, Bibliotheken und RessourcenPython gegen JavaScript: Community, Bibliotheken und RessourcenApr 15, 2025 am 12:16 AM

Python und JavaScript haben ihre eigenen Vor- und Nachteile in Bezug auf Gemeinschaft, Bibliotheken und Ressourcen. 1) Die Python-Community ist freundlich und für Anfänger geeignet, aber die Front-End-Entwicklungsressourcen sind nicht so reich wie JavaScript. 2) Python ist leistungsstark in Bibliotheken für Datenwissenschaft und maschinelles Lernen, während JavaScript in Bibliotheken und Front-End-Entwicklungsbibliotheken und Frameworks besser ist. 3) Beide haben reichhaltige Lernressourcen, aber Python eignet sich zum Beginn der offiziellen Dokumente, während JavaScript mit Mdnwebdocs besser ist. Die Wahl sollte auf Projektbedürfnissen und persönlichen Interessen beruhen.

Von C/C nach JavaScript: Wie alles funktioniertVon C/C nach JavaScript: Wie alles funktioniertApr 14, 2025 am 12:05 AM

Die Verschiebung von C/C zu JavaScript erfordert die Anpassung an dynamische Typisierung, Müllsammlung und asynchrone Programmierung. 1) C/C ist eine statisch typisierte Sprache, die eine manuelle Speicherverwaltung erfordert, während JavaScript dynamisch eingegeben und die Müllsammlung automatisch verarbeitet wird. 2) C/C muss in den Maschinencode kompiliert werden, während JavaScript eine interpretierte Sprache ist. 3) JavaScript führt Konzepte wie Verschlüsse, Prototypketten und Versprechen ein, die die Flexibilität und asynchrone Programmierfunktionen verbessern.

JavaScript -Engines: Implementierungen vergleichenJavaScript -Engines: Implementierungen vergleichenApr 13, 2025 am 12:05 AM

Unterschiedliche JavaScript -Motoren haben unterschiedliche Auswirkungen beim Analysieren und Ausführen von JavaScript -Code, da sich die Implementierungsprinzipien und Optimierungsstrategien jeder Engine unterscheiden. 1. Lexikalanalyse: Quellcode in die lexikalische Einheit umwandeln. 2. Grammatikanalyse: Erzeugen Sie einen abstrakten Syntaxbaum. 3. Optimierung und Kompilierung: Generieren Sie den Maschinencode über den JIT -Compiler. 4. Führen Sie aus: Führen Sie den Maschinencode aus. V8 Engine optimiert durch sofortige Kompilierung und versteckte Klasse.

Jenseits des Browsers: JavaScript in der realen WeltJenseits des Browsers: JavaScript in der realen WeltApr 12, 2025 am 12:06 AM

Zu den Anwendungen von JavaScript in der realen Welt gehören die serverseitige Programmierung, die Entwicklung mobiler Anwendungen und das Internet der Dinge. Die serverseitige Programmierung wird über node.js realisiert, die für die hohe gleichzeitige Anfrageverarbeitung geeignet sind. 2. Die Entwicklung der mobilen Anwendungen erfolgt durch reaktnative und unterstützt die plattformübergreifende Bereitstellung. 3.. Wird für die Steuerung von IoT-Geräten über die Johnny-Five-Bibliothek verwendet, geeignet für Hardware-Interaktion.

Erstellen einer SaaS-Anwendung mit mehreren Mietern mit Next.js (Backend Integration)Erstellen einer SaaS-Anwendung mit mehreren Mietern mit Next.js (Backend Integration)Apr 11, 2025 am 08:23 AM

Ich habe eine funktionale SaaS-Anwendung mit mehreren Mandanten (eine EdTech-App) mit Ihrem täglichen Tech-Tool erstellt und Sie können dasselbe tun. Was ist eine SaaS-Anwendung mit mehreren Mietern? Mit Multi-Tenant-SaaS-Anwendungen können Sie mehrere Kunden aus einem Sing bedienen

So erstellen Sie eine SaaS-Anwendung mit mehreren Mietern mit Next.js (Frontend Integration)So erstellen Sie eine SaaS-Anwendung mit mehreren Mietern mit Next.js (Frontend Integration)Apr 11, 2025 am 08:22 AM

Dieser Artikel zeigt die Frontend -Integration mit einem Backend, das durch die Genehmigung gesichert ist und eine funktionale edtech SaaS -Anwendung unter Verwendung von Next.js. erstellt. Die Frontend erfasst Benutzerberechtigungen zur Steuerung der UI-Sichtbarkeit und stellt sicher, dass API-Anfragen die Rollenbasis einhalten

JavaScript: Erforschung der Vielseitigkeit einer WebspracheJavaScript: Erforschung der Vielseitigkeit einer WebspracheApr 11, 2025 am 12:01 AM

JavaScript ist die Kernsprache der modernen Webentwicklung und wird für seine Vielfalt und Flexibilität häufig verwendet. 1) Front-End-Entwicklung: Erstellen Sie dynamische Webseiten und einseitige Anwendungen durch DOM-Operationen und moderne Rahmenbedingungen (wie React, Vue.js, Angular). 2) Serverseitige Entwicklung: Node.js verwendet ein nicht blockierendes E/A-Modell, um hohe Parallelitäts- und Echtzeitanwendungen zu verarbeiten. 3) Entwicklung von Mobil- und Desktop-Anwendungen: Die plattformübergreifende Entwicklung wird durch reaktnative und elektronen zur Verbesserung der Entwicklungseffizienz realisiert.

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
4 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
4 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
4 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Chat -Befehle und wie man sie benutzt
4 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

mPDF

mPDF

mPDF ist eine PHP-Bibliothek, die PDF-Dateien aus UTF-8-codiertem HTML generieren kann. Der ursprüngliche Autor, Ian Back, hat mPDF geschrieben, um PDF-Dateien „on the fly“ von seiner Website auszugeben und verschiedene Sprachen zu verarbeiten. Es ist langsamer und erzeugt bei der Verwendung von Unicode-Schriftarten größere Dateien als Originalskripte wie HTML2FPDF, unterstützt aber CSS-Stile usw. und verfügt über viele Verbesserungen. Unterstützt fast alle Sprachen, einschließlich RTL (Arabisch und Hebräisch) und CJK (Chinesisch, Japanisch und Koreanisch). Unterstützt verschachtelte Elemente auf Blockebene (wie P, DIV),

SAP NetWeaver Server-Adapter für Eclipse

SAP NetWeaver Server-Adapter für Eclipse

Integrieren Sie Eclipse mit dem SAP NetWeaver-Anwendungsserver.

WebStorm-Mac-Version

WebStorm-Mac-Version

Nützliche JavaScript-Entwicklungstools

MinGW – Minimalistisches GNU für Windows

MinGW – Minimalistisches GNU für Windows

Dieses Projekt wird derzeit auf osdn.net/projects/mingw migriert. Sie können uns dort weiterhin folgen. MinGW: Eine native Windows-Portierung der GNU Compiler Collection (GCC), frei verteilbare Importbibliotheken und Header-Dateien zum Erstellen nativer Windows-Anwendungen, einschließlich Erweiterungen der MSVC-Laufzeit zur Unterstützung der C99-Funktionalität. Die gesamte MinGW-Software kann auf 64-Bit-Windows-Plattformen ausgeführt werden.

VSCode Windows 64-Bit-Download

VSCode Windows 64-Bit-Download

Ein kostenloser und leistungsstarker IDE-Editor von Microsoft