웹 프론트엔드 JS 튜토리얼 vue에서 제공하는 연결 유지를 통해 서버에 대한 요청 수를 줄입니다.

vue에서 제공하는 연결 유지를 통해 서버에 대한 요청 수를 줄입니다.

May 28, 2018 am 09:50 AM
keep-alive 줄이다 섬기는 사람

이 글에서는 서버에 대한 요청 수를 줄이기 위해 vue에서 제공하는 연결 유지 사용 방법을 주로 소개합니다. 또한 vue 라우팅에서 연결 유지를 켤 때 주의할 사항도 소개합니다.

아래를 살펴보세요. vue에서 제공하는 연결 유지는 서버에 대한 요청 수를 줄여줍니다.

VUE2.0은 구성 요소를 캐시하고 해당 구성 요소를 여러 번 로드하는 것을 방지하고 요청을 줄이는 데 사용할 수 있는 연결 유지 방법을 제공합니다. 성능 소모. 예를 들어, 그림, 텍스트 등을 포함한 페이지의 데이터를 사용자가 로드한 다음 사용자가 이를 클릭하여 다른 인터페이스로 이동합니다. 그런 다음 다른 인터페이스에서 원래 인터페이스로 돌아갑니다. 설정하지 않으면 서버에서 원래 인터페이스의 정보를 다시 요청하게 됩니다. vue에서 제공하는 keep-alive는 페이지에서 요청한 데이터를 저장하고 요청 수를 줄이며 사용자 경험을 향상시킬 수 있습니다.为 캐시 구성 요소는 전체 사이트의 페이지 구성 요소와 페이지의 캐시 부분 구성 요소로 구분됩니다.

1. 모든 페이지를 캐시합니다. 각 페이지에 요청이 있는 상황에 적합합니다. 방법은 다음과 같습니다. 캐시해야 하는 라우터 뷰를 keep-alive 태그로 래핑합니다.

 <keep-alive>
      <router-view></router-view>
     </keep-alive>
로그인 후 복사

                                                                                                   >              캐시되는 것은 생성된 후크에 첫 번째 트리거 요청을 작성하여 실현할 수 있습니다. 예를 들어, 목록 페이지에서 세부정보 페이지로 이동하면 다시 돌아올 때 원래 페이지가 그대로 유지됩니다.

2. 일부 구성요소 또는 페이지를 캐시합니다. 이는 판단을 통해 router.meta 속성을 사용하여 달성할 수 있습니다. 방법은 다음과 같습니다.                                                                                                    ~ 이름은 의미를 내포하고, include는 포함한다는 뜻, 제외한다는 의미는 제외됩니다. 여기서는 컴포넌트의 이름을 이용하여 설정해야 하므로 이름을 추가해야 합니다. 구성 요소 a와 b를 추가하려면 캐싱이 필요하지만 구성 요소 c와 d에는 캐싱이 필요하지 않습니다.

<keep-alive v-if="$route.meta.keepAlive">
      <router-view></router-view>
     </keep-alive>
     <router-view v-if="! $route.meta.keepAlive"></router-view>
로그인 후 복사

고객이 이미지를 전혀 볼 수 없지만 열 때 이미지를 모두 로드하는 것처럼 Vue 프로젝트 최적화는 요청 시 구성 요소 로드를 통해 달성할 수도 있습니다. 페이지가 완료되면 요청 시간이 크게 늘어나고 사용자 경험이 감소합니다. 지연 로딩은 Taobao 및 JD.com과 같은 많은 웹사이트에서 사용됩니다. 스크롤을 빠르게 아래로 내리면 사진이 로딩되는 것을 볼 수 있습니다.

보충:

Vue 라우팅이 연결 유지를 켤 때 주의할 점이것은 비즈니스 요구 사항은 아니지만 페이지에 들어갈 때마다 DOM이 다시 렌더링되고 DOM을 업데이트하기 위해 데이터를 얻는데, 프론트엔드 엔지니어가 로딩 로직을 최적화해야 한다고 생각합니다. Vue에서 keep-alive 기능을 제공하기 때문에 시도해 보았습니다. 물론 순조롭게 항해하는 일은 없을 것이고, 길에서 부딪히는 부딪힘과 부딪힘은 피할 수 없기 때문에 여기에 부딪힌 문제들을 기록하고 이 글을 읽는 분들이 도움이 되기를 바랍니다. ps. 어렵지 않습니다.

HTML 부분:

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

...1. 데이터를 얻는 단계

페이지 수명 주기 후크 위의 코드에서 볼 수 있듯이 이 네 가지가 가장 일반적으로 사용되는 부분입니다. 이 부분에서는 keep-alive가 도입되면 페이지가 처음 진입할 때 Hook의 트리거 시퀀스가 ​​생성->마운트->활성화되고 종료 시 비활성화가 트리거된다는 점에 유의해야 합니다. 다시 입력(앞으로 또는 뒤로)하면 활성화된 것만 발동됩니다.

우리는 연결 유지 후 페이지 템플릿이 처음으로 초기화되고 HTML 조각으로 구문 분석된 후 다시 구문 분석되지 않고 다시 입력될 때 메모리의 데이터를 읽는다는 것을 알고 있습니다. 데이터가 변경되면 VirtualDOM이 diff 업데이트에 사용됩니다. 따라서 페이지 진입 시 얻은 데이터도 활성화에 배치해야 합니다. 데이터를 다운로드한 후 DOM의 수동 작업도 활성화되어 실행되어야 적용됩니다. 그러므로 활성화된 데이터 획득 코드의 복사본을 남겨두거나, 생성된 부분을 생략하고 생성된 코드를 활성화로 직접 전송해야 합니다.

2. $route의 데이터를 읽을 수 없습니다

기존 작성 방법은 다른 방법을 쉽게 사용할 수 있도록 데이터에 필요한 $route 데이터를 할당하는 것이었지만, keep-alive를 사용한 후에는 데이터를 읽어야 합니다. 활성화된 페이지에 들어가십시오. 다시 획득해야만 업데이트 목적을 달성할 수 있습니다. initData 메소드를 정의한 다음 활성화된 상태에서 시작합니다.

  <keep-alive include="a,b">
      <component></component>
     </keep-alive>  
     <keep-alive exclude="c,d">
      <component></component>
     </keep-alive>
로그인 후 복사

3. 현재 페이지의 URL을 동적으로 수정

需求描述:当页面在进行轮播操作的时候希望能记录当前显示的轮播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动态加载重复绑定问题

위 내용은 vue에서 제공하는 연결 유지를 통해 서버에 대한 요청 수를 줄입니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

eMule 검색이 서버에 연결할 수 없는 문제를 해결하는 방법 eMule 검색이 서버에 연결할 수 없는 문제를 해결하는 방법 Jan 25, 2024 pm 02:45 PM

해결책: 1. eMule 설정을 확인하여 올바른 서버 주소와 포트 번호를 입력했는지 확인하십시오. 2. 네트워크 연결을 확인하고, 컴퓨터가 인터넷에 연결되어 있는지 확인하고, 라우터를 재설정하십시오. 설정이 온라인인 경우 네트워크 연결에 문제가 없으면 서버가 온라인인지 확인해야 합니다. 4. eMule 버전을 업데이트하고 eMule 공식 웹사이트를 방문하여 최신 버전의 eMule 소프트웨어를 다운로드합니다. 5. 도움을 구하세요.

RPC 서버 연결 불가 및 데스크탑 진입 불가 현상에 대한 해결 방법 RPC 서버 연결 불가 및 데스크탑 진입 불가 현상에 대한 해결 방법 Feb 18, 2024 am 10:34 AM

RPC 서버를 사용할 수 없고 데스크톱에서 접속할 수 없는 경우 어떻게 해야 합니까? 최근 몇 년 동안 컴퓨터와 인터넷이 우리 생활 곳곳에 침투했습니다. RPC(원격 프로시저 호출)는 중앙 집중식 컴퓨팅 및 리소스 공유를 위한 기술로서 네트워크 통신에서 중요한 역할을 합니다. 그러나 때때로 RPC 서버를 사용할 수 없어 데스크탑에 들어갈 수 없는 상황이 발생할 수 있습니다. 이 문서에서는 이 문제의 가능한 원인 중 일부를 설명하고 해결 방법을 제공합니다. 먼저 RPC 서버를 사용할 수 없는 이유를 이해해야 합니다. RPC 서버는

CentOS 설치 퓨즈 및 CentOS 설치 서버에 대한 자세한 설명 CentOS 설치 퓨즈 및 CentOS 설치 서버에 대한 자세한 설명 Feb 13, 2024 pm 08:40 PM

LINUX 사용자로서 CentOS에 다양한 소프트웨어와 서버를 설치해야 하는 경우가 많습니다. 이 글에서는 관련 작업을 원활하게 완료할 수 있도록 CentOS에 퓨즈를 설치하고 서버를 설정하는 방법을 자세히 소개합니다. CentOS 설치 퓨즈Fuse는 권한이 없는 사용자가 맞춤형 파일 시스템을 통해 파일 시스템에 액세스하고 작동할 수 있도록 하는 사용자 공간 파일 시스템 프레임워크입니다. CentOS에 퓨즈를 설치하는 것은 매우 간단합니다. 다음 단계를 따르십시오. 1. 터미널을 열고 다음 계정으로 로그인합니다. 루트 사용자. 2. 다음 명령을 사용하여 퓨즈 패키지를 설치합니다. ```yuminstallfuse3. 설치 프로세스 중 프롬프트를 확인하고 'y'를 입력하여 계속합니다. 4. 설치 완료

Dnsmasq를 DHCP 릴레이 서버로 구성하는 방법 Dnsmasq를 DHCP 릴레이 서버로 구성하는 방법 Mar 21, 2024 am 08:50 AM

DHCP 릴레이의 역할은 두 서버가 서로 다른 서브넷에 있더라도 수신된 DHCP 패킷을 네트워크의 다른 DHCP 서버로 전달하는 것입니다. DHCP 릴레이를 사용하면 네트워크 센터에 중앙 집중식 DHCP 서버를 배포하고 이를 사용하여 모든 네트워크 서브넷/VLAN에 IP 주소를 동적으로 할당할 수 있습니다. Dnsmasq는 네트워크에서 동적 호스트 구성을 관리하는 데 도움이 되도록 DHCP 릴레이 서버로 구성할 수 있는 일반적으로 사용되는 DNS 및 DHCP 프로토콜 서버입니다. 이 기사에서는 dnsmasq를 DHCP 릴레이 서버로 구성하는 방법을 보여줍니다. 내용 항목: 네트워크 토폴로지 중앙 집중식 DHCP 서버의 DHCP 릴레이 D에서 고정 IP 주소 구성

PHP를 사용한 IP 프록시 서버 구축을 위한 모범 사례 가이드 PHP를 사용한 IP 프록시 서버 구축을 위한 모범 사례 가이드 Mar 11, 2024 am 08:36 AM

네트워크 데이터 전송에서 IP 프록시 서버는 사용자가 실제 IP 주소를 숨기고 개인정보를 보호하며 액세스 속도를 향상시키는 데 도움을 주는 중요한 역할을 합니다. 이 기사에서는 PHP를 사용하여 IP 프록시 서버를 구축하는 방법에 대한 모범 사례 가이드를 소개하고 구체적인 코드 예제를 제공합니다. IP 프록시 서버란 무엇입니까? IP 프록시 서버는 사용자와 대상 서버 사이에 위치한 중간 서버로서 사용자와 대상 서버 사이의 전송 스테이션 역할을 하며 사용자의 요청과 응답을 전달합니다. IP 프록시 서버를 사용하여

서버 상태를 확인하는 방법 서버 상태를 확인하는 방법 Oct 09, 2023 am 10:10 AM

서버 상태를 보는 방법에는 명령줄 도구, 그래픽 인터페이스 도구, 모니터링 도구, 로그 파일 및 원격 관리 도구가 포함됩니다. 자세한 소개: 1. 명령줄 도구를 사용합니다. Linux 또는 Unix 서버에서는 명령줄 도구를 사용하여 서버 상태를 볼 수 있습니다. 2. 그래픽 인터페이스가 있는 서버 운영 체제의 경우 그래픽을 사용할 수 있습니다. 시스템에서 제공하는 인터페이스 도구를 사용하여 서버 상태를 확인합니다. 3. 모니터링 도구를 사용하여 실시간으로 서버 상태를 모니터링할 수 있습니다.

TFTP 서버를 활성화하는 방법 TFTP 서버를 활성화하는 방법 Oct 18, 2023 am 10:18 AM

TFTP 서버를 시작하는 단계에는 TFTP 서버 소프트웨어 선택, 소프트웨어 다운로드 및 설치, TFTP 서버 구성, 서버 시작 및 테스트가 포함됩니다. 자세한 소개: 1. TFTP 서버 소프트웨어를 선택할 때 먼저 필요에 맞는 TFTP 서버 소프트웨어를 선택해야 합니다. 현재 Tftpd32, PumpKIN, tftp-hpa 등과 같이 선택할 수 있는 TFTP 서버 소프트웨어가 많이 있습니다. 모두 간단하고 사용하기 쉬운 기능과 구성 옵션을 제공합니다. 2. TFTP 서버 소프트웨어 등을 다운로드하고 설치합니다.

에픽서버가 오프라인 상태일 때 게임에 접속할 수 없으면 어떻게 해야 하나요? 에픽게임즈가 오프라인으로 게임에 입장할 수 없는 이유에 대한 해결책 에픽서버가 오프라인 상태일 때 게임에 접속할 수 없으면 어떻게 해야 하나요? 에픽게임즈가 오프라인으로 게임에 입장할 수 없는 이유에 대한 해결책 Mar 13, 2024 pm 04:40 PM

에픽서버가 오프라인 상태일 때 게임에 접속할 수 없으면 어떻게 해야 하나요? 이 문제는 많은 친구들이 겪었을 것입니다. 이 메시지가 나타나면 정품 게임을 시작할 수 없습니다. 이 문제는 일반적으로 네트워크 및 보안 소프트웨어의 간섭으로 인해 발생합니다. 이 문제의 편집자는 어떻게 설명합니까? 저는 여러분과 솔루션을 공유하고 싶습니다. 오늘의 소프트웨어 튜토리얼이 문제 해결에 도움이 되기를 바랍니다. 에픽 서버가 오프라인일 때 게임에 들어갈 수 없는 경우 해결 방법: 1. 게임 플랫폼과 보안 소프트웨어의 방해를 받을 수 있습니다. 2. 두 번째는 네트워크 변동이 너무 심하다는 것입니다. 라우터를 다시 시작하여 작동하는지 확인해보세요. 조건이 괜찮다면 5g 모바일 네트워크를 사용해 작동해 보세요. 3. 그럼 더 있을 수도 있겠네요

See all articles