自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(15)
  • 收藏
  • 关注

原创 vue diff

虚拟dom优点:减少不必要的dom操作跨平台(本质就是js对象模拟了dom)虚拟dom缺点:需要额外的创建函数如vue的h函数和react的creatElement函数如何解决?:react有jsx,vue有template,但是这两个的缺点就是需要额外的构建过程,把它转换为标签。...

2020-10-04 09:43:01 128

原创 网络安全

XSS,跨站脚本攻击原理:攻击者往网页中插入恶意script代码,用户访问网页时,代码运行,导致攻击。反射型:用户制作好攻击连接,用户点击,返回攻击页面,代码被执行。持久型:评论等处,直接输入代码,被提交到服务器存储,等以后访问此页面的所有人,会加载代码评论,导致攻击。Dom型解决:对特殊字符转义,如<>转意义 &lt &gt禁止浏览器访问的cookie设置为httponly响应头X-XSS-Protection:0:禁用XSS保护;1:启用XSS保护;(默认

2020-09-23 09:26:31 196

原创 ES6之let,const

var的声明提升var声明及其变量提升:变量的声明提升到函数顶部,但是初始化依旧停留在原地执行。(详情参考js预编译文章)function A(){ if(true){ var a = 10; }}//预编译阶段变量提升:function A(){ var a; if(true){ a = 10; }}块级声明块级声明用于声明指定块的作用域之外无法访问的变量:函数内部块中({}之间的区域)letlet声明不被提升,可以把变量的作用域限制在当前代码块中。

2020-09-22 16:08:03 123

原创 SEO,网页优化等,服务端客户端渲染

SPA(单页面应用)什么是spa应用:整体只有一个html作为框架,通过window.history 或 location.hash动态改变路由,js监控到路由变化后动态清除页面内容再添加进新的内容来显示。(路由由前端来管理了,后端只需要提供数据接口即可)优点:页面切换快:每次切换跳转时,不需要请求html,这样就节约了很多HTTP发送时延。页面无刷新:对用户的响应非常及时,因此提升了用户体验.前后端分离API共享:同一套后端程序代码,不用修改就可以用于Web界面、手机、平板等多种客户端。

2020-09-22 14:58:36 216

原创 跨域

产生跨域的原因浏览器同源策略同源策略/SOP(Same origin policy),是浏览器最核心也最基本的安全功能,如果缺少了同源策略,浏览器很容易受到XSS、CSFR等攻击。所谓同源是指"协议+域名+端口"三者相同,即便两个不同的域名指向同一个ip地址,也非同源。解决方案通过jsonp跨域document.domain + iframe跨域location.hash + iframewindow.name + iframe跨域postMessage跨域跨域资源共享(CORS)

2020-09-22 10:04:43 228

原创 原型/原型链

每个函数都有一个prototype(原型)属性,这个属性是一个指针,指向一个对象。这个对象包含特定类型的所有实例的属性和方法。也就是,prototype是通过调用构造函数而创建的那个对象实例的原型对象。使用原型对象,可以让所有对象实例共享它所包含的属性和方法。理解原型对象只要创建了一个函数,该函数就会拥有一个prototype属性,指向该函数的原型对象。默认情况下,所有原型对象都会自动获得一个constructor(构造函数)属性,这个属性是一个指向prototype所在函数的指针。创建了自定义构造

2020-09-17 16:22:42 110

原创 vue生命周期

new vue(),vue构造函数内调用init进行初始化,配置项的合并init内依次初始化:生命周期,事件(initEvents只会挂载自定义事件,即组件中使用v-on监听的非native的事件),render函数调用beforeCreate钩子。同样是init内,主要进行初始化数据和方法,依次初始化:props,methods,data,computed,watchers。并且在进行初始化时,进行数据的响应式处理。调用created钩子init内最后一步,$mount..

2020-09-17 15:24:28 213

原创 对象创建/继承

工厂模式函数封装创建对象的细节 function Person(nam, age) { var o = new Object(); o.name = name; o.age = age; o.getName = function () { alert(this.name) }; return o; }

2020-09-16 14:27:43 99

原创 js运行机制 与 浏览器进程

浏览器是多进程的,打开一个tab页就是打开一个进程。进程是cpu资源分配的最小单位,线程是cpu调度的最小单位。页面的渲染,JS的执行,事件的循环,都在一个进程(浏览器内核(渲染进程))内进行。所以一个tab页的进程内有很多线程来处理这些操作。渲染进程GPU渲染线程负责渲染浏览器界面,解析HTML,CSS,构建DOM树和Render树,回流和重绘等。当界面需要重绘(Repaint)或由于某种操作引发回流(reflow)时,该线程就会执行。GUI渲染线程与JS引擎线程是互斥的,当JS引擎执行时.

2020-09-15 14:51:16 417

原创 vue---组件开发

vue可以进行很好的组件化开发。页面每个部分都被抽取成一个个的组件(就像页面布局有很多box一样),这些组件有自己的data、methods。这些组件自己能管理好自己,从而更好服务于整体(不必整体去管理部分)。组件分类独立组件(在不同项目间可复用,独立性复用性很高,很通用)业务基础组件(在当前项目内很多部分都会用到的组件,项目内通用,脱离项目无用)页面组件(只在当前页面内使用的组件)组件开发数据:从父组件接收数据,接收自定义的配置数据,使用prop。组件内部自己的数据,使用data。

2020-09-13 13:59:03 347

原创 用户状态存储,浏览器存储

cookie,session,token产生原因:http协议无状态性。即每次服务端接收到客户端的请求时,都是一个全新的请求,服务器并不知道客户端的历史请求记录;Session 和 Cookie 的主要目的就是为了弥补 HTTP 的无状态特性。session:客户端请求服务端,服务端会为这次请求开辟一块内存空间,这个对象便是 Session 对象。服务器可以利用 Session 存储客户端在一个会话期间的一些操作记录。(servlet中就可以生成session,然后存入登入信息,在一个会话内可

2020-09-13 09:50:24 299

原创 https

http与https:http为明文传输,不安全,https在tcp和http之间加入ssl/tls安全协议来加密。在tcp三次握手后在进行ssl/tsl握手进入加密报文传输。为什么不在客户端直接加密,比如用MD5加密:MD5 并不是加密算法,其全称是 Message Digest Algorithm MD5,意为信息摘要算法,是一种不可逆的哈希算法,也就是说经过前端 MD5 处理过的数据在服务器端是无法复原的。这里以密码举例,前端把用户密码通过 MD5 进行处理,并把得到的哈希值发送给服务器,服务器

2020-09-13 08:36:09 630

原创 http

http用于从WWW服务器传输超文本到本地浏览器的传输协议。HTTP协议和TCP协议是不冲突的,HTTP定义在七层协议中的应用层,TCP解决的是传输层的逻辑。HTTP使用TCP而不是UDP的原因在于打开一个网页必须传送很多数据,而TCP协议提供传输控制,按顺序组织数据,错误纠正等功能。(可靠传输)HTTP连接使用的是“请求—响应”的方式。在请求前要先建立连接,并且需要客户端向服务器发出请求后,服务器端才能返回响应。http1.0:增加post和head只保持短暂连接,每次TCP连接只能发送

2020-09-12 22:14:05 738

原创 手写call,apply,bind

myCall函数调用此方法,所以放置到函数原型上第一个参数为要绑定的this,由于call函数接收任意数量参数,使用ES6中的不定参数(…args)来接受参数Function.prototype.myCall = function(context,...args){ }如何把this绑定到context上呢:函数的this指向调用函数的人身上,所以可以让context调用要绑定的函数,这样函数的this指向调用函数者身上就指向了context如何获取要绑定的函数呢:上面提到

2020-09-12 20:49:58 88

原创 Ajax封装

函数能够像jQuery一样,传入自定义配置的ajax参数,函数参数传入参数配置对象函数内部有默认的配置参数,默认get请求,默认表单提交数据格式合并传入的配置参数与默认参数处理传入的数据,拼接成?x=x&y=y形式如果是get方法,数据加到url上初始化xhr对象判断请求方式,如果是post请求,首先设置请求头的媒体类型信息,然后判断其格式,若是json形式则发送转换的json格式数据;get请求直接发送响应监听,获取响应头媒体类型,并判断,如果是返回json则转换成j对象判断响应.

2020-09-12 20:28:26 65

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除