day30 fream03

86 阅读5分钟

html5有十大新特性:

HTML5十大新特性?HTML5其实并不一定是标签技术,还带有一些JS操作,其实属于一个概念
	1、语义化标签
	2、视频音频
	3、增强型表单控件
	4、webStorage(客户端存储技术)
	5canvas绘图 - 三阶段你会学习一个框架:echarts.js - 画图:柱状图、饼状图、雷达图(数据可视化)
	6、svg绘图 - 画矢量图,放大缩小,图片都不会失真,字体小图标(阿里图标一大堆)
	7、webSocket - 广播收听模式
	8、webWorker - 秘书
	9、拖拽API
	10、地理定位

1、webSocket - H5提供了,代码不复杂重点在原理的理解上

	http协议 - 属于 “请求 - 响应”模型,只有客户端发起请求消息,服务器端才能响应消息,没有请求就没有响应。
	一个请求,只能得到一个响应,但是有些场景中,此模型就力不从心,实时走势图、在线聊天室等等。
	解决:定时器 + ajax(心跳请求) - 请求过于复杂,服务器压力太大了,不够频繁

	webSocket协议:属于“广播 - 收听”模型,客户端连接到服务器端就不会再断开了,永久的连接的,
	双方就可以随意的像对方发送消息,而且是不对等发送,ws协议实时走势图、在线聊天室有优势。

	如何使用:
		WS服务器端 - 用Node.js编写
			使用步骤:
				1、下载引入
				2、创建一个ws服务器端:
					var server=new ws.Server({port:8008});
				3、为服务器端设置连接监听
					server.on("connection",(socket)=>{
						socket.send("说话");//服务器端发送到客户端
						socket.on("message",(data)=>{
							data;//前端说过来的
						})
					})

		WS客户端:用JS编写
			使用步骤:
				1、连接:socket=new WebSocket("ws:127.0.0.1:8008");

				2、听:socket.onmessage=e=>{e.data}

				3、说:socket.send("说话")

直播聊天室案例

客户端
	<body>
		<textarea id="txt"></textarea><br>
		<input id="name1" />
		<input id="msg" />
		<button id="btn">发送</button>
		
		<script type="text/javascript">
			var socket=new WebSocket("ws:192.168.10.224:8008");
			
			btn.onclick=()=>{
				var arr=[];
				arr.push(name1.value);
				arr.push(msg.value);
				msg.value="";
				socket.send(arr);
			}
			
			socket.onmessage=e=>{
				var arr=e.data.split(",");
				txt.innerHTML+=arr[0]+":"+arr[1]+"\n";
			}
		</script>
	</body>
       
服务器端 xxx.js
var ws = require("ws");

var server = new ws.Server({
	port: 8008
});

server.on("connection", (socket) => {
	console.log("有人连接上来了");

	socket.on("message", (data) => {

		var arr = [...server.clients];//获取到目前连接到我们服务器的所有客户端,但是是一个我们目前没学过set数据类型,转变为了arr类型,...可以去掉set的{}然后我们自己写上[]变为数组

		arr.forEach(sk => {//得到每一个客户端,对每一个客户端发送响应消息
			sk.send(data.toString());
		})
	})
})
注意 vscode无法打开两个node.js需要用cmd拖拽打开

1、gulp(使用率:2-) - 三阶段:webpack(使用率:8+)对应的

   自动化构建工具(打包工具):项目经理/小组长使用的 - 学习目的:体验流程
   作用:
       *1、复制
       *2、压缩(css/js/图片...)
       *3、降级ES6ES5,降级语法 - 因为ES5之前语法其实都没有变化,ES5只是提供了一些新的API,目的:支持兼容老IE
        4、将scss/less编译为css - 不需要学习,现在的编辑器都自带此功能
        5、重命名 - 不推荐,html引入hrefsrc的地方名字都要进行修改
   *为什么打包:
	上线过后,不可能使用源代码(1、太大了 2、别的成员/外界也能看的懂)
	肯定使用的是处理过后的代码,目的:1、为了提升网站效率(文件更小) 2、安全性(加密)
         gulp是基于node.js编写的一个第三方模块(包、软件),需要在npm下载:安装的操作一步都不能少

*固定操作安装:1cmd必须先全局安装gulp(不安的话,cmd提示:gulp不是内部命令) - 必做(运行gulp必要方式),一次性安装永久可用
		 npm i --global gulp
	       2cmd再你的项目中局部安装 - 可以不做,直接复制代老湿的node_modules到你的项目之中
		 npm i gulp
	       3cmd在你的项目初始化gulp - 必做 
		 npm init
		 注意:名字可以自己写,但是不能有大写&中文,然后一路回车到底
	       4、配置完成,开始编写属于你自己的gulpfile.js文件!!!必须是这个名字

   如何使用gulp1、先引入var gulp=require("gulp");
   API1、布置任务:
	   gulp.task("任务名",()=>{
		//任务要做什么操作
	   })

	   执行任务:
	     cmd里面输入gulp 任务名; - gulp基于node,但是属于是一个独立的软件
	     如果想不写任务名,默认执行default任务名的操作

	2、*复制
	   gulp.src("入口文件路径"); -- 选中某个、某些源文件
	   gulp.pipe(); -- 管道 -- 输送/插件操作
	   gulp.dest("出口路径"); -- 输送到哪里去?

	   案例:
	   gulp.task("copyAll",()=>{
		gulp.src("源文件路径")
		    .pipe(gulp.dest("出口文件路径"))
	   })

	文件的路径写法:
	  比如:
	    想找到src下面的html下面的1.htmlsrc/html/1.html
	    想找到src下面的html下面的所有的htmlsrc/html/*.html
	    想找到src下面的html下面的所有的文件:src/html/*
	    希望将src下面的/下面的所有内容都复制一份:src/*/*

	恭喜你,已经学会了gulp,剩下的就是学习gulp的插件

2gulp的插件
   1、压缩css步骤:
      gulp-cssmin插件
      npm下载插件:npm i gulp-cssmin
      查看readme中的example小案例
	使用前记得引入: 
	gulp.task("copycssmin",()=>{
		gulp.src("src/css/*.css")
			.pipe(cssmin())
			.pipe(gulp.dest("dist"))
	})

   2、压缩js步骤:1、删除换行和空白字符以及注释(变小文件) 2、会把回调函数中的形参全部简化为一个字母,对应的位置都会简化(变小文件的同时加密保护)
      gulp-uglify插件
      npm下载插件:npm i gulp-uglify
	使用前记得引入
	gulp.task("copyjsmin",()=>{
		gulp.src("src/js/*.js")
			.pipe(uglify())
			.pipe(gulp.dest("dist"))
	})

   3ES降级:gulp-babel;  目的:1、语法变回ES5IE也能支持我们写的语法
	  切记用的是babel6
	 *安装:
		1npm install --save-dev gulp-babel@7 babel-core babel-preset-env
		2npm install --save-dev babel-preset-es2015  
		3、配置一个文件必须名为.babelrc:写入:{
  						"presets": ["es2015"]
						}
          用法:
		使用前记得引入,先降级,在压缩
		gulp.task("copyjsmin",()=>{
		gulp.src("src/js/*.js")
			.pipe(babel())  
			.pipe(uglify())
			.pipe(gulp.dest("dist"))
		})
	  注意:
	   *1、记得要要把严格模式给删掉
	    2、先降级后压缩 - 才能压缩完整

   4、图片压缩插件:
	参考网页:https://blog.csdn.net/x550392236/article/details/78017346
	下载:npm i gulp-tinypng-nokey