最近想玩点新花样,所以就想搞下http2,之前公司也有搞过go语言的,一直对https和http2比较好奇,就锤了下。
http2.0与1.1的性能对比
这里有个从别人那里抄来的demo地址,上面分别使用和http1.1和http2来加载较大量的图片请求,差不多400个图片,http2的传输速度差不多是http1.1的2-4倍,极大地减少了网络的延迟。
http2历史及相关技术
2009年,谷歌公开了自行研发的 SPDY 协议,作为http2的前身他瞄准http1.x的痛点:高延迟,原因有2个
1.浏览器阻塞(HOL blocking):浏览器会因为一些原因阻塞请求。
浏览器对于同一个域名一般同时只能有4-6 个连接
(下面盗了一个图),超过浏览器最大连接数限制,后续请求就会被阻塞,这个被称作线头阻塞head of line block。
2.建立连接(Initial connection):HTTP 是基于 TCP 协议的,浏览器最快也要在第三次握手时才能捎带 HTTP 请求报文,达到真正的建立连接,但是这些连接无法复用会导致每次请求都经历三次握手和慢启动。三次握手在高延迟的场景下影响较明显,慢启动则对文件类大请求影响较大
spdy被当作 HTTP/2 的基础,有不少改进(可以不看,我抄的)
1:降低延迟,针对HTTP高延迟的问题,SPDY优雅的采取了多路复用(multiplexing)。多路复用通过多个请求stream共享一个tcp连接的方式,解决了线头阻塞的问题,降低了延迟同时提高了带宽的利用率。
2.请求优先级(request priori
最近想玩点新花样,所以就想搞下http2,之前公司也有搞过go语言的,一直对https和http2比较好奇,就锤了下。http2.0与1.1的性能对比这里有个从别人那里抄来的demo地址,上面分别使用和http1.1和http2来加载较大量的图片请求,差不多400个图片,http2的传输速度差不多是http1.1的2-4倍,极大地减少了网络的延迟。http2历史及相关技术2009年,谷歌公开了自行研
HTTP2
和Node.js
关于如何使用Node.js实现
http2
的简单截图
该项目旨在简化创建带有节点的服务器
http2
的过程。 如果您有什么知识可以改善此存储库或启发我,请随时与我们分享问题。
注意spdy包
由于
http2
协议
不适用于
Express
的当前状态,因此spdy似乎是在
Express
上使用
http2
的解决方案。 如果您不想使用spdy通过
Express
获取
http2
,则必须等待
Express
v5。 如果不需要
Express
,仍然可以使用
http2
协议
。
来自nwgh的编辑于2016年8月9日评论了
However, just to note, spdy is dead. Chrome no longer supports it. I disabled support for it in Firefox 50 (scheduled to release in 12 w
原文:Easy HTTP/2 Server with Node.js and
Express
.js作者:Azat Mardan代码:
http2
-
express
什么是 HTTP/2
现代互联网的 TCP/IP
协议
发布于1975年,这项技术在41年前是多么令人惊讶。自它发布开始大部分形式,我们使用 HTTP 和 后续接任者 HTTP/1...
Express
请求处理
Express
框架基础
Express
框架是什么
Express
框架特性
中
间件什么是
中
间件app.use
中
间件用法
中
间件应用错误处理
中
间件捕获错误
Express
请求处理构建模块化路由
Express
框架基础
Express
框架是什么
Express
是基于Node平台的web应用开发框架,创建各种Web应用。
使用npm install
express
下载
Express
框架特性
提供简洁的路由定义方式
对获取HTTP请求参数进行简化处理
对模板引擎支持程度高
提供
中
间件机制有效控制H
// 在这个界面就只用导入路由,注册路由使用,其他的都不用再做与路由
相关
的代码
// 导入
express
const
express
= require("
express
")
// 创建服务器对象
const server =
express
()
// 通过模拟表单获取数据
// post的req.body
server.use(
express
.urlencoded({extended:false}))
// 导入路由模块,路由对象router
const r
http2
的最大宣传优势之一是服务器推送。
通过服务器推送,可以在所请求的文件
中
发送依赖项,例如html文件,以与所请求的文件一起发送。
例如,如果需要从html文件
中
要求的服务器发送一个js文件。
在常规的http或https连接
中
,客户端(例如,浏览器)将请求html文件并关闭连接。 它意识到它也需要来自服务器的js文件。 因此,它打开了另一个连接以请求js文件。
在
http2
中
,服务器可以决定在请求html文件时推送js文件,以便通过单个连接即可在浏览器
中
使用html和js文件。
这样可以提高性
1.
nodejs
单线程,不能做cpu密集型操作,导致时间片不能释放,阻塞后面的任务。
2.
nodejs
可靠性比较低,一个地方报错会导致整个程序崩溃,需要守护进程或者docker重启来解决。
3.像使用多核性能的时候需要使用cluster或者部署多个实例,比较麻烦。
4.内存默认0.7G和1.4G,设置大了之后垃圾回收会变慢,可能需要多部署几个实例。
5.
nodejs
类型的后端...
接上面的loaderurl-loader
现在来我们来试试加载图片,第一件事情肯定是安装对应的loader,可以将小图片转换成base64,减少请求
npm install url-loader file-loader –save-dev//修改index.html加两个div,背景图片设置成两张图片,一个小的,一个大的
<!DOCTYPE html>
<html lang="en">
webpack.optimize.UglifyJsPlugin前端代码优化自然少不了压缩了,在webpack
中
也可以使用它的插件来进行自动压缩,非常的方便// A:webpack.config.js
// B: ...
// A: ...
// 头部加上webpack的声明
const webpack = require('webpack');
// plugins里面加上一条配置
new webp