面试题-浏览器知识点和js (一)

简介: 面试题-浏览器知识点和js

重绘和重排 ok


重绘:当元素的一部分属性发生改变,


如背景、颜色等不会引起布局变化,


只需要浏览器根据元素的新属性重新绘制,


使元素呈现新的外观叫做重绘。  


重排(回流):当render树中的一部分或者全部,


因为大小边距等问题发生改变,而需要DOM树重新计算的过程


所以简单的来说就是。会引起布局的变化,叫做重排(回流)。


不会引起布局的变化,叫做重绘。


『重绘』不一定会出现『重排』,『重排』必然会出现『重绘』。


tip:所以在我们平时写css的时候,还是要按照html中类的顺序来写。


否者可能会造成重排,重排是需要消耗浏览器性能的哈。


引起重排的地方 ok


1.添加、删除可见的dom


2.元素的位置改变


3.元素的尺寸改变(外边距、内边距、边框厚度、宽高)


4.页面渲染初始化


5.浏览器窗口大小改变


6.改变文字大小


7.操作class属性


8.内容的改变,(用户在输入框中写入内容也会)


add,del-->位置-->尺寸--初始化


窗口-->字体-->内容-->操作class属性


如何避免重绘或者重排?ok


#### 1.集中改变样式
#### 2.使用createDocumentFragment
#### 2.使用createDocumentFragment
我们可以通过createDocumentFragment创建一个游离于DOM树之外的节点,
然后在此节点上批量操作,当完成所有的操作后,最后插入DOM树中,这样只触发一次重排
var fragment = document.createDocumentFragment();
for (let i = 0;i<10;i++){
  let node = document.createElement("p");
  node.innerHTML = i;
  fragment.appendChild(node);
}
document.body.appendChild(fragment);


12.前端如何实现即时通讯?


1.短轮询,使用setTimeout。


每隔一段时间客户端就发出一个请求,去获取服务器最新的数据,一定程度上模拟实现了即时通讯。


优点:兼容性强,实现非常简单


缺点:延迟性高,非常消耗请求资源,影响性能


2.Websocket:


Websocket是一个全新的、独立的协议,基于TCP协议。


可以在服务器和客户端之间建立【实时】的【双向通信】。


优点:真正意义上的实时双向通信,性能好,低延迟


缺点:需要额外的项目改造,使用复杂度高,必须引入成熟的库,无法兼容低版本浏览器

3.Web Worker


Web Worker 的作用,就是为 JavaScript 创造【多线程环境】,


允许主线程创建 Worker 线程,将一些任务分配给后者运行


4.Service workers


Service workers 本质上充当Web应用程序与浏览器之间的代理服务器,


也可以在网络可用时作为浏览器和网络间的代理,创建有效的离线体验。


https://www.cnblogs.com/wangxi01/p/11590178.html


13 什么是跨域 ok


协议, 域名, 端口号, 不同就是不同的域。


不同的域之间相互请求资源,就叫“跨域”。


ps:https与http也是不同的域


浏览器基于:“同源策略”


认为跨域请求是不安全的 所以拒绝访问。


14.什么是浏览器同源策略? 理解


同源策略是一个重要的安全策略,


它用于限制一个origin上的文档或者它加载的脚本如何能与另一个源的资源进行交互。


它能阻隔恶意文档,减少被攻击的媒介。


协议, 域名, 端口号 相同就是同源


15 哪三个标签可以不受同源的影响 ok


浏览器中的大部分内容都是受同源策略限制的,但是以下三个标签可以不受限制:


<img src=XXX>
<link href=XXX>
<script src=XXX>

17.最经典的跨域方案 jsonp


jsonp它利用<script>标签不受同源策略的限制。


缺点:


1.只支持get请求(因为<script>标签只能get)


2.同时需要后配合。


3.有安全性问题,容易遭受xss攻击


2最流行的跨域方案cors[跨域资源共享]


(CORS) 是一种机制,使用 HTTP 头来告诉浏览器。


让运行在一个 origin (domain) 上的Web应用,访问不同源服上务服务的指定的资源。


3.最方便的跨域方案Nginx


Nginx是一款极其强大的web服务器,其优点就是轻量级、启动快、高并发。


反向代理的原理很简单,即所有客户端的请求都必须先经过nginx的处理,


nginx作为代理服务器在将请求转发给node或者java服务,这样就规避了同源策略。


其它跨域方案


1.HTML5 XMLHttpRequest 有一个API,、


postMessage()方法允许来自不同源的脚本采用异步方式进行有限的通信,


可以实现跨文本档、


多窗口、


跨域消息传递。


19 为什么JavaScript是单线程的? 与异步冲突吗 ok


JavaScript是单线程,与它的用途有关。


作为浏览器脚本语言,JavaScript的主要用途是与用户互动,以及操作DOM。


这决定了它只能是单线程,否则会带来很复杂的问题。


解释为什么是单线程的,假定JavaScript同时有两个线程,一个线程在某个DOM节点上添加内容,


另一个线程删除了这个节点,这时浏览器应该以哪个线程为准?


所以,为了避免复杂性,从一诞生,JavaScript就是单线程,


这已经成了这门语言的核心特征,将来也不会改变。


不冲突:


Js执行是单线程,但浏览器是多线程,它有以下常驻线程


1.渲染引擎线程:负责页面的渲染。


2.JS引擎线程:负责JS的解析和执行(本文说的主线程就指js引擎线程)


3.定时器触发线程:处理定时事件,比如setTimeout, setInterval


4.事件触发线程:处理DOM事件


5.异步http请求线程:处理http请求

相关文章
|
6天前
|
Web App开发 JavaScript 前端开发
使用 JS 实现在浏览器控制台打印图片 console.image()
在前端开发过程中,调试的时候,我们会使用 console.log 等方式查看数据。但对于图片来说,仅靠展示的数据与结构,是无法想象出图片最终呈现的样子的。 虽然我们可以把图片数据通过 img 标签展示到页面上,或将图片下载下来进行预览。但这样的调试过程实在是复杂,何不实现一个 console.image() 呢?
17 1
使用 JS 实现在浏览器控制台打印图片 console.image()
|
24天前
|
JavaScript
分享经典面试题:JS数组去重的多种方法
分享经典面试题:JS数组去重的多种方法
|
29天前
|
JavaScript 前端开发 Java
前端知识点03(JS)
前端知识点概览:了解JS中的this指向,包括全局、函数、new、apply/call/bind及箭头函数的规则。理解script的async和defer属性对脚本加载和执行的影响。探讨setTimeout和setInterval的用法及其在性能上的考量。ES6与ES5的区别在于新语法特性,如let/const、箭头函数、模板字符串、模块化、类和继承等。此外,ES6还引入了Symbol、解构赋值、默认参数、Map/Set和Generator等功能。别忘了点赞和支持作者哦!
26 1
|
29天前
|
JavaScript 前端开发
前端面试02(JS)
本文是前端面试系列的第二篇,主要涵盖了JavaScript的基础知识,包括JS的组成(ECMAScript、DOM、BOM)、内置对象(如String、Array、Math、Date等)、数组操作方法、数据类型检测方法(typeof、instanceof、constructor、Object.prototype.toString.call)、闭包的概念及其特点、前端内存泄漏的原因和类型、事件委托的优势、基本数据类型与引用数据类型的差异、原型链的工作原理以及JS实现继承的多种方式(原型链、构造函数、组合继承等)。文章结尾鼓励读者点赞和支持作者。
13 1
|
9天前
|
JavaScript 前端开发
js怎样获取浏览器窗口尺寸
js怎样获取浏览器窗口尺寸
|
9天前
|
JavaScript 前端开发
JavaScript BOM 浏览器对象模型
JavaScript BOM 浏览器对象模型
|
1月前
|
JavaScript 前端开发 程序员
web前端入门到实战:32道常见的js面试题(1),面试哪些
web前端入门到实战:32道常见的js面试题(1),面试哪些
|
1月前
|
JSON JavaScript 前端开发
web前端入门到实战:32道常见的js面试题,2024年最新秋招是直接面试吗
web前端入门到实战:32道常见的js面试题,2024年最新秋招是直接面试吗
|
1月前
|
前端开发 JavaScript
JavaScript新科技:PostCSS的安装和使用,2024年最新2024网易Web前端高级面试题总结
JavaScript新科技:PostCSS的安装和使用,2024年最新2024网易Web前端高级面试题总结
|
1月前
|
JavaScript 前端开发 UED
JS:如何获取浏览器窗口尺寸?
JS:如何获取浏览器窗口尺寸?
115 1