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、截留和防抖的区别:
<u>函数节流</u>
函数节流应用的实际场景,多数在监听页面元素滚动事件的时候会用到。因为滚动事件,是一个**高频触发**的事件。声明一个变量当标志位,记录当前代码是否在执行。 如果空闲,则可以正常触发方法执行。 如果代码正在执行,则取消这次方法执行,直接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 <LoadableComponent/>;
}
}
首次加载时会先展示loading-component然后动态加载my-component加载完毕会替换掉loading-component
27、Ajax流程:
<u>1.</u><u>客户端产生js的事件</u><u>2.创建XMLHttpRequest对象</u><u>3.对XMLHttpRequest进行配置</u><u>4.通过AJAX引擎发送异步请求</u><u>5.</u><u>服务器端</u><u>接收请求并且处理请求,返回html或者xml内容</u><u>6.XML调用一个callback()处理响应回来的内容</u><u>7.页面局部刷新</u>
28、React中this的绑定:
1、在constructor里添加:this.函数名=this.函数名.bind(this)
2、<div onClick={this.函数名.bind(this)}></div>
3、<div onClick={()=>{this.函数名()}}></div>
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是持久存在一个窗口载入过的所有页面中的,并不会因新页面的载入而进行重置。
<u>HTML5新引进的</u><u>window.postMessage</u><u>方法跨域传送数据:</u><u>调用postMessage方法的window对象是指要接收消息的那一个window对象,该方法的第一个参数message为要发送的消息,类型只能为字符串;第二个</u>
<u>参数targetOrigin用来限定接收消息的那个window对象所在的域,如果不想限定域,可以使用通配符 * 。</u>
<u>需要接收消息的window对象,可是通过监听自身的message事件来获取传过来的消息,消息内容储存在该事件对象的data属性中。</u>
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空壳,这里也可以善后