视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
webpack项目的网络优化代码分享
2020-11-27 20:03:28 责编:小采
文档


SPA应用的流程是:

  1. 加载HTML

  2. 加载javascript(bundle.js)

  3. 执行javascript,开始请求接口

  4. 先建立和接口的HTTP/HTTPS连接(dns查询/tcp握手/TLS链接)

  5. 发送请求header,获取响应数据 ...

  6. 渲染数据,呈现给用户

我们用Vue/React + Webpack打包的js动辄300KB以上,步骤2会消耗一点时间。如果在 步骤2 进行中时,同步执行 步骤4 建立连接,就能节约一点点时间。
尤其在移动端,建立连接的时间占了大头,能省是省。

利用 <link rel="preconnect"> 让浏览器预先建立连接。

主流浏览器大多已支持:https://caniuse.com/#feat=link-rel-preconnect

做了一个简单的webpack插件: https://github.com/joaner/html-webpack-preconnect-plugin

// $ npm install html-webpack-preconnect-plugin --save-dev

var HtmlWebpackPreconnectPlugin = require('html-webpack-preconnect-plugin');

// webpack config
{
 ...
 plugins: [
 new HtmlWebpackPlugin({
 filename: 'index.html',

 // set the preconnect origins
 preconnect: [
 'http://api1.example.com',
 'http://api2.example.com',
 ]
 }),

 // enabled preconnect plugin
 new HtmlWebpackPreconnectPlugin(),
 ]
}

这个插件做的事非常简单,就是插入到<head>里:

<!-- dist/index.html -->
<head>
 ...
 <link rel="preconnect" href="http://api1.example.com">
 <link rel="preconnect" href="http://api2.example.com">
</head>

我之前用HtmlWebpackPlugin的模板实现,但是略微有点繁琐,所以提取成了插件。

<!-- template.html -->
<link rel="preconnect" href=<%= htmlWebpackPlugin.options.api1_origin %>>

下载本文
显示全文
专题