星哥の面试题Day17
面试题系列均来自鱼皮的知识星球——编程导航
怎么解决跨域问题?
跨域问题(Cross-Origin Resource Sharing,CORS)是由于浏览器的同源策略(Same-Origin Policy)导致的。同源策略指的是,如果两个 URL 的协议、主机名和端口号都相同,那么它们就是同源的,否则就是跨域的。当网页发起跨域请求时,浏览器会根据同源策略限制请求。解决跨域问题的方法有以下几种:
JSONP(JSON with Padding)
SONP 是一种跨域请求数据的方式,它利用了
<script>
标签不受同源策略限制的特性,可以从不同的域名请求数据。实现原理是在服务端生成一个 JavaScript 函数,客户端使用<script>
标签请求该函数,服务端返回该函数的调用,并将需要传输的数据作为函数参数传入。CORS(Cross-Origin Resource Sharing)
CORS 是一种通过添加一些 HTTP 头来允许浏览器跨域访问资源的机制,主要是服务端配置。服务端需要在响应头中添加
Access-Control-Allow-Origin
和其他一些参数,指示允许哪些域名进行跨域请求。反向代理
反向代理是将客户端的请求转发到真正的服务端,从而解决跨域问题。反向代理服务器和真正的服务端在同一个域名下,客户端的请求只需要向反向代理服务器发起,由反向代理服务器将请求转发到真正的服务端,最后将响应返回给客户端。
WebSocket
WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议,可以用于跨域通信。由于 WebSocket 协议并不受同源策略的限制,因此可以实现跨域通信。
总的来说,不同的解决方案有各自的优缺点,应根据实际情况选择最适合的方式。例如,如果需要在客户端和服务端之间进行实时通信,WebSocket 是最佳选择;如果只需要在客户端发起简单的 GET 请求,可以使用 JSONP 等方式。
什么是前端路由?什么时候适合使用前端路由?它有哪些优点和缺点?
什么是前端路由?
前端路由是指:在前端中使用JavaScript实现的页面切换路由系统,它可以根据URL的变化,通过修改DOM来实现单页面应用SPA的页面切换效果,无需每次请求页面时都要从服务器获取完整的HTML页面
在传统的Web应用中,每次点击页面链接或刷新页面时,浏览器都会向服务器发送请求,接收服务器返回的HTML页面,而在使用前端路由的SPA单页面应用中,页面的切换是通过JavaScript动态修改DOM内容来实现的,这样可以避免每次都要向服务器请求页面时的开销,从而提高页面的响应速度和用户体验
我是这样理解的(不知道对不对) :传统的Web应用,将所有的 HTML、CSS 和 JavaScript 文件都存放在服务器上,然后网页切换页面时,每次都要发送请求来接收服务器响应回来的HTML页面。而使用前端路由的SPA单页面应用,是第一次加载网页时,发送http请求,请求服务器返回HTML、CSS、JavaScript文件等静态资源,这些文件被下载到浏览器中,并存储在浏览器的缓存中,当用户在SPA单页面应用进行页面切换时,前端路由会根据浏览器中对应URL文件的路径信息,动态地加载相应的JavaScript文件,并执行里面的逻辑来更新切换页面内容。
什么时候适合使用前端路由?
前端路由适合用于构建单页面应用,特别是需要快速响应用户操作,避免不必要的页面刷新应用,例如需要高度交互的应用,如社交网络,音乐播放器
它有哪些优点和缺点?
优点:
- 快速响应:前端路由进行页面切换时不需要向服务器发送http请求,从而快速响应用户操作,提高加载速度
- 降低服务器压力:采用前端路由,降低了请求次数,减轻了服务器的负担。
- 提高应用的交互性:前端路由实现页面无缝切换,避免了传统应用中页面卡顿白屏等现象
缺点:
- 不利于SEO,由于前端路由是根据文件里面的URL修改DOM来切换,而不是加载新的HTML页面,所以不利于搜索引擎的搜索。
- 初次加载慢:由于前端路由需要在初次加载时候将所有的静态资源(HTML、CSS、JavaScript)文件都加载到客户端,因此首次加载时间较长,影响用户体验
- 复杂度高:前端路由需要在客户端处理好切换页面逻辑以及前进后退等操作,增加了应用的复杂度。
什么是 Vuex?使用 Vuex 有哪些好处?
Vuex是Vue.js框架中用于实现集中式状态管理的插件。它的主要作用是在多个组件之间共享状态,并且提供了一些工具来方便地管理应用程序的状态。
使用Vuex可以将应用程序的状态存储在一个集中的地方,从而使状态管理更加容易、可维护性更高。它还提供了一些工具来简化状态的更改和操作,例如:在组件中使用mutations来修改状态,或者使用actions来异步操作数据。
使用Vuex的好处包括:
- 集中化的状态管理:将应用程序的状态集中存储在一个地方,可以方便地进行状态管理和维护。
- 易于调试:使用Vuex可以方便地跟踪和记录状态的更改历史,有助于快速诊断和解决问题。
- 状态共享:在多个组件之间共享状态,避免了组件之间繁琐的传值,提高了组件之间的解耦性。
- 插件化:Vuex提供了插件机制,可以方便地扩展和自定义Vuex的功能。
Vuex的缺点包括:
- 增加了学习成本:Vuex相对于直接在组件中管理状态来说,增加了一些学习成本,需要花费时间去学习Vuex的概念和使用方式。
- 增加了代码复杂度:在使用Vuex的过程中,需要增加一些额外的代码来管理状态,有时可能会增加代码的复杂度。