>

兑现数据压缩,JSON简单介绍以及用法汇总

- 编辑:云顶娱乐yd2221 -

兑现数据压缩,JSON简单介绍以及用法汇总

你会用setTimeout吗

2016/03/22 · JavaScript · 1 评论 · settimeout

正文我: 伯乐在线 - 唐光尧 。未经我许可,禁绝转载!
款待参预伯乐在线 专栏撰稿人。

读本里面的setTimeout

概念特不难
setTimeout() 方法用于在钦点的微秒数后调用函数或计算表明式。

分布应用场景
放大计时器,轮播图,动画效果,自动滚动等等

下边一些应该是setTimeout在豪门心中的样板,因为我们平日使用亦不是非常多。

唯独setTimeout真的有那么粗略吗?

测试题

二个难题,倘让你在一段代码中发觉上面内容

var startTime = new Date(); setTimeout(function () { console.log(new Date() - startTime); }, 100)

1
2
3
4
var startTime = new Date();
setTimeout(function () {
    console.log(new Date() - startTime);
}, 100)

试问最终打字与印刷的是有个别?
自身感觉不错答案是,决定于前边同步实施的js须求占用多少日子。
MAX(同步执行的时间, 100)

再加一个主题素材,只有上边代码

setTimeout(function () { func1(); }, 0) func2();

1
2
3
4
setTimeout(function () {
    func1();
}, 0)
func2();

func1和func2何人会先进行?

以此答案应该相比较轻便,func2先实施,func1前面奉行。

再来一题

setTimeout(function () { func1() }, 0)

1
2
3
setTimeout(function () {
    func1()
}, 0)

兑现数据压缩,JSON简单介绍以及用法汇总。setTimeout(function () { func1() })

1
2
3
setTimeout(function () {
    func1()
})

有怎样异样?

0秒延迟,此回调将会放到多个能登时实施的时节举办接触。javascript代码大要上是自顶向下的,但中间穿插着有关DOM渲染,事件应对等异步代码,他们将组成三个体系,零秒延迟将会促成插队操作。
不写第二个参数,浏览器自动配置时间,在IE,FireFox中,第一回配或然给个极大的数字,100ms上下,以往会压缩到细微时间间隔,Safari,chrome,opera则多为10ms上下。

地点答案来自《javascript框架设计》

好了,看了地方多少个难点是不是深感setTimeout不是想象中那么了。

H5端呼起录像头扫描二维码并深入分析

云顶娱乐 ,2016/01/22 · HTML5 · 二维码

本文作者: 伯乐在线 - zhiqiang21 。未经作者许可,禁绝转发!
款待参预伯乐在线 专栏撰稿人。

JSON简单介绍以及用法汇总

2015/03/26 · JavaScript · 1 评论 · JSON

原著出处: 韩非子迟的博客   

使用 SVG 输出 Octicon

2016/03/18 · HTML5 · SVG

最早的小讲出处: aaronshekey   译文出处:[百度EFE

  • Justineo]()   

GitHub.com 未来不再利用字体来输出图标了。大家把代码库中具有的 Octicon 替换来了 SVG 版本。固然这么些改造并不那么猛烈,但你及时就会体会到 SVG Logo的帮助和益处。

云顶娱乐 1

Octicon 上的对待

切换成 SVG 以往,Logo会作为图片渲染而非文字,那使其在别的分辨率下都能很好地在各类像素值下显得。能够比较一下侧面放大后的书体版本和右侧清晰的 SVG 版本。

运用 canvas 达成数据压缩

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

原著出处: EtherDream   

setTimeout和单线程

上面是自家要好的有的知道
率先须要留意javascript是单线程的,特点就是轻松出现堵塞。如若一段程序管理时间十分短,很轻便形成整个页面hold住。什么交互都管理不了怎么做?

简化复杂度?复杂逻辑后端管理?html5的十六线程?

地方都以ok的做法,不过setTimeout也是拍卖这种主题材料的一把好手。

setTimeout二个很首要的用法就是分片,假使一段程序过大,我们能够拆分成若干细小的块。
譬喻说地点的事态,我们将那一段复杂的逻辑拆分管理,分片塞入队列。那样固然在复杂程序未有管理完时,大家操作页面,也是能获取尽管响应的。其实便是将互相插入到了复杂程序中执行。

换一种思路,上边就是利用setTimeout达成一种伪十二线程的概念。

有个函数库Concurrent.Thread.js 正是兑现js的二十四线程的。

一个简练利用的例子,引进Concurrent.Thread.js

Concurrent.Thread.create(function(){ for (var i = 0;i<1000000;i++) { console.log(i); }; }); $('#test').click(function () { alert(1); });

1
2
3
4
5
6
7
8
Concurrent.Thread.create(function(){
    for (var i = 0;i<1000000;i++) {
        console.log(i);
    };
});
$('#test').click(function  () {
    alert(1);
});

即使有个巨大的轮回,但是此时不要紧碍你去触发alert();

是否异常屌~

还会有一种情景,当大家供给渲染三个很复杂的DOM时,比如table组件,复杂的构图等等,就算整个经过供给3s,大家是等待完全处理完结在展现,仍旧使用贰个set提姆eout分片,将内容一片一片的断续彰显。

实质上setTimeout给了笔者们有的是优化交互的长空。

2016年6月29日补充:

近期做了部分与表单相关的类型,使用了h5的input控件,在运用进度中相见了广大的坑。也囊括与那篇小说相关的。

先是大家相应领会使用h5新提供的属性getUserMedia那天个性,是能够调取系统的录像头举行拍录只怕是拍片的,可是宽容性帮助的不得了,所以当大家需求获得系统的多媒体权限期大家都不会利用那几个脾气。

使用<input type="file">标签大家得以直接的呼起系统挑选文件的窗口,来读取系统文件。不过在WebView中,因为安卓权限的难点,大家是不能间接得到读取文件那个操作的。而在原生的浏览器中是荒诞不经这么些难题的。所以接纳选用这些input的时候必定要介意和睦的页面是首要运营在webview中要么浏览器中。借使留意运转在客户端的webvie中,是内需客商端的同室匡助的。

在IOS的有个别系统版本中也会产出那个主题材料。具体的能够参见上面包车型客车参照小说。
参照他事他说加以考察小说:

什么是JSON?

JavaScript 对象表示法(JavaScript Object Notation)。

JSON是一种轻量级的数据沟通格式,有个别JSON格式的文件之中比如能够长成那样:

JavaScript

{ "name": "hanzichi", "sex": "male" }

1
2
3
4
{
  "name": "hanzichi",
  "sex": "male"
}

看起来都是key-value的键值对,很像js的目的啊?没有错,但还要JSON表示不服,作者无法跟js的对象长成同样啊,笔者得有作者要好的本性,于是规定键-值对中的键不可能不用双引号!同不经常候鲜明键-值对中的值的取值有断定须要:

JSON 值可以是:

  1. 数字(整数或浮点数)
  2. 字符串(在双引号中
  3. 逻辑值(true 或 false)
  4. 数组(在方括号中)
  5. 指标(在花括号中)
  6. null

除上述6种外,再无其余,未有像js相同的undefined、NAN,JSON拒绝利用。

干什么选用 SVG?

前言

HTTP 援助 GZip 压缩,可节约数不完传输能源。但缺憾的是,唯有下载才有,上传并不协助。

若果上传也能压缩,那就到家了。非常切合大批量文本提交的场所,比如天涯论坛,就是很好的事例。

尽管如此专门的学业不协理「上传压缩」,但仍可以够协和来贯彻。

哪些接纳

setTimeout这么狠心,那么大家是亟需在在项目中山大学量应用呢?
自己那边的眼光是非常不提出,在大家业务中,基本上是幸免在事情逻辑中使用setTimeout的,因为自己所见到的非常多用到格局皆以一些难点倒霉化解,setTimeout作为四个hack的方法。
举个例子说,当一个实例还一向不开端化的前,大家就使用这么些实例,错误的化解办法是应用实例时加个set提姆eout,确认保障实例先初步化。
怎么错误?这里实在正是行使hack的手段
先是是埋下了坑,打乱模块的生命周期
第二是出现难题时,setTimeout其实是很难调节和测验的。

小编认为准确的行使格局是,看看生命周期(可参看《关于软件的生命周期 》),把实例化提到使用前施行。

综上,setTimeout其实想用好恐怕很艰辛的, 他越来越多的面世是在框架和类库中,举例有个别完结Promis的框架,就用上了setTimeout去贯彻异步。
所以倘若你想去阅读一些源码,想去造一些轱辘,setTimeout照旧必备的工具。

 

打赏援助自个儿写出越来越多好小说,多谢!

打赏作者

引子:

近年来供销合作社项目有个须求,新浪顾客端中, h5 的页面上的某些开关能够与native 交互呼起录像头,扫描二维码并且解析。在非新浪客商端中(微信依旧是原生浏览器,如:safari)呼起系统的拍戏大概上传图片按钮,通过拍戏或然上传图片深入分析二维码。

第三种方案需求在前者 js 深入分析二维码。这样借助三个第三方的剖判库jsqrcode。那个库已经支撑在浏览器端呼起录像头的操作了,但是依赖贰个叫getUserMedia的品质。该属性移动端的浏览器援救的都不是很好,所以只好直接的上传图片的艺术解析二维码。

getUserMedia属性包容浏览器列表:
云顶娱乐 2

首先多谢 jsqrcode 的开采者,提供这么优秀的分析二维码的代码,为本身压缩了非常大的职业量。jsqrcode 地址:点我

小编的代码库地址:点我

什么样行使JSON?

JSON通常以字符串的情势在数码交互进度中游走,so对于js来讲,怎么着将json字符串和js对象时期开展交互转变显得更为关键。

  • eval大法(json字符串 -> js对象)

JavaScript

var jsonStr = '{"name": "hanzichi", "sex": "male"}'; var ans = eval('('

  • jsonStr + ')'); console.log(ans.name, ans.sex); // hanzichi male
1
2
3
var jsonStr = '{"name": "hanzichi", "sex": "male"}';
var ans = eval('(' + jsonStr + ')');
console.log(ans.name, ans.sex); // hanzichi male

eval 函数比一点也不慢,可是它能够编写翻译任何 javascirpt 代码,那样的话就恐怕爆发安全的主题素材。eval 的运用是依据传入的代码参数是牢靠的比方下,有一对意况下,或者顾客端是不可信赖的。即使依据安全的虚构的话,最佳是运用贰个JSON分析器,一个JSON 深入分析器将只接受JSON文本,所以是更安全的,如下。

  • JSON.parse(json字符串 -> js对象)

JavaScript

var jsonStr = '{"name": "hanzichi", "sex": "male"}'; var obj = JSON.parse(jsonStr); console.log(typeof obj, obj); // object Object {name: "hanzichi", sex: "male"}

1
2
3
var jsonStr = '{"name": "hanzichi", "sex": "male"}';
var obj = JSON.parse(jsonStr);
console.log(typeof obj, obj); // object Object {name: "hanzichi", sex: "male"}

第叁个参数能够是函数,能够对值进行删改:

JavaScript

var jsonStr = '{"name": "hanzichi", "sex": "male", "age": 10}'; var obj = JSON.parse(jsonStr, function(key, value) { if(key === 'name') { return 'my name is ' + value; } return value; }); console.log(typeof obj, obj); // object Object {name: "my name is hanzichi", sex: "male", age: 10}

1
2
3
4
5
6
7
8
var jsonStr = '{"name": "hanzichi", "sex": "male", "age": 10}';
var obj = JSON.parse(jsonStr, function(key, value) {
  if(key === 'name') {
    return 'my name is ' + value;
  }
  return value;
});
console.log(typeof obj, obj); // object Object {name: "my name is hanzichi", sex: "male", age: 10}
  • JSON.stringify(js对象 -> json字符串)

JavaScript

var obj = {name: 'hanzichi', sex: 'male', age: '10'}; var jsonStr = JSON.stringify(obj); console.log(jsonStr); // {"name":"hanzichi","sex":"male","age":"10"}

1
2
3
var obj = {name: 'hanzichi', sex: 'male', age: '10'};
var jsonStr = JSON.stringify(obj);
console.log(jsonStr);  // {"name":"hanzichi","sex":"male","age":"10"}

也足以加个参数,规定亟待转接为json字符串的习性(数组格局,跟数组同名的js对象属性才会被更动):

JavaScript

var obj = {name: 'hanzichi', sex: 'male', age: '10'}; var jsonStr = JSON.stringify(obj, ['name']); console.log(jsonStr); // {"name":"hanzichi"}

1
2
3
var obj = {name: 'hanzichi', sex: 'male', age: '10'};
var jsonStr = JSON.stringify(obj, ['name']);
console.log(jsonStr);  // {"name":"hanzichi"}

第一个参数也足以是个函数,能够删选切合条件的性子(可能改变属性值,未有return表示丢掉该属性,return的值表示该key在json字符串中的值)

JavaScript

var obj = {name: 'hanzichi', sex: 'male', age: '10'}; var jsonStr = JSON.stringify(obj, function(key, value) { if(key === 'name') { return 'my name is ' + value; } return value; }); console.log(jsonStr); // {"name":"my name is hanzichi","sex":"male","age":"10"}

1
2
3
4
5
6
7
8
var obj = {name: 'hanzichi', sex: 'male', age: '10'};
var jsonStr = JSON.stringify(obj, function(key, value) {
  if(key === 'name') {
    return 'my name is ' + value;
  }
  return value;
});
console.log(jsonStr);  // {"name":"my name is hanzichi","sex":"male","age":"10"}

仍是能够有第四个参数,能够是数字依旧字符串。

如倘使数字来讲,表示缩进,数字大小超过10了按10甩卖。

JavaScript

var obj = {name: 'hanzichi', sex: 'male', age: '10'}; var jsonStr = JSON.stringify(obj, null, 4); console.log(jsonStr); // { // "name": "hanzichi", // "sex": "male", // "age": "10" // }

1
2
3
4
5
6
7
8
var obj = {name: 'hanzichi', sex: 'male', age: '10'};
var jsonStr = JSON.stringify(obj, null, 4);
console.log(jsonStr);
// {
//     "name": "hanzichi",
//     "sex": "male",
//     "age": "10"
// }

也得以是字符串,会在性质前增加那几个字符串当做前缀,一样字符串长度超过10只截取10:

JavaScript

var obj = {name: 'hanzichi', sex: 'male', age: '10'}; var jsonStr = JSON.stringify(obj, null, 'pre'); console.log(jsonStr); // { // pre"name": "hanzichi", // pre"sex": "male", // pre"age": "10" // }

1
2
3
4
5
6
7
8
var obj = {name: 'hanzichi', sex: 'male', age: '10'};
var jsonStr = JSON.stringify(obj, null, 'pre');
console.log(jsonStr);
// {
// pre"name": "hanzichi",
// pre"sex": "male",
// pre"age": "10"
// }

此处本人有个难点,作者觉着输出应该是之类情势才对啊…

JavaScript

{ "prename": "hanzichi", "presex": "male", "preage": "10" }

1
2
3
4
5
{
"prename": "hanzichi",
"presex": "male",
"preage": "10"
}

辛劳有知道的大大能倾情告诉小编…

Logo字体渲染难题

图标字体一直只是一种 hack。大家在此以前运用二个自定义字体,并将Logo作为 Unicode 符号。那样Logo字体就能够由此包装后的 CSS 来引进。只要简单地在大肆成分上加多二个class,Logo即可显得出来。然后我们只行使 CSS 就能即时退换Logo的尺码和颜料了。

不佳的是,即便那么些Logo是矢量图形,但在 1x 显示器下的渲染效果并倒霉好。在依照 WebKit的浏览器下,Logo大概会在某个窗口宽度下变得模糊。因为那时候Logo是作为文本输出的,本来用于进步公文可读性的次像素渲染技巧反而使Logo看起来倒霉非常多。

Flash

首选方案当然是 Flash,终归它提供了压缩 API。除了 zip 格式,还匡助 lzma 这种一级压缩。

因为是原生接口,所以质量相当高。而且对应的 swf 文件,也相当小。

本文由云顶娱乐发布,转载请注明来源:兑现数据压缩,JSON简单介绍以及用法汇总