2019-07-01

BTW,这里虽然将http切换为了https,还是建议保留http。所以我们在切换的时候可以做http和https的兼容,具体实现方式是,去掉页面链接中的http头部,这样可以自动匹配http头和https头。例如:将http://www.baidu.com改为//www.baidu.com。然后当用户从http的入口进入访问页面时,页面就是http,如果用户是从https的入口进入访问页面,页面即使https的。

19、git语句:

G****it init初始化

G****it status 查看状态

G****it add xxx.py 添加要推送的文件

G****it commit -m ‘****备注****’**** 推送文件到本地仓库

G****it pull origin master 拉代码

G****it push -u origin master 推送git远程仓库第一次推送写-u

G****it clone ‘****路径****’**** 克隆远程仓库到本地

G****it add .监控工作区的状态树

G****it add -u git add --update的缩写监控已经被add的文件,将修改的文件提到暂存区

20、数字摘要:

C****ookie、session

Cookie:为了弥补http协议无状态的不足,可以理解为http协议的扩展

21、Es6新特性:

· L****et、const有块级作用域,使用let声明的变量可以重新赋值,但是不能在同一作用域内重新声明,使用const声明的变量必须赋值初始化,但是不能在同一作用域类重新声明也无法重新赋值.

模板字符串${}

解构:[]表示被解构的数组,{}被解构的对象

F****or...of循环:结合for和for...in循环的优势,可以循环任何迭代的类型的数据,包含以下数据类型:String、Array、Map 和 Set,注意不包含 Object 数据类型(即 {})。默认情况下,对象不可迭代。

For循环的缺点:需要跟踪计数器和退出条件,并非始终适合使用loop循环。

展开运算符:...

箭头函数和this:对于普通函数, this的值基于函数如何被调用, 对于箭头函数,this的值基于函数周围的上下文, 换句话说,this的值和函数外面的this的值是一样的.

22、Async控制并发:

23、简单说下开启gulp加速的一些方法:

1、html5 video,bing首页动态背景使用video的原因之一吧。

2、transition 和 animation(在ipad上使用会开启gulp加速)。

3、-webkit-transform-style:preserve-3d; -webkit-transform: translate3d(0,0,0); 。

4、给元素transform加上translateZ(0px),iScroll采用的方法。

按照上述方法开启gulp加速后,涉及到的区域就会被gpu直接渲染在屏幕对应区域,不用和浏览器进程共享内存和减轻cpu负担是gpu加速的理论原理。

24、截留和防抖的区别:

函数节流

   函数节流应用的实际场景,多数在监听页面元素滚动事件的时候会用到。因为滚动事件,是一个**高频触发**的事件。声明一个变量当标志位,记录当前代码是否在执行。   如果空闲,则可以正常触发方法执行。   如果代码正在执行,则取消这次方法执行,直接return。

函数防抖

函数防抖的应用场景,最常见的就是用户注册时候的手机号码验证和邮箱验证了。只有等用户输入完毕后,前端才需要检查格式是否正确,如果不正确,再弹出提示语。

25、Vue的性能优化:

1、路由懒加载

2、V-if v-show的选择调用

3、为item设置唯一key值

4、减少watch的数据

5、Ssr服务端渲染

26、React的性能优化:

ShouldComponentUpdate避免重复渲染

组件尽可能的进行拆分、解耦

引用react的高阶组件react-loadable进行动态import

import Loadable from 'react-loadable'``;

import Loading from './loading-component'``;

const LoadableComponent = Loadable({

  loader: () => import(``'./my-component'``),

 loading: Loading,

});

export default class App extends React.Component {

  render() {

       return ;

  }

}

首次加载时会先展示loading-component然后动态加载my-component加载完毕会替换掉loading-component

27、Ajax流程:

1.客户端产生js的事件2.创建XMLHttpRequest对象3.对XMLHttpRequest进行配置4.通过AJAX引擎发送异步请求5.服务器端接收请求并且处理请求,返回html或者xml内容6.XML调用一个callback()处理响应回来的内容7.页面局部刷新

28、React中this的绑定:

1、在constructor里添加:this.函数名=this.函数名.bind(this)

2、

3、

{this.函数名()}}>

4、函数名=()=>{}

29、Ajax跨域:

Jsonp跨域:原理:通过script标签引入js文件,js文件成功后执行在url参数指定的函数,会把我们需要的json数据作为参数传入。所以需要服务端的页面进行相应的配合,通过$getJsonp方法判断是否跨域

通过修改document.domain跨域:浏览器的同源策略1.不能通过ajax请求不同源中的文档,2.浏览器中不同域的框架之间不能进行js交互,但能获得window对象,但不能获得window的属性和方法,这时document.domain上场,把http:www.com和http://.html两个页面的document.domain设置成相同的域名就可以了。注意:只能把document.domain设置成自身或更高一级的父域,且主域必须相同

window.name进行跨域:即在一个窗口(window)的生命周期内,窗口载入的所有的页面都是共享一个window.name的,每个页面对window.name都有读写的权限,window.name是持久存在一个窗口载入过的所有页面中的,并不会因新页面的载入而进行重置。

HTML5新引进的window.postMessage方法跨域传送数据:调用postMessage方法的window对象是指要接收消息的那一个window对象,该方法的第一个参数message为要发送的消息,类型只能为字符串;第二个

参数targetOrigin用来限定接收消息的那个window对象所在的域,如果不想限定域,可以使用通配符 * 。

需要接收消息的window对象,可是通过监听自身的message事件来获取传过来的消息,消息内容储存在该事件对象的data属性中。

1、Cookie、session:

Cookie:解决http无状态,

2、样式权重值:

代表内联样式,如: style=””,权值为1000。

代表ID选择器,如:#content,权值为100。

代表类,伪类和属性选择器,如.content,权值为10。

代表类型选择器和伪元素选择器,如div p,权值为1。

3、选择器权重值:

Div a : div的里的所有a

Div>a : div子元素a

Div+a : div相邻a

Div~a : div相邻所有a

4、Hash:

1.1.浏览器的路由变化,页面内容跟着变化

1.2.页面内容变换,浏览器的内容跟着变化

实现过程:

1.3.设定一个页面按钮,点击按钮时,改变页面的内容

1.4.设定浏览器的内容,跟随页面内容的变化而变化,即:直接赋值给浏览器的hash属性就可以了

1.5.监听浏览器的hash值,如果hsah改变了,则页面内容跟随变化

2.类似的,通过页面的无刷新,仅改变页面的 hash 值,而达到页面内容的变更

2.1 构造一个路由函数

2.2 对路由的hash值进行监听,如果hash 发生改变,则执行加载函数

2.3 定义路由配置规则

2.4 对路由进行初始化即调用

5、类数组转化为数组:

6、纯函数与非纯函数的区别:

一个函数的返回结果只依赖于它的参数,并且在执行过程里面没有副作用

7、Webpack:

8、浏览器进程:

5个进程:

GUI渲染线程:

JS引擎线程:与GUI互斥

事件触发线程:

定时触发器线程:setTimeout,setInterval

异步http请求线程:

9、节流与防抖:

函数节流应用的实际场景,多数在监听页面元素滚动事件的时候会用到。因为滚动事件,是一个高频触发的事件

函数防抖的应用场景,最常见的就是用户注册时候的手机号码验证和邮箱验证了。只有等用户输入完毕后,前端才需要检查格式是否正确,如果不正确,再弹出提示语

10、Ajax流程:

1.客户端产生js的事件 2.创建XMLHttpRequest对象 3.对XMLHttpRequest进行配置 4.通过AJAX引擎发送异步请求 5.服务器端接收请求并且处理请求,返回html或者xml内容 6.XML调用一个callback()处理响应回来的内容 7.页面局部刷新

11、单页面应用:

指一个系统只加载一次资源,之后的操作交互、数据交互是通过路由、ajax来进行,页面并没有刷新。特点是加载次数少,加载以后性能较高, 不利于seo, 如果页面支持h5可以用h5模式+服务器路由rewrite+h5 history api去掉路由的锚点,和搜索软件优化lib进行seo优化。

在单页面应用中,通常是由一个外部框架和一个一个组件组成的,界面之间的切换其实就是组件的移除和新组建的添加。

在多页面中,则可以看到导航栏中地址的变化,是从一个完整的页面跳转到另一个完整的页面(注意区分页面和界面)。

12、Ssr : 服务器端渲染

服务端渲染的核心就在于:通过vue-server-renderer插件的renderToString()方法,将Vue实例转换为字符串插入到html文件

13、addEventLister、attachEvent:

attachEvent是后绑定先执行,addEventListener是先绑定先执行。attachEvent必须带on,如onclick,onmouseover等,而addEventListener不能带on,如click,mouseover。这个区别在以上代码中可见.attachEvent仅需要传递两个参数,而addEventListener需要传递三个参数

false默认:冒泡;true:捕获

RemoveEventLister(元素,函数,true);

14、Redux流程:

store(存放状态) -> container(显示状态) -> reducer (处理动作)-> store

由三大元素组成:

Action:就是普通的JavaScript对象,有type:属性。

Reducer:执行的操作:修改传入的参数、调用非纯函数

store:维持应用的state、提供getState()获取state、提供dispatch(action)更新state、通过subscribe(listener)注册监听器返回的函数注销监听器

15、Webpack工作流程:

初始化参数

开始编译:加载配置插件

确定入口:entry找入口文件

编译模块:loader对模块进行翻译,找模块依赖,递归一直到全部都处理完。

完成模块编译:得到每个模块被翻译后的最终内容和依赖关系

输出资源:根据入口和模块之间的关系,组装成

输出完成:根据配置确定输出的路径和文件名,把文件内容写到文件系统

Entry:入口文件 module:模块

Chunk:代码块

loader:模块转换器

Plugin:扩展插件

16、省略号:

1、div内显示两行或三行,超出部分用省略号显示

overflow: hidden;      text-overflow: ellipsis;      display: -webkit-box;      -webkit-line-clamp: 2;(行数)      -webkit-box-orient: vertical;

2、div内显示一行,超出部分用省略号显示

white-space: nowrap;      overflow: hidden;      text-overflow: ellipsis;

17、Nodejs部署:

买服务器,得到密钥,开始远程服务器端环境配置,先打开cmder,

ssh 服务器用户名@自己的服务器ip地址,

创建个人目录

安装node,配置node到全局环境

安装git、PHPStudy

启动PHPStudy,

配置mysql为全局变量

应用代码部署,用git同步到线上

同步数据库

18、React生命周期:

constructor():构造函数

执行:组件加载钱最先调用一次,仅调用一次。

作用:定义状态机变量。

注意:第一个语句必须为super(), 否则会报错:'this' is not allowed before super()

componentWillMount()

执行:组件初始渲染(render()被调用前)前调用,仅调用一次。

作用:如果这个函数调用的setState改变了组件的某些状态,react会等待setState完成后再渲染组件。

注意:子组件也有componentWillMount函数,在父组件的该函数调用后再调用。

render()

执行:componentWillMount调用之后, componentDidMount调用之前。

作用:渲染挂载组件。

触发:1、初始化加载页面,2、状态机改变setState,3、接收新的props(父组件更新)

注意:组件必要函数,不能在函数内使用setState改变状态机。

componentDidMount()

时间:render之后被调用,仅调用一次。

作用:渲染挂载组件,可以使用refs(react支持的一个特殊属性,可以将它加在render函数返回的组件元素上,起一个标记作用,方便定位。)

注意:子组件也有该函数,在父组件调用前调用;如果该函数内有setState改变状态机,将会重新渲染组件,如果需要在页面初始化之后才改变状态机的,可以将网络请求放在该函数内。

componentWillReceiveProps(nextProps)

时间:组件渲染后,当组件接收新的nextProps时被调用。函数接收一个新的nextProps对象,nextProps是父组件传给子组件的。父组件render之后就会被调用。

作用:渲染挂载组件,可以使用refs(react支持的一个特殊属性,可以将它加在render函数返回的组件元素上,起一个标记作用,方便定位。)

注意:react初次渲染时不会被调用。

shouldComponentUpdata(nextProps, nextState)

时间:组件执行render函数之后,接收新的props或state时被调用,即每次执行setState都会执行该函数,来判断是否重新渲染组件,默认返回true,接收两个参数。

作用:如果有些变化不需要执行渲染组件,可在该函数内阻止。

注意:不能在该函数内使用setState来改变状态机,如需要,请在componentWillReciveProps中改变。

componentDidUpdata()

时间:组件重新渲染后调用,在初始化渲染的时候该方法不会被调用。

作用:使用该方法可以在组件更新之后操作DOM元素。

componentWillUnmount()

时间:组件卸载之前调用。

作用:在该方法中执行必要的清理,比如无效的定时器后者在componentDidMount中创建的DOM元素。

注意****:当一个页面中存在父子组件的时候,要特别注意componentDidMount的使用,因为子组件的componentDidMount会比父组件先调用,从而会引起父子组件传参错误。

19、Vue生命周期:

beforeCreate:刚刚new Vue()之后,这个时候,数据还没有挂载呢,只是一个空壳

created:这个时候已经可以使用到数据,也可以更改数据,在这里更改数据不会触发updated函数,在这里可以在渲染前倒数第二次更改数据的机会,不会触发其他的钩子函数,一般可以在这里做初始数据的获取'接下来开始找实例或者组件对应的模板,编译模板为虚拟dom放入到render函数中准备渲染

beforeMount:虚拟dom已经创建完成,马上就要渲染,在这里也可以更改数据,不会触发updated在这里可以在渲染前最后一次更改数据的机会,不会触发其他的钩子函数,一般可以在这里做初始数据的获取

Render:接下来开始render,渲染出真实dom

mounted:此时,组件已经出现在页面中,数据、真实dom都已经处理好了,事件都已经挂载好了可以在这里操作真实dom等事情

beforeUpdate:重新渲染之前触发然后vue的虚拟dom机制会重新构建虚拟dom与上一次的虚拟dom树利用diff算法进行对比之后重新渲染

updated:数据已经更改完成,dom也重新render完成

beforeDestory:销毁前执行($destroy方法被调用的时候就会执行),一般在这里善后:清除计时器、清除非指令绑定的事件等等...

destroyed:组件的数据绑定、监听...都去掉了,只剩下dom空壳,这里也可以善后

你可能感兴趣的:(2019-07-01)