react 组件的key属性

在循环显示组件的过程中,设置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

简单请求和非简单请求

只要同时满足以下两大条件,就属于简单请求。

(1) 请求方法是以下三种方法之一:

  • HEAD
  • GET
  • POST

(2)HTTP的头信息不超出以下几种字段:

  • Accept
  • Accept-Language
  • Content-Language
  • Last-Event-ID
  • Content-Type:只限于三个值application/x-www-form-urlencodedmultipart/form-datatext/plain

凡是不同时满足上面两个条件,就属于非简单请求。

非简单请求浏览器会自动发出一个options的预请求

Macrotask Queue和Microtask Queue

分别为大任务和小任务

js开始运行时会分析代码,先执行大任务中的第一个,然后执行小任务中的所有,再执行大任务中的第二个,循环执行;

macrotasks: script,setTimeout, setInterval, setImmediate, I/O, UI rendering microtasks: process.nextTick, Promises, Object.observe, MutationObserver
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 能够表示的最小精度。误差如果小于这个值,就可以认为已经没有意义了,即不存在误差了。