跨域,模块化,web开发模式

1.同源策略,跨域

同源策略:是一种约定,阻止一个域的js脚本对另一个域的内容进行访问。跨域的网页(1)不能共享cookie,localstorage,indexDB(2)不能获取dom节点(3)Ajax请求得不到数据。

同源策略对web安全起到了一定的作用,但是对于web扩展产生了限制。

啥是同源?两个网页的协议名,域名,端口号相同。

啥是跨域?不同源就是跨域。

跨域访问限制?浏览器可以正常向服务器发送请求,服务器也可以正常返回数据,浏览器检查响应头中有没有允许跨域访问的配置,有的话可以正常加载数据,没有的话就不会加载数据。

解决跨域:

  • jsonp:利用script标签的src属性没有跨域访问限制,发起跨域请求,传递一个函数名给服务端,服务端将函数名和数据进行拼接,返回给客户端。限制是只能解决get请求的跨域。
  • cors:需要浏览器和服务器同时支持,(浏览器的版本要求高一些),只需要在后端配置cors,设置响应头‘Access-Control-Allow-origin:*’,以支持跨域请求。
  • webpack配置本地代理,在vueconfig.js中写相关的配置项。
  • nginx反向代理,项目打包上线时会用到,修改nginx.conf配置文件

2.es6模块化和commonjs规范,循环引用

        什么是模块化?模块化是将完成相应功能的代码进行封装,每一个文件都是一个模块,拥有一块独立的作用域。

        模块化的作用?提高代码的复用性和可维护性,可以按需引入,避免全局污染。

es6模块化和commonjs的区别

  • 使用环境不同,commonjs主要在服务端使用,es6模块化可以在服务端和客户端使用。因为commonjs是同步加载机制,使用在客户端,要等一段时间,影响用户体验。
  • 输出不同,commonjs输出的是浅拷贝的值,一旦输出了某个值,后续就算模块内部发生了变化,也不会影响外部对该值的使用。es6模块化输出的是值的引用,模块内部发生变化会影响模块外部对该值的使用。
  • 加载时机不同,commonjs在运行时加载(所以可以动态加载),但是无法实现按需加载(不能引入模块中的一部分)。ES6在编译时加载,在编译阶段就会确定模块间的依赖关系,可以实现按需加载。
  • 顶层this指向,ES6模块化顶层this指向undefined,commonJS的顶层this指向的是空对象{}。

3.两种web开发模式

服务端渲染:网页在服务端动态拼接好,发送到客户端。

优点:

  • 首屏加载快
  • 有利于SEO

缺点:

  • 当请求过多时,服务端的压力大
  • 当前端复杂时,不利于前后端分离,开发效率低

前后端分离:依赖ajax技术,前端负责设计界面和数据的动态展示,后端负责提供接口

优点:

  • 开发效率高
  • 实现了局部刷新,用户体验好
  • 减轻了服务器的压力

缺点:

  • 不利于SEO,但是vue框架SSR技术解决
  • 首屏加载慢
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值