0.0.2 • Published 1 year ago

h-prefetch-webpack-plugin v0.0.2

Weekly downloads
-
License
-
Repository
github
Last release
1 year ago

h-prefetch-webpack-plugin

Introduction

一个页面渲染最耗时的不过资源加载和接口请求,资源加载可以使用缓存等方式进行优化,那么接口请求呢?接口请求无法进行提前缓存,那么我们可以将其提前加载。

现代前端页面的接口请求大多是在JS中发起,也就意味着需要等JS加载完成,并执行的时候,才开始接口请求,两个最耗时的步骤是同步顺序执行,这非常耗时。

所以这个插件可以将一部分GET请求提前塞入html中,做预请求,提前到和JS资源并行请求,等JS开始执行时,可以直接使用提前请求到的接口数据,从而提升页面性能。

Install

Using npm:

$ npm install --save-dev h-prefetch-webpack-plugin

or using yarn:

$ yarn add h-prefetch-webpack-plugin --dev

Usage

该webpack plugin 需要配合html-webpack-plugin 插件进行使用

const HtmlWebpackPlugin = require('html-webpack-plugin');
const PreFetchPlugin = require('h-prefetch-webpack-plugin'); 

// webpack config
{
  ...
  plugins: [

    new HtmlWebpackPlugin({
      filename: 'index.html',
    }),
    new PreFetchPlugin({
      prefetchList: [
        {
          path: '/test',
          params: {
            id: ({ searchParams }) => `${searchParams.get('id')}`,
          }
        }
      ]
    })
  ]
}

Configuration

参数类型说明
mode'preload'|'proxy'|'auto'预请求的模式,默认为auto
prefetchListPrefetchItem[]需要提前请求的接口列表

PrefetchItem

参数类型说明
pathString接口路径
paramsObject接口参数
headersObject接口需要的特殊headers

params和headers支持String或者Function的方式,如果是Function的方式,会传入searchParams(页面url上的params)和url(页面Url), 使用如下:

{
  path: '/test',
  params: {
    name: 'user1',
    id: ({ searchParams,url }) => {
      return searchParams.get('id');
    }
  }
}

Mode

preload模式
该模式使用浏览器原生的preload能力进行预请求,也就是会在html中插入的标签,如果请求上没有定制header的话,建议使用这种模式。

proxy模式

该模式会使用代理fetch和xhr的方式进行预请求,适合有定制header的请求

auto模式

该模式会先判断是否支持浏览器原生的preload,如果不支持则使用proxy模式,如果支持,则会根据每个请求是否有header,智能使用 preload模式或者proxy模式。

注意:该模式在html中引入的js代码量较大,所以如果明确可以使用preload模式的,建议主动声明preload模式。

0.0.2

1 year ago

0.0.1

1 year ago

0.0.1-beta.0

1 year ago