1类数组和数组的区别,dom 的类数组如何转换成数组
类数组(Array-like)和数组(Array)都是用于存储多个值的数据结构,但它们之间存在一些关键区别:
- 类型:数组是JavaScript的内置对象类型,继承自
Array.prototype
,具有一系列数组方法(如push()
、pop()
、map()
等)。类数组是普通的对象,其属性名为索引(如0
、1
、2
等),具有一个length
属性,但不具备数组的方法。 - 原型:数组的原型为
Array.prototype
,因此具有数组的所有方法。类数组的原型通常为Object.prototype
,并不包含数组的方法。 - 要将DOM的类数组(例如,通过
document.getElementsByClassName()
或document.querySelectorAll()
获取的元素集合)转换为数组,可以使用以下方法之一
(1)使用Array.from()
方法:
let nodeList = document.querySelectorAll('div');
let array = Array.from(nodeList);
(2)使用扩展运算符(Spread Operator):
let nodeList = document.querySelectorAll('div');
let array = [...nodeList];
(3)使用Array.prototype.slice.call()
:
let nodeList = document.querySelectorAll('div');
let array = Array.prototype.slice.call(nodeList);
SSR的实现原理
服务器端渲染(Server Side Rendering,简称 SSR)是一种 web 应用的渲染方式,其实现原理是在服务器端将页面内容渲染为 HTML 字符串,然后将这些字符串发送到客户端,客户端接收到 HTML 后直接显示,无需等待 JavaScript 的解析、执行和渲染。
SSR 的核心实现原理可以概括为以下几个步骤:
- 请求处理:客户端发起请求时,请求首先到达服务器。
- 服务器渲染:服务器接收到请求后,根据路由和数据,将对应的页面内容渲染为 HTML 字符串。这一步通常涉及到模板引擎或服务器端 JavaScript 框架的使用,例如 React 的
ReactDOMServer.renderToString()
和 Vue 的vue-server-renderer
。 - 数据注入:在渲染过程中,服务器还需要获取所需的数据,将其注入到 HTML 中。这可以通过内联脚本、JSON 格式或其他方式实现。数据注入的目的是在客户端 JavaScript 代码运行时能够获取到服务器端已经准备好的数据,避免重复请求。
- 生成完整 HTML:将渲染好的 HTML 字符串插入到 HTML 模板中,形成一个完整的 HTML 页面。这个页面包含了已经渲染好的内容以及必要的 JavaScript、CSS 等资源引用。
- 发送响应:服务器将完整的 HTML 页面作为响应发送给客户端。客户端接收到响应后,直接将 HTML 页面展示给用户。
- 客户端接管:在客户端,浏览器会解析和执行 JavaScript 代码,接管页面的交互和操作。这一步通常被称为 "hydration" 或 "激活",因为客户端 JavaScript 代码需要 "激活" 服务器端渲染的静态 HTML,使其具有动态功能。
通过 SSR,用户可以更快地看到页面的内容,因为无需等待客户端的 JavaScript 代码下载、解析、执行和渲染。此外,由于搜索引擎爬虫能够更好地解析服务器端渲染的 HTML,因此 SSR 对 SEO 也有一定的优势。然而,SSR 也会增加服务器的负担,因为服务器需要负责渲染页面。在实际应用中,可以根据项目需求和性能要求,选择合适的渲染方式。
HTTP与HTTPS有什么区别?
区别主要如下:
1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
VUE的6种事件修饰符
1.prevent:阻止默认事件(常用)
2.stop:阻止事件冒泡(常用)
3:once:事件只触发一次(常用)
4.capture:使用事件的捕获模式
5、self:只有event.target是当前操作的元素才触发事件
6、passive:事件的默认行为立即执行,无需等待事件回避执行完毕
vue的SEO
方案一:预渲染 prerender-spa-plugin
存在问题:①动态路由解决不了②无法动态改变title,描述,关键字
适用场景:公司官网,只适合某几个页面需要做SEO
方案二:服务端渲染 : Nuxt.js
1.
纯静态文件,访问速度更快
2.对比SSR,不涉及到服务器负载方面的问题
3.静态网页不易遭受黑客攻击,安全性更高
存在问题:
1.如果动态路由参数多的话不适用
2.Nuxt.js 执行generate
静态化打包时,动态路由会被忽略
3.打开网站都效率慢,压力全在服务器,和前后端不分离差不多
适用场景:整个网站都做SEO