Comments (2)
Worker
背景
- js是单线程的,
好处很多,如毕竟DOM只有一份,如果多个线程同时操作DOM岂不是大乱;
当然坏处也不少,如耗时的计算(也可让接口做)影响用户体验;
宗旨
- 不打扰用户
DOM操作,alert,confirm都不能使用的 - 一对一的,只能和创建Worker的脚步(window,Worker)进行通讯
专用WebWorker,
共享WebWorker
通过Worker(scriptURL)
告诉浏览器把scriptURL指定的JS新开线程执行。
一个挺有意思的问题:浏览器都有哪些加载JS方式 ?
- window上下文中:script标签,Worker(), SharedWorker(),ServiceWorkerContainer.register
- Worker上下文中:importScripts(),并且还是同步的这样可以实现前后依赖加载,也可以通过多个参数并行加载。忽然意识到script标签也是通过同步的方式加载JS的(不过可以添加属性控制)
依赖的技术
- 结构化克隆算法
- MessageChannel
参考
from note.
重新认识JSON.stringify
因看到结构化copy而导致的血案X:有必要认真看下JSON.stringify
方法了。
本质就是把JS对象序列化成JSON字符串,但也没那么简单。
1. 关于方法名字stringify
说实话之前一直记不清后面几个字母。后来特意查了下原来字符ify
作为后缀有特殊含义的:
与形容词和名词相结合,也可以加缀在词根后面,构成的动词多是及物的
2. 语法
JSON.stringify(value[, replacer [, space]])
2.1 参数value
好吧我平时只用到这个参数。因为JSON的类型比JS类型少,并不是所有的JS数据都可以进行JSON序列化的,详细的见MDN列举的五点注意事项
2.2 参数replacer
- 数组类型
以白名单
的方式指定需要被序列化的属性名称,并且会影响对象以及其子对象的属性的名称
var obj = {
a: 1,
b: 2,
c: {
a: 21,
b: 22
}
}
// 不仅属性obj.b没忽略了,obj.c.b属性也被忽略了
console.log(JSON.stringify(obj, ['a', 'c'],)) //{"a":1,"c":{"a":21}}
- 函数function(key, value)
如果是个函数的话在序列化过程中把所有的属性key-value对作为参数调用该回调函数。函数的返回值作为序列化的value输出:
如果返回一个 Number, 转换成相应的字符串被添加入JSON字符串。
如果返回一个 String, 该字符串作为属性值被添加入JSON。
如果返回一个 Boolean, "true" 或者 "false"被作为属性值被添加入JSON字符串。
如果返回任何其他对象,该对象递归地序列化成JSON字符串,对每个属性调用replacer方法。除非该对象是一个函数,这种情况将不会被序列化成JSON字符串。
如果返回undefined,该属性值不会在JSON字符串中输出。
注意:
- 如果返回值为
undefined
则忽略改属性(数组元素会用null取代),所以说函数类型的参数像是个黑名单
机制,而数组类型的参数像是个白名单
机制。 - 第一次调用时会把
stringify
方法的参数1作为改回调函数的value,此时key取值为空窜。这样就要需要被序列化的值和序列化其属性统一处理了(走递归序列化逻辑)
2.3参数space
主要用来格式化输出的JSON字符串。
3. *操作:toJSON方法
在序列化过程中,如果对象包含toJSON方法,JSON.stringify会调用value.toJSON方法的返回值作为序列化的value,并且JSON.stringify调用toJSON方法时会传入参数:
- 如果该对象是JSON.stirngify的value参数,则参数是空字符串;
- 如果被序列的对象是对象的属性,则参数是属性名称(string );
- 如果被序列的对象是数组的元素,则参数是该对象所在的下标。
本质上就是用toJSON
方法的返回值替代被序列化的对象本身。而JSON.stringify
参数2用用来修改被序列对象的属性。
参考
from note.
Related Issues (20)
- Objective-C: @property, @synthesize, @dynamic HOT 2
- Base64
- IOS App Extension HOT 1
- Monorepos: Lerna VS npm/yarn/pnpm workspace HOT 1
- UIImage vs. CIImage vs. CGImage
- NSArray, NSMutableArray HOT 1
- nil, Nil, NULL, NSNull
- IOS 开发 HOT 5
- UIViewController HOT 3
- Formik 引发的Out of Memory异常
- 浏览器禁用JS之后
- App Clips & Google Play Instant HOT 2
- RN布局 & 适配 HOT 2
- PWA HOT 1
- App内置浏览器
- 实现RN轮播(走马灯/Swiper/Carousel/Snap/Tab )组件 HOT 1
- Deferred Deep Link
- Lottie
- RN-SafeAreaView
- RN-Image & ImageBackground HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from note.