document
document copied to clipboard
js玄学
#### 动态规划 ```js 题目 1+1+1+1+1+1 A:上面的等式值是多少呀 B:(奋笔疾书计算)...等于6 A:那在上面的等式前面再写上"1+"呢?1+1+1+1+1+1+1,现在等于多少呀 B:(迅速作答)等于7 A:这次你为什么这么快就算出来了呀? B:因为这次只要在6的基础上再加1就可以了,不需要再重新计算一遍了 ``` 动态规划的核心就是:**记住已经解决过的子问题的解。those who cannot remember the past are condemned to repeat it** ##### 题目一:斐波拉契数列 fibonacci(0) = 0 fibonacci(1) =...
### 项目背景 redskull2: 0.0.49版本 ### 触发条件 修改js代码热加载时,报下面的错误自动退出 ``` [43697:0x103800600] 342449 ms: Mark-sweep 1365.6 (1403.2) -> 1365.4 (1402.7) MB, 344.7 / 0.0 ms (average mu = 0.781, current mu = 0.000)...
# 浏览器的垃圾回收机制 ------ ### 1. 为什么要了解垃圾回收机制 - 内存泄露:是指一块被分配的内存既不能使用,又不能回收,直到浏览器进程结束 - 堆栈溢出与内存泄露 ``` let a = ()=>{ b() } let b = () => { a() } a() Error: Uncaught RangeError: Maximum...
# 上传文件 `js` `html` > 每次用原生写文件上传都要重新查一遍资料,这次写完总结一下吧 ### html css ``` //将input调成透明(opacity: 0),移到一个不重要的位置上去 上传< /label> ``` ### js ajax ``` //触发input的onchange事件 //ajax let data = new FormData() data.append('file',$('#upload')[0].files[0]) $.ajax({ url:'upload', type:'POST',...
# Service Workers `js` ### 简介 service是一个注册在一个指定源和路径下,由事件驱动[web worker][1] ,通过注册的js文件控制相关联的页面,拦截或修改访问和资源请求。赋予你很大很大的权限去控制你的app在某一个状态下的表现(最常使用在离线的情况下) 由于servive worker是web workers类型中的一种,同样也运行在一个worker上下文环境中,因此web worker有的特性他都会有:比如不能访问dom,运行在一个单独线程下而不会阻塞主线程,完全异步的设计致使同步的xhr和localStorage都不能被使用(但是可以使用IndexedDB) 出于安全考虑,service workers只能在https下运行,因为其逆天的可以伪造,过滤,修改网络请求的功能如果有人在中间恶意攻击情况会非常糟糕,在火狐浏览器中,service worker会不能使用如果用户打开了用户隐私模式。而service workers之所以优于以前的同类尝试(如AppCache),是因为它们无法支持当操作出错时终止操作。Service workers可以更细致地控制每一件事情。 ### 生命周期 service workers拥有一个完全独立与web页面的生命周期 * Registration 注册 (准备) service worker首次进入页面时会调用[ServiceWorkerContainer.register()][2]方法注册。如果注册成功,service worker就会被下载到客户端并尝试之后的安装和激活,作用于整个域内用户可访问的URL,或者其特定子集。 *...
# Web Workers --- > 12月20号发布的Safri浏览器内核webkit表示自己开始支持service workers,这就意味的主流浏览器(window下的chorme和Firefox,ios下的Safri,ie.....嗯,先不管他)都支持service workers,web app离线缓存页面将不是梦~ > Service workers 其实是web workers中的一种类型,所以在学习使用service workers之前,我们先来看看web workers是啥,有哪些类型,都能干些什么吧 ### 整体介绍: **Web Workers**使script能够单独地运行在一个独立的线程中,这意味着我们可以将一些有复杂的逻辑计算的js放在其他线程下工作,而不去阻塞主线程(一般是ui渲染)的运行 ### 概念和使用: worker是通过构造函数【Worker(filterName.js) 】生出来的Object,这个js文件里写的代码会单独运行在一个新的执行环境(context)中而不是当前的window,这个工作环境其实是一个[DedicatedWorkerGlobalScope][1]对象,*(对于dedicated类型的worker是他,对于shared类型的worker是[SharedWorkerGlobalScope][2])*. 理论上在这个worker线程下你想干啥就干啥,但是还是有一些例外,比如,你没有办法在worker中直接操作dom,也没办法使用window对象一些默认的方法和属性,不过呢,window下还是有很多功能你可以直接使用的,像webSockets,一些存储工具indexedDB啊,还有一个火狐浏览器搞的Data Store啊~,具体请参考 [Functions and classes available...
# 关于元素到窗口距离的一些整理 ------ 在做懒加载和一些高度改变的动画时,我们需要知道元素在窗口中的位置,下面是这次整理的一些元素偏移量介绍  ### 1. 浏览器的一些属性 - screen.height/width,屏幕的高/宽,与显示器的分辨率有关 - screen.availHeight/availWidth,屏幕有效区域的高/宽,相比较height/width少去了菜单栏的所占位 - scrollY/pageYOffset,浏览器垂直滚动条滚动的距离,随着滚动条位置的不同而改变 - dom.scrollTo(x,y),修改浏览器的滚动位置 > screen值获取到的是整个屏幕的宽高,并不会随着浏览器窗口缩放而改变 ### 2. offsetParent(定位父级) 在理解偏移大小之前,首先要理解offsetParent。人们并没有把offsetParent翻译为偏移父级,而是翻译成定位父级,很大原因是offsetParent与定位有关。定位父级offsetParent的定义是:**与当前元素最近的经过定位(position不等于static)的父级元素。**主要分为下列几种情况: - 元素自身有fixed定位,offsetParent的结果为null。当元素自身有fixed固定定位时,我们知道固定定位的元素相对于视口进行定位,此时没有定位父级,offsetParent的结果为null - 元素自身无fixed定位,且父级元素都未经过定位,offsetParent的结果为``。 - 元素自身无fixed定位,且父级元素存在经过定位的元素,offsetParent的结果为离自身元素最近的经过定位的父级元素 - ``元素的parentNode是null...
# 使用Visual Studio Code对Node.js进行断点调试 `node` `vscode` ### 进入vscode,前往虫子的那个页面  ### 点击调试旁边的那个下拉框,选择“添加配置”  ### 选择Node.js:启动程序  之后,项目的根目录会生成一个.vscode的目录,这个目录中存放了各种各样的VScode编译器的配置。现在这个文件夹下面就放了一个叫launch.json的文件,是我们debug的配置入口。  - 现在 launch.json已经自动为我们生成了一些配置项字段,具体的配置项字段可以参考https://go.microsoft.com/fwlink/?linkid=830387 的解释。 - 其中比较重要的是**program**字段,这个字段定义了整个调试器的入口,开启调试器的时候会从这个入口启动程序。 - 一般生成 lanch.json的时候这个字段已经有值了,这是因为VScode在初始化launch.json的时候会查看项目的**package.json**中是否有包含键名为**start**的scripts,如果有的话,就会把start配置的内容作为program字段的值。 - 我这个项目是通过 dev 命令来启动服务的,将dev后面的内容修改到...
Bumps [json5](https://github.com/json5/json5) from 2.1.1 to 2.2.3. Release notes Sourced from json5's releases. v2.2.3 Fix: [email protected] is now the 'latest' release according to npm instead of v1.0.2. (#299) v2.2.2 Fix: Properties...
Bumps [decode-uri-component](https://github.com/SamVerschueren/decode-uri-component) from 0.2.0 to 0.2.2. Release notes Sourced from decode-uri-component's releases. v0.2.2 Prevent overwriting previously decoded tokens 980e0bf https://github.com/SamVerschueren/decode-uri-component/compare/v0.2.1...v0.2.2 v0.2.1 Switch to GitHub workflows 76abc93 Fix issue where decode...