在循环显示组件的过程中,设置key时不要贪图方便使用随机数或者直接使用索引,否则会造成不必要的渲染,最好是每个组件的内容一致时key也一致。
windows electron 使用oracledb记录
编译和运行环境:oracle客户端(instantclient-basic-windows.x64-12.2.0.1.0)并且将其添加到环境变量,c++运行库(vcredist_x64)。参考地址:https://github.com/oracle/node-oracledb/blob/master/INSTALL.md#quickstart
编译环境:vs2017,python2.7,C++ Build tools(可以使用该工具生成windows-build-tools),node-pre-gyp,electron-rebuild(参考地址:https://electronjs.org/docs/tutorial/using-native-node-modules#%E4%BE%9D%E8%B5%96%E4%BA%8E-node-pre-gyp-%E7%9A%84%E6%A8%A1%E5%9D%97)
通过npm安装oracledb后需要执行electron-rebuild重新编译后才能使用;
windows-build-tools:npm –add-python-to-path –vs2017 install –global windows-build-tools
electron-rebuild:.\node_modules\.bin\electron-rebuild.cmd
react 子父组件生命周期执行顺序
先执行子组件的componentDidMount,再执行父组件的componentDidMount
先执行父组件的render,然后子组件该走的生命周期走一遍
js console
不属于es的规范,浏览器和node把他当做一个不成文的规定来实现他
简单请求和非简单请求
只要同时满足以下两大条件,就属于简单请求。
(1) 请求方法是以下三种方法之一:
- HEAD
- GET
- POST
(2)HTTP的头信息不超出以下几种字段:
- Accept
- Accept-Language
- Content-Language
- Last-Event-ID
- Content-Type:只限于三个值
application/x-www-form-urlencoded
、multipart/form-data
、text/plain
凡是不同时满足上面两个条件,就属于非简单请求。
非简单请求浏览器会自动发出一个options的预请求
Macrotask Queue和Microtask Queue
分别为大任务和小任务
js开始运行时会分析代码,先执行大任务中的第一个,然后执行小任务中的所有,再执行大任务中的第二个,循环执行;
console.log('start') setTimeout(function () { console.log('time out') }, 0) Promise.resolve().then(function () { console.log('p1') }).then(function () { console.log('p2') }) Promise.resolve().then(function () { console.log('p3') }).then(function () { console.log('p4') }) console.log('end') start end p1 p3 p2 p4 time out
vue 数据监听
observer-dep-watch
1.对数据循环递归设置get,set方法;
2.每一个属性都有一个dep进行依赖管理,管理对应的多个watch;
3.修改属性的值时会触发watch的回调方法;
http 缓存小记
强制缓存:浏览器通过服务器端返回的Expires(到期时间)/Cache-Control来决定是否需要再次请求数据
对比缓存:服务器返回Last-Modified/Etag, 浏览器请求的时候将返回的数据通过If-Modified-Since/If-None-Match传回给服务器,服务器通过对比返回的数据告诉浏览器是否需要更新(304/200)
当两个规则都存在时,先执行强制缓存,再执行对比缓存
Cache-Control
private: 客户端可以缓存(默认)
public: 客户端和代理服务器都可缓存
max-age=xxx: 缓存的内容将在 xxx 秒后失效
no-cache: 需要使用对比缓存来验证缓存数据
no-store: 所有内容都不会缓存
url 小记
url:scheme://username:password@address:port/path?querry#fragment
#fragment: 指向页面的某个锚点 或者存储一些临时信息
js Number.EPSILON
Number.EPSILON实际上是 JavaScript 能够表示的最小精度。误差如果小于这个值,就可以认为已经没有意义了,即不存在误差了。