Tìm nạp trước trong ứng dụng phản ứng tạo bằng Liên kết nhanh

Addy Osmani
Addy Osmani
Anton Karlovskiy
Anton Karlovskiy
Demián Renzulli
Demián Renzulli

Lớp học lập trình này sẽ hướng dẫn bạn cách triển khai thư viện Quicklink (Đường liên kết nhanh) trong bản minh hoạ React SPA để minh hoạ việc tìm nạp trước giúp tăng tốc các thao tác điều hướng tiếp theo.

Đo

Trước khi thêm tối ưu hoá, bạn nên phân tích trạng thái hiện tại của ứng dụng trước.

  • Nhấp vào Phối lại để chỉnh sửa để có thể chỉnh sửa dự án.
  • Để xem trước trang web, hãy nhấn vào Xem ứng dụng. Sau đó nhấn Toàn màn hình toàn màn hình.

Trang web là một bản minh hoạ đơn giản được xây dựng bằng tính năng create-react-app.

Hoàn thành các hướng dẫn sau trong thẻ mới vừa mở ra:

  1. Nhấn tổ hợp phím "Control + Shift + J" (hoặc "Command+Option+J" trên máy Mac) để mở Công cụ cho nhà phát triển.
  2. Nhấp vào thẻ Mạng.
  3. Chọn hộp kiểm Tắt bộ nhớ đệm.
  4. Trong danh sách thả xuống Điều tiết, chọn 3G nhanh để mô phỏng loại kết nối chậm.
  5. Tải lại ứng dụng.
  6. Nhập chunk vào hộp văn bản Filter (Bộ lọc) để ẩn mọi tài nguyên không có chunk trong tên của tài nguyên đó.

Bảng điều khiển mạng hiển thị các phân đoạn trên trang chủ.

Trang web sử dụng phương pháp phân tách mã dựa trên định tuyến, nhờ đó, ban đầu hệ thống chỉ yêu cầu mã cần thiết.

  1. Xoá yêu cầu mạng trong Công cụ cho nhà phát triển.
  2. Trong ứng dụng, hãy nhấp vào đường liên kết Blog để điều hướng đến trang đó.

Các đoạn JS và CSS cho tuyến mới này sẽ được tải để hiển thị trang.

Bảng điều khiển mạng hiển thị các phần trang blog.

Tiếp theo, bạn sẽ triển khai Đường liên kết nhanh trên trang web này để có thể tìm nạp trước các phần này trên trang chủ, giúp quá trình điều hướng trở nên nhanh hơn.

Điều này cho phép bạn kết hợp những điểm tốt nhất của cả hai kỹ thuật:

  • Tách mã dựa trên tuyến đường yêu cầu trình duyệt chỉ tải các phần cần thiết ở mức độ ưu tiên cao hơn tại thời điểm tải trang.
  • Quá trình tìm nạp trước yêu cầu trình duyệt tải các phân đoạn cho đường liên kết trong khung nhìn ở mức độ ưu tiên thấp nhất, trong thời gian trình duyệt ở trạng thái rảnh.

Định cấu hình webpack-route-manifest

Bước đầu tiên là cài đặt và định cấu hình webpack-route-manifest, một trình bổ trợ webpack cho phép bạn tạo một tệp kê khai liên kết các tuyến với các phân đoạn tương ứng.

Thông thường, bạn cần phải cài đặt thư viện, nhưng chúng tôi đã thực hiện việc này cho bạn. Dưới đây là lệnh mà bạn cần chạy:

npm install webpack-route-manifest --save-dev

config-overrides.js là một tệp được đặt trong thư mục gốc của dự án, nơi bạn có thể ghi đè hành vi hiện có của cấu hình gói web mà không phải đẩy dự án.

  • Để xem nguồn, hãy nhấn vào Xem nguồn.

Mở config-overrides.js để chỉnh sửa và thêm phần phụ thuộc webpack-route-manifest vào đầu tệp:

const path = require('path');
const RouteManifest = require('webpack-route-manifest');

Tiếp theo, hãy định cấu hình trình bổ trợ webpack-route-manifest bằng cách thêm đoạn mã sau mã ở cuối config-overrides.js:

module.exports = function override(config) {
  config.resolve = {
    ...config.resolve,
    alias: {
      '@assets': `${path.resolve(__dirname, 'src/assets')}`,
      '@pages': `${path.resolve(__dirname, 'src/pages')}`,
      '@components': `${path.resolve(__dirname, 'src/components')}`,
    },
  };

  config.plugins.push(
    new RouteManifest({
      minify: true,
      filename: 'rmanifest.json',
      routes(str) {
        let out = str.replace('@pages', '').toLowerCase();
        if (out === '/article') return '/blog/:title';
        if (out === '/home') return '/';
        return out;
      },
    }),
  );

  return config;
};

Đoạn mã mới này sẽ thực hiện những việc sau:

  • config.resolve khai báo các biến có tuyến nội bộ đến các trang, thành phần và thành phần.
  • config.plugins.push() tạo một đối tượng RouteManifest và truyền đối tượng này cấu hình để có thể tạo tệp rmanifest.json dựa trên các tuyến và đoạn của trang web.

Tệp manifest.json sẽ được tạo và cung cấp tại https://site_url/rmanifest.json.

Tại thời điểm này, bạn cần cài đặt thư viện Quicklink trong dự án của mình. Để đơn giản hoá, chúng tôi đã thêm tính năng này vào dự án. Dưới đây là lệnh mà bạn cần chạy:

npm install --save quicklink

Mở src/components/App/index.js để chỉnh sửa.

Trước tiên, hãy nhập Thành phần đơn đặt hàng cao hơn của Đường liên kết nhanh (HOC):

import React, { lazy, Suspense } from 'react';
import { Route } from 'react-router-dom';

import Footer from '@components/Footer';
import Hero from '@components/Hero';
import style from './index.module.css';
import { withQuicklink } from 'quicklink/dist/react/hoc.js';

const Home = lazy(() => import(/* webpackChunkName: "home" */ '@pages/Home'));
const About = lazy(() => import(/* webpackChunkName: "about" */ '@pages/About'));
const Article = lazy(() => import(/* webpackChunkName: "article" */ '@pages/Article'));
const Blog = lazy(() => import(/* webpackChunkName: "blog" */ '@pages/Blog'));

Tiếp theo, hãy tạo một đối tượng options sau phần khai báo biến Blog để dùng làm đối số khi gọi quicklink:

const options = {
    origins: []
};

Cuối cùng, hãy gói mỗi tuyến bằng thành phần có thứ tự cao hơn withQuicklink(), truyền vào đó một tham số options và thành phần mục tiêu của tuyến đó:

const App = () => (
  <div className={style.app}>
    <Hero />
    <main className={style.wrapper}>
      <Suspense fallback={<div>Loading...</div>}>
        <Route path="/" exact component={withQuicklink(Home, options)} />
        <Route path="/blog" exact component={withQuicklink(Blog, options)} />
        <Route
          path="/blog/:title"
          component={withQuicklink(Article, options)}
        />
        <Route path="/about" exact component={withQuicklink(About, options)} />
      </Suspense>
    </main>
    <Footer />
  </div>
);

Đoạn mã trước đó hướng dẫn tìm nạp trước các phân đoạn cho các tuyến được gói bằng withQuicklink(), khi đường liên kết xuất hiện trong khung hiển thị.

Đo lại

Lặp lại 6 bước đầu tiên trong mục Đo lường. Chưa điều hướng đến trang blog lúc này.

Khi trang chủ tải, các đoạn cho tuyến đường đó sẽ được tải. Sau đó, Quicklink sẽ tìm nạp trước các đoạn của tuyến cho các đường liên kết trong khung nhìn:

Bảng điều khiển mạng hiển thị các phân đoạn tìm nạp trước trên trang chủ.

Những phần này được yêu cầu ở mức độ ưu tiên thấp nhất mà không chặn trang.

Tiếp theo:

  1. Xoá lại Nhật ký mạng.
  2. Bỏ chọn hộp kiểm Disable cache.
  3. Nhấp vào đường liên kết Blog để chuyển đến trang đó.

Bảng điều khiển mạng hiển thị trang blog với các đoạn được lấy từ bộ nhớ đệm.

Cột Kích thước cho biết các phân đoạn này được truy xuất từ "bộ nhớ đệm tìm nạp trước", thay vì từ mạng. Tải các đoạn này mà không dùng đường liên kết nhanh mất khoảng 580 mili giây. Sử dụng thư viện, giờ đây bạn mất 2 mili giây, nghĩa là giảm 99% !