Node.js学习教程之HTTP/2服务器推送【译】


Posted in Javascript onOctober 31, 2017

前言

最近Node.js v8.4+版本发布带来了体验版的HTTP/2,你可以自己通过设置参数--expose-http2启动。

这篇文章,我将介绍HTTP/2最重要的一方面服务器推送并且创建一个小的Node.js程序案例来使用它。下面话不多说了,来一起看看详细的介绍吧。

关于HTTP/2

HTTP/2 的目的是通过支持完整的请求与响应复用来减少延迟,通过有效压缩 HTTP 标头字段将协议开销降至最低,同时增加对请求优先级和服务器推送的支持。

更多关于HTTP/2内容,请查看文章HTTP/2。

服务器推送

HTTP/2 服务器推送(Server Push)允许服务器在浏览器请求之前将资源发送到浏览器。

在我们转到HTTP/2之前,我们来看看它如何与HTTP/1配合使用:

在HTTP/1中,客户端向服务器发送一个请求,服务器返回一个包含许多外部资源(.js,.css等文件)链接的HTML文件。当浏览器处理这个初始HTML文件时,它开始解析这些链接,并分别加载它们。

查看下面的demo加载过程的图像。 请注意时间表上的独立请求以及这些请求的启动:

Node.js学习教程之HTTP/2服务器推送【译】

HTTP/1资源加载

这是HTTP/1的工作原理,这就是我们如何开发这么多年的应用程序。为什么要改变它呢?

当前方法的问题是用户必须等待浏览器解析响应,发现链接并获取资源。 这会延迟渲染并增加加载时间。 有一些解决方案,如内联一些资源,但也使得初始响应越来越大。

这是HTTP/2服务器推送功能进入视线的地方,因为服务器可以在浏览器请求之前将资源发送到浏览器。
看看下面的图片,通过HTTP/2提供相同服务的网站。查看时间轴和启动器。 你可以看到HTTP/2复用减少了请求数量,并且资源与初始请求一起立即发送。

Node.js学习教程之HTTP/2服务器推送【译】

HTTP/2服务器推送

让我们看看今天如何在Node.js中使用HTTP/2服务器推送,来加快客户端的加载时间。

一个Node.js HTTP/2服务器推送案例

通过加载内置的http2模块,我们可以创建我们的服务器,就像我们使用https模块一样。

有趣的部分是在请求index.html时推送其他资源:

const http2 = require('http2') 
const server = http2.createSecureServer( 
 { cert, key },
 onRequest
)

function push (stream, filePath) { 
 const { file, headers } = getFile(filePath)
 const pushHeaders = { [HTTP2_HEADER_PATH]: filePath }

 stream.pushStream(pushHeaders, (pushStream) => {
 pushStream.respondWithFD(file, headers)
 })
}

function onRequest (req, res) { 
 // Push files with index.html
 if (reqPath === '/index.html') {
 push(res.stream, 'bundle1.js')
 push(res.stream, 'bundle2.js')
 }

 // Serve file
 res.stream.respondWithFD(file.fileDescriptor, file.headers)
}

这样bundle1.js和bundle2.js资源即使在它要求它们之前也会被发送到浏览器。

你可以查看完整的案例:https://github.com/RisingStack/http2-push-example

HTTP/2 & Node

HTTP/2可以帮助我们在很多方面优化我们的客户端与服务器之间的通信。

通过服务器推送,我们可以将资源发送到浏览器,减少用户的初始加载时间。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

原文:https://blog.risingstack.com/node-js-http-2-push/

译者:Jin

作者:Péter Márton

Javascript 相关文章推荐
jQuery如何取id有.的值一般的方法是取不到的
Apr 18 Javascript
jQuery实现在下拉列表选择时获取json数据的方法
Apr 16 Javascript
Jquery左右滑动插件之实现超级炫酷动画效果附源码下载
Dec 02 Javascript
EasyUI在表单提交之前进行验证的实例代码
Jun 24 Javascript
javascript 注释代码的几种方法总结
Jan 04 Javascript
详解javascript中对数据格式化的思考
Jan 23 Javascript
js仿微信公众平台打标签功能
Apr 08 Javascript
jQuery选择器之属性筛选选择器用法详解
Sep 19 jQuery
Vue2.0学习之详解Vue 组件及父子组件通信
Dec 12 Javascript
Bootstarp在pycharm中的安装及简单的使用方法
Apr 19 Javascript
JavaScript Dom 绑定事件操作实例详解
Oct 02 Javascript
javascript 内存模型实例详解
Apr 18 Javascript
详解Vue用自定义指令完成一个下拉菜单(select组件)
Oct 31 #Javascript
原生js实现仿window10系统日历效果的实例
Oct 31 #Javascript
ES6使用Set数据结构实现数组的交集、并集、差集功能示例
Oct 31 #Javascript
Vue实战之vue登录验证的实现代码
Oct 31 #Javascript
jQuery ajax读取本地json文件的实例
Oct 31 #jQuery
ES6解构赋值的功能与用途实例分析
Oct 31 #Javascript
js原生日历的实例(推荐)
Oct 31 #Javascript
You might like
php读取3389的脚本
2014/05/06 PHP
php和editplus正则表达式去除空白行
2015/04/17 PHP
PHP编写RESTful接口
2016/02/23 PHP
PHP的Yii框架中使用数据库的配置和SQL操作实例教程
2016/03/17 PHP
Javascript 陷阱 window全局对象
2008/11/26 Javascript
细品javascript 寻址,闭包,对象模型和相关问题
2009/04/27 Javascript
指定位置如果有图片显示图片,无图片显示广告的JS
2010/06/05 Javascript
Jquery方式获取iframe页面中的 Dom元素
2014/05/07 Javascript
jQuery 1.9移除了$.browser可以使用$.support来替代
2014/09/03 Javascript
JS判断浏览器是否支持某一个CSS3属性的方法
2014/10/17 Javascript
JavaScript实现鼠标滑过处生成气泡的方法
2015/05/16 Javascript
clipboard.js无需Flash无需依赖任何JS库实现文本复制与剪切
2015/10/10 Javascript
AngularJS入门教程之AngularJS表达式
2016/04/18 Javascript
JavaScript_object基础入门(必看篇)
2016/06/13 Javascript
js中小数向上取整数,向下取整数,四舍五入取整数的实现(必看篇)
2017/02/13 Javascript
Angularjs中使用轮播图指令swiper
2017/05/30 Javascript
jQuery实现简单的手风琴效果
2020/04/17 jQuery
js实现购物车功能
2018/06/12 Javascript
手把手教你写一个微信小程序(推荐)
2018/10/17 Javascript
解决vue自定义指令导致的内存泄漏问题
2020/08/04 Javascript
原生JavaScript实现刮刮乐
2020/09/29 Javascript
python 限制函数调用次数的实例讲解
2018/04/21 Python
使用Python进行体育竞技分析(预测球队成绩)
2019/05/16 Python
Python生成词云的实现代码
2020/01/14 Python
python如何通过闭包实现计算器的功能
2020/02/22 Python
使用Python+Appuim 清理微信的方法
2021/01/26 Python
css3实现简单的白云飘动背景特效
2020/10/28 HTML / CSS
Myprotein葡萄牙官方网站:英国优质运动营养品牌
2016/09/12 全球购物
大学生毕业鉴定
2014/01/31 职场文书
法人代表委托书
2014/04/04 职场文书
《分一分》教学反思
2014/04/13 职场文书
爱国卫生月活动总结范文
2014/04/25 职场文书
十佳护士先进事迹
2014/05/08 职场文书
车辆委托书范本
2014/10/05 职场文书
pytorch中Schedule与warmup_steps的用法说明
2021/05/24 Python
Python排序算法之插入排序及其优化方案详解
2021/06/11 Python