云顶娱乐棋牌-云顶娱乐每天送6元
做最好的网站

H5直播起航,深远解读JavaScript面向对象编制程序

利用 canvas 完成数据压缩

2016/03/15 · HTML5 · 1 评论 · Canvas

原稿出处: EtherDream   

深深解读JavaScript面向对象编制程序实施

2016/03/14 · JavaScript · 4 评论 · 面向对象

原版的书文出处: 景庄(@ali景庄)   

面向对象编程是用抽象情势创设基于实际世界模型的生龙活虎种编制程序格局,主要归纳模块化、多态、和打包二种技艺。对JavaScript来讲,其主干是扶助面向对象的,同期它也提供了强压灵活的依附原型的面向对象编制程序本事。

本文将会深入的探幽索隐关于使用JavaScript进行面向对象编制程序的有个别主干基础知识,满含对象的创始,承袭机制,最终还或然会轻便的牵线怎么着依附ES6提供的新的类机制重写古板的JavaScript面向对象代码。

H5直播起航

2016/10/31 · HTML5 · 开发

初藳出处: 坑坑洼洼实验室   

云顶娱乐每天送6元 1

了解HTML/HTML5中的download属性

2016/04/07 · HTML5 · 5 评论 · download

初藳出处: 张鑫旭(@张鑫旭)   

大器晚成、download属性是个什么样鬼?

率先看上面这种截图:
云顶娱乐每天送6元 2

假使大家想完结点击上边的下载开关下载一张图纸,你会怎样落成?

我们大概会想到二个最简便的方法,正是直接开关a标签链接一张图纸,相仿上边那样:

<a href="large.jpg">下载</a>

1
<a href="large.jpg">下载</a>

只是,主张虽好,实效却不是大家想要的,因为浏览器能够直接浏览图片,由此,大家点击上面包车型地铁“下载”链接,并是不下载图片,而是在新窗口直接浏览图片。

下载

看自身的肉眼,云顶娱乐每天送6元 3

于是,基本上,近来的落实都是剖腹藏珠HTML战略,而是采纳,举例php那样的后端语言,通过报告浏览器header音讯,来促成下载。

header('Content-type: image/jpeg'); header("Content-Disposition: attachment; filename='download.jpg'");

1
2
header('Content-type: image/jpeg');
header("Content-Disposition: attachment; filename='download.jpg'");

唯独,这种光景端都要顾虑的办法神烦,以后都盛行前后端抽离,还搅在联合签字太累了,以为不会再爱了。

那有未有何样只需求前端动入手指就能够达成下载的不二等秘书技呢?有,正是本文要介绍的download属性。

比方,大家盼望点击“下载”链接下载图片并不是浏览,直接扩展二个download属性就足以:

<a href="large.jpg" download>下载</a>

1
<a href="large.jpg" download>下载</a>

不错,你未曾看错,就这么截止了,无妨点击前面包车型大巴链接试试:下载

结果在Chrome浏览器下(FireFox浏览器因为跨域限定无效):
云顶娱乐每天送6元 4

不仅仅如此,我们还是能钦赐下载图片的公文名:

<a href="index_logo.gif" download="_5332_.gif">下载</a>

1
<a href="index_logo.gif" download="_5332_.gif">下载</a>

生机勃勃旦后缀名相近,大家还是能缺省,直接文件名:

<a href="index_logo.gif" download="_5332_">下载</a>

1
<a href="index_logo.gif" download="_5332_">下载</a>

截图为虚,操作为实:下载

Chrome下的截图效果暗示:
云顶娱乐每天送6元 5

叁个大写的酷里!

顾客端(浏览器端)数据存储本事大概浏览

2017/03/09 · 基本功本领 · 2 评论 · 存储

原稿出处: dwqs   

在顾客端(浏览器端)存款和储蓄数据有繁多益处,最器重的少数是能急迅访谈(网页)数据。(以后)在客商端有三种多少存款和储蓄方法,而近年来就独有各种常用方法了(个中大器晚成种被撤废了):

  • Cookies
  • Local Storage
  • Session Storage
  • IndexedDB
  • WebSQL (被废弃)

前言

HTTP 襄助 GZip 压缩,可节约数不清传输财富。但缺憾的是,独有下载才有,上传并不帮衬。

倘使上传也能减少,那就全盘了。非常符合多量文书提交的场子,比如新浪,就是很好的例证。

虽说正式不协助「上传压缩」,但还是能够团结来得以实现。

面向对象的多少个概念

在走入正题前,先驾驭古板的面向对象编制程序(举个例子Java)国民党的中央委员会常务委员会波及到的概念,大概能够富含:

  • 类:定义对象的特色。它是目标的质量和方法的模板定义。
  • 对象(或称实例):类的一个实例。
  • 品质:对象的特色,比方颜色、尺寸等。
  • 主意:对象的表现,举个例子行走、说话等。
  • 构造函数:对象早先化的一弹指被调用的办法。
  • 连绵起伏:子类能够持续父类的表征。举个例子,猫承继了动物的貌似本性。
  • 打包:生机勃勃种把多少和有关的不二秘籍绑定在一同利用的方式。
  • 虚幻:结合复杂的持续、方法、属性的对象能够模拟现实的模型。
  • 多态:差别的类能够定义相同的措施或性质。

在JavaScript的面向对象编制程序中山高校约也囊括那个。可是在称为上或然稍有例外,举例,JavaScript中从未原生的“类”的概念,
而只有对象的概念。因而,随着你认知的深远,我们会混用对象、实例、构造函数等概念。

前言

近期抽空对近年来可比火的摄像直播,做了下研商与探求,理解其全体完毕流程,以致研究移动端HTML5直播可行性方案。

意识脚下 WEB 上主流的录像直播方案有 HLS 和 RTMP,移动 WEB 端如今以 HLS 为主(HLS存在延迟性难题,也可以信任 video.js 选用RTMP),PC端则以 RTMP 为主实时性较好,接下去将围绕那三种摄像流协议来进展H5直播主旨分享。

二、浏览器宽容性和跨域战略

云顶娱乐每天送6元 6

可是,caniuse浮现的包容性只是个笼统,依照鄙人的耳濡目染测量检验,事情要比见到的目迷五色。

重要表今后跨域攻略的拍卖上,由于本身手上未有IE13,所以,只可以相比较Chrome浏览器和Fire福克斯浏览器:

若果急需下载的能源是跨域的,包括跨子域,在Chrome浏览器下,使用download性能是足以下载的,不过,并不能够复位下载的文件的命名;而FireFox浏览器下,则download性格是低效的,约等于FireFox浏览器无论怎么着都不扶持跨域能源的download特性下载。

而,假诺财富是同域名的,则四个浏览器都以直通的下载,不会冒出下载变浏览的场合。
云顶娱乐每天送6元 7

是还是不是帮衬download属性的监测
要监测当前浏览器是或不是扶助download性子,生龙活虎行JS代码就能够了,如下:

var isSupportDownload = 'download' in document.createElement('a');

1
var isSupportDownload = 'download' in document.createElement('a');

Cookies

Cookies 是后生可畏种在文书档案内部存款和储蓄器储字符串数据最优良的主意。常常来说,cookies 会由服务端发送给客商端,客商端存款和储蓄下来,然后在紧接着让央求中再发回给服务端。那能够用于诸如管理客户会话,跟踪顾客新闻等事情。

别的,客商端也用利用 cookies 存款和储蓄数据。因此,cookies 常被用来存款和储蓄一些通用的数额,如客户的首荐项设置。

Flash

首推方案当然是 Flash,终究它提供了压缩 API。除了 zip 格式,还协理 lzma 这种一级压缩。

因为是原生接口,所以质量极高。并且对应的 swf 文件,也不行小。

对象(类)的创建

在JavaScript中,大家日常能够采纳构造函数来创设特定项目标靶子。诸如Object和Array那样的原生构造函数,在运转时会自动出未来试行意况中。
此外,我们也得以成立自定义的构造函数。比如:

function Person(name, age, job) { this.name = name; this.age = age; this.job = job; } var person1 = new Person('Weiwei', 27, 'Student'); var person2 = new Person('Lily', 25, 'Doctor');

1
2
3
4
5
6
7
8
function Person(name, age, job) {
  this.name = name;
  this.age = age;
  this.job = job;
}
 
var person1 = new Person('Weiwei', 27, 'Student');
var person2 = new Person('Lily', 25, 'Doctor');

遵从规矩,构造函数始终都应该以二个大写字母早前(和Java中定义的类同样),普通函数则小写字母从前。
要创建Person的新实例,必需运用new操作符。以这种方法调用构造函数实际上会经历以下4个步骤:

  1. 开创三个新目的(实例)
  2. 将构造函数的效率域赋给新指标(约等于重设了this的指向,this就对准了这些新指标)
  3. 实施构造函数中的代码(为那个新对象增添属性)
  4. 归来新对象

有关new操作符的越多内容请参见那篇文书档案。

在上头的例证中,大家制造了Person的五个实例person1person2
那多少个对象暗许都有多个constructor品质,该属性指向它们的构造函数Person,也正是说:

console.log(person1.constructor == Person); //true console.log(person2.constructor == Person); //true

1
2
console.log(person1.constructor == Person);  //true
console.log(person2.constructor == Person);  //true

生龙活虎、摄像流协议HLS与RTMP

三、结束语

除了那些之外图片能源,大家还能是PDF能源,只怕txt能源等等。尤其Chrome等浏览器能够一贯展开PDF文件,使得此文件格式需求download管理的意况更是宽广。

此HTML属性尽管可怜实用和方便,不过包容性制约了大家的广阔利用。

与此同不常间思量到不少时候,需求展开一些下载的总计,纯前端的章程想要保存下载量数据,依然有些吃紧,要求跟开垦的同窗同盟才行,还比不上利用守旧方法。

所以,download特性的前景前程在哪儿?当下是或不是足以平昔步入到骨子里项目?还亟需大家联合能够思虑。其实选拔JS达成download属性的polyfill并简单,可是,挂念到为何不辜负有浏览器都利用polyfill的不二等秘书技,又认为为了本事而技巧是不太伏贴的。

简单来说,先放着心上,再观看观察。

1 赞 3 收藏 5 评论

云顶娱乐每天送6元 8

Cookies 的 基本CRUD 操作

通过上面包车型客车语法,我们能够创制,读取,更新和删除 cookies:

JavaScript

// Create document.cookie = "user_name=Ire Aderinokun"; document.cookie = "user_age=25;max-age=31536000;secure"; // Read (All) console.log( document.cookie ); // Update document.cookie = "user_age=24;max-age=31536000;secure"; // Delete document.cookie = "user_name=Ire Aderinokun;expires=Thu, 01 Jan 1970 00:00:01 GMT";

1
2
3
4
5
6
7
8
9
10
11
12
// Create
document.cookie = "user_name=Ire Aderinokun";  
document.cookie = "user_age=25;max-age=31536000;secure";
 
// Read (All)
console.log( document.cookie );
 
// Update
document.cookie = "user_age=24;max-age=31536000;secure";
 
// Delete
document.cookie = "user_name=Ire Aderinokun;expires=Thu, 01 Jan 1970 00:00:01 GMT";

JavaScript

Flash 渐渐淘汰,但代表的 HTML5,却不曾提供压缩 API。只可以自个儿用 JS 达成。

那即便实惠,但运营速度就慢多了,並且相应的 JS 也十分大。

只要代码有 50kb,而数据压缩后只小 10kb,那就不足了。除非量大,才有意义。

自定义对象的品种检查测试

咱俩得以采纳instanceof操作符实行项目检验。大家创立的全数目的既是Object的实例,同有的时候候也是Person的实例。
因为具有的对象都持续自Object

console.log(person1 instanceof Object); //true console.log(person1 instanceof Person); //true console.log(person2 instanceof Object); //true console.log(person2 instanceof Person); //true

1
2
3
4
console.log(person1 instanceof Object);  //true
console.log(person1 instanceof Person);  //true
console.log(person2 instanceof Object);  //true
console.log(person2 instanceof Person);  //true

1. HTTP Live Streaming

HTTP Live Streaming(简单称谓 HLS)是三个基于 HTTP 的录像流公约,由 Apple 公司落成,Mac OS 上的 QuickTime、Safari 以致 iOS 上的 Safari 都能很好的扶持 HLS,高版本 Android 也加码了对 HLS 的支撑。一些广大的客商端如:MPlayerX、VLC 也都支持 HLS 钻探。

HLS 商业事务基于 HTTP,而一个提供 HLS 的服务器必要做两件事:

  • 编码:以 H.263 格式对图像进行编码,以 MP4 要么 HE-AAC 对声音进行编码,最后包装到 MPEG-2 TS(Transport Stream)容器之中;
  • 细分:把编码好的 TS 文件等长切分成后缀为 ts 的小文件,并生成贰个.m3u8 的纯文本索引文件;

H5直播起航,深远解读JavaScript面向对象编制程序施行云顶娱乐每天送6元:。浏览器选取的是 m3u8 文件。m3u8 跟音频列表格式 m3u 很像,能够简简单单的以为m3u8 正是含有八个 ts 文件的播放列表。播放器按梯次每一个广播,全体放完再央浼一下 m3u8 文件,获得富含最新 ts 文件的播放列表继续播,生生不息。整个直播进程正是依靠二个不断更新的 m3u8 和一批小的 ts 文件组成,m3u8 必得动态更新,ts 能够走 CDN。一个第一名的 m3u8 文件格式如下:

#EXTM3U

#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=200000
gear1/prog_index.m3u8

#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=311111
gear2/prog_index.m3u8

#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=484444
gear3/prog_index.m3u8

#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=737777
gear4/prog_index.m3u8

能够看出 HLS 合计本质依旧贰个个的 HTTP 央浼 / 响应,所以适应性很好,不会碰着防火墙影响。但它也可能有多少个致命的败笔:延迟现象特别引人注目。假诺每一个ts 遵照 5 秒来切分,一个 m3u8 放 6 个 ts 索引,那么起码就能够拉动 30 秒的推迟。如果减削每种 ts 的长短,减少 m3u第88中学的索引数,延时实在会减少,但会推动更频仍的缓冲,对服务端的诉求压力也会加倍增加。所以一定要依照实际情状找到两个折中的点。

对于援救 HLS 的浏览器来讲,直接那样写就能够播放了:

XHTML

<video src="" height="300" width="400" preload="auto" autoplay="autoplay" loop="loop" webkit-playsinline="true"></video>

1
2
<video src="http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8"
height="300" width="400" preload="auto" autoplay="autoplay" loop="loop" webkit-playsinline="true"></video>

注意:HLS 在 PC 端仅辅助safari浏览器,近似chrome浏览器接受HTML5 video标签不可能播放 m3u8 格式,可径直行使英特网一些比较早熟的方案,如:sewise-player、MediaElement、videojs-contrib-hls、jwplayer。

Cookies 的优点

  • 能用来和服务端通讯
  • 当 cookie 快要自动过期时,大家能够再次安装并不是去除

其他

可不可以不要 JS,而是使用一些接口,直接达成减少?

其实,在 HTML5 刚面世时,就注意到了二个职能:canvas 导出图片。能够变动 jpg、png 等格式。

假诺在动脑筋的话,相信您也想开了。对的,正是 png —— 它是无损压缩的。

大家把平时数据当成像素点,画到 canvas 上,然后导出成 png,就是二个破例的回降包了~


下边开头斟酌。。。

构造函数的标题

我们不提议在构造函数中央直属机关接定义方法,就算这样做的话,每种方法都要在各种实例上再一次创建二回,那将那多少个损耗品质。
——不忘了,ECMAScript中的函数是目的,每定义三个函数,也就实例化了三个指标。

有幸的是,在ECMAScript中,我们能够依靠原型对象来解决这些难题。

2. Real Time Messaging Protocol

Real Time Messaging Protocol(简单称谓 RTMP)是 Macromedia 开拓的生机勃勃套录像直播契约,今后属于 Adobe。那套方案必要搭高等建筑专科学园门的 RTMP 流媒体服务如 Adobe Media Server,况兼在浏览器中不能不采用 Flash 完毕播放器。它的实时性相当好,延迟超级小,挂念余力绌支撑活动端 WEB 播放是它的硬伤。

尽管不可能在iOS的H5页面播放,不过对于iOS原生应用是足以团结写解码去剖判的, RTMP 延迟低、实时性较好。

浏览器端,HTML5 video标签不只怕播放 RTMP 左券的录制,能够由此 video.js 来实现。

XHTML

<link href="" rel="stylesheet">   <video id="example_video_1" class="video-js vjs-default-skin" controls preload="auto" width="640" height="264" loop="loop" webkit-playsinline> <source src="rtmp://10.14.221.17:1935/rtmplive/home" type='rtmp/flv'> </video>   <script src="; <script> videojs.options.flash.swf = 'video.swf'; videojs('example_video_1').ready(function() { this.play(); }); </script>

1
2
3
4
5
6
7
8
9
10
11
12
13
<link href="http://vjs.zencdn.net/5.8.8/video-js.css" rel="stylesheet">
 
<video id="example_video_1" class="video-js vjs-default-skin" controls preload="auto" width="640" height="264" loop="loop" webkit-playsinline>
<source src="rtmp://10.14.221.17:1935/rtmplive/home" type='rtmp/flv'>
</video>
 
<script src="http://vjs.zencdn.net/5.8.8/video.js"></script>
<script>
videojs.options.flash.swf = 'video.swf';
videojs('example_video_1').ready(function() {
this.play();
});
</script>

Cookies 的缺点

  • 追加了文书档案传输的载荷
  • 一定要存款和储蓄一丢丢的数据
  • 只得存储字符串
  • 潜在的 安然主题材料
  • 自从有 Web Storage API (Local and Session Storage),cookies 就不再被引入用于存款和储蓄数据了

数码转变

数据转像素,并不劳动。1 个像素可以容纳 4 个字节:

R = bytes[0] G = bytes[1] B = bytes[2] A = bytes[3]

1
2
3
4
R = bytes[0]
G = bytes[1]
B = bytes[2]
A = bytes[3]

骨子里有现存的点子,可批量将数据填充成像素:

img = new ImageData(bytes, w, h); context.putImageData(img, w, h)

1
2
img = new ImageData(bytes, w, h);
context.putImageData(img, w, h)

然则,图片的宽高怎样设定?

凭借原型格局定义对象的不二等秘书籍

咱俩创设的各样函数都有四个prototype质量,那天性格是三个指针,指向该函数的原型对象
该对象蕴涵了由特定项指标不无实例共享的习性和办法。也等于说,大家能够运用原型对象来让抱有目的实例分享它所含有的性质和方法。

function Person(name, age, job) { this.name = name; this.age = age; this.job = job; } // 通过原型方式来加多全数实例分享的法子 // sayName() 方法将会被Person的具备实例分享,而幸免了双重创建Person.prototype.sayName = function () { console.log(this.name); }; var person1 = new Person('Weiwei', 27, 'Student'); var person2 = new Person('Lily', 25, 'Doctor'); console.log(person1.sayName === person2.sayName); // true person1.sayName(); // Weiwei person2.sayName(); // Lily

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function Person(name, age, job) {
  this.name = name;
  this.age = age;
  this.job = job;
}
 
// 通过原型模式来添加所有实例共享的方法
// sayName() 方法将会被Person的所有实例共享,而避免了重复创建
Person.prototype.sayName = function () {
  console.log(this.name);
};
 
var person1 = new Person('Weiwei', 27, 'Student');
var person2 = new Person('Lily', 25, 'Doctor');
 
console.log(person1.sayName === person2.sayName); // true
 
person1.sayName(); // Weiwei
person2.sayName(); // Lily

正如上面的代码所示,通过原型方式定义的方法sayName()为全部的实例所分享。也便是,
person1person2做客的是同一个sayName()函数。相近的,公共性质也足以使用原型格局进行定义。比方:

function Chinese (name) { this.name = name; } Chinese.prototype.country = 'China'; // 公共属性,全体实例分享

1
2
3
4
5
function Chinese (name) {
    this.name = name;
}
 
Chinese.prototype.country = 'China'; // 公共属性,所有实例共享

3. 录像流协议HLS与RTMP相比较

协议 原理 延时 优点 使用场景
HLS 短链接Http 集合一段时间数据生成ts切片文件更新m3u8文件 10s – 30s 跨平台 移动端为主
RTMP 长链接Tcp 每个时刻的数据收到后立即发送 2s 延时低、实时性好 PC+直播+实时性要求高+互动性强

浏览器援助

享有主流浏览器均扶持 Cookies.

本文由云顶娱乐棋牌发布于云顶娱乐棋牌,转载请注明出处:H5直播起航,深远解读JavaScript面向对象编制程序

TAG标签:
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。