撩课-Web大前端每天5道面试题-Day33
1.CommonJS 中的 require/exports 和 ES6 中的 import/export 区别?
CommonJS 模块的重要特性是加载时执行,
即脚本代码在 require 的时候,就会全部执行。
一旦出现某个模块被”循环加载”,
就只输出已经执行的部分,
还未执行的部分不会输出。 ES6 模块是动态引用,
如果使用 import 从一个模块加载变量,
那些变量不会被缓存,
而是成为一个指向被加载模块的引用,
需要开发者自己保证,
真正取值的时候能够取到值。 import/export 最终都是编译为 require/exports 来执行的。
CommonJS 规范规定,
每个模块内部,
module 变量代表当前模块。
这个变量是一个对象,
它的 exports 属性(即 module.exports )是对外的接口。
加载某个模块,
其实是加载该模块的 module.exports 属性。
export 命令规定的是对外的接口,
必须与模块内部的变量建立一一对应关系。
2.项目做过哪些性能优化?
减少 HTTP 请求数
减少 DNS 查询
使用 CDN
避免重定向
图片懒加载
减少 DOM 元素数量
减少 DOM 操作
使用外部 JavaScript 和 CSS
压缩 JavaScript 、 CSS 、字体、图片等
优化 CSS Sprite
使用 iconfont
字体裁剪
多域名分发划分内容到不同域名
尽量减少 iframe 使用
避免图片 src 为空
把样式表放在 中
把脚本放在页面底部
3.js 异步加载的方式?
渲染引擎遇到 script 标签会停下来,
等到执行完脚本,继续向下渲染
defer 是“渲染完再执行”,async 是“下载完就执行”,
defer 如果有多个脚本,
会按照在页面中出现的顺序加载,
多个async 脚本不能保证加载顺序
加载 es6模块的时候设置 type=module,
异步加载不会造成阻塞浏览器,页面渲染完再执行,
可以同时加上async属性,
异步执行脚本(利用顶层的this等于undefined这个语法点,
可以侦测当前代码是否在 ES6 模块之中)
4.get与post 通讯的区别?
Get 请求能缓存,Post 不能
Post 相对 Get 安全一点点,
因为Get 请求都包含在 URL 里,且会被浏览器保存历史纪录,
Post 不会,但是在抓包的情况下都是一样的。
Post 可以通过 request body来传输比 Get 更多的数据,Get 没有这个技术
URL有长度限制,会影响 Get 请求,
但是这个长度限制是浏览器规定的,不是 RFC 规定的
Post 支持更多的编码类型且不对数据类型限制
5.为什么虚拟 dom 会提高性能?
虚拟 dom 相当于在 js 和真实 dom 中间加了一个缓存,
利用 dom diff 算法避免了没有必要的 dom 操作,从而提高性能。 用 JavaScript 对象结构表示 DOM 树的结构;
然后用这个树构建一个真正的 DOM 树,
插到文档当中当状态变更的时候,重新构造一棵新的对象树。
然后用新的树和旧的树进行比较,
记录两棵树差异把 所记录的差异应用到步骤 所构建的真正的 DOM 树上,视图就更新了。
撩课-Web大前端每天5道面试题-Day33的更多相关文章
- 撩课-Web大前端每天5道面试题-Day10
1. px和em的区别? px和em都是长度单位; 区别是: px的值是固定的,指定是多少就是多少, 计算比较容易. em得值不是固定的,并且em会继承父级元素的字体大小. 浏览器的默认字体高都是16 ...
- 撩课-Web大前端每天5道面试题-Day4
1. 如何实现瀑布流? 瀑布流布局的原理: ) 瀑布流布局要求要进行布置的元素等宽, 然后计算元素的宽度, 与浏览器宽度之比,得到需要布置的列数; ) 创建一个数组,长度为列数, 里面的值为已布置元素 ...
- 撩课-Web大前端每天5道面试题-Day1
1. var的变量提升的底层原理是什么? JS引擎的工作方式是: 1) 先解析代码,获取所有被声明的变量: 2)然后在运行.也就是说分为预处理和执行两个阶段. 变量提升:所有变量的声明语句都会被提升到 ...
- 撩课-Web大前端每天5道面试题-Day11
1. 如何手写一个JQ插件? 方式一: $.extend(src) 该方法就是将src合并到JQ的全局对象中去: $.extend({ log: ()=>{alert('撩课itLike');} ...
- 撩课-Web大前端每天5道面试题-Day31
1.web storage和cookie的区别? Web Storage的概念和cookie相似, 区别是它是为了更大容量存储设计的. Cookie的大小是受限的, 并且每次你请求一个新的页面的时候C ...
- 撩课-Web大前端每天5道面试题-Day25
1.web前端开发,如何提高页面性能优化? 内容方面: .减少 HTTP 请求 (Make Fewer HTTP Requests) .减少 DOM 元素数量 (Reduce the Number o ...
- 撩课-Web大前端每天5道面试题-Day7
1. 你能描述一下渐进增强和优雅降级之间的不同吗? 定义: 优雅降级(graceful degradation): 一开始就构建站点的完整功能, 然后针对浏览器测试和修复 渐进增强(progressi ...
- 撩课-Web大前端每天5道面试题-Day30
1.什么叫优雅降级和渐进增强? 优雅降级: Web站点在所有新式浏览器中都能正常工作, 如果用户使用的是老式浏览器, 则代码会针对旧版本的IE进行降级处理了, 使之在旧式浏览器上以某种形式降级体验却不 ...
- 撩课-Web大前端每天5道面试题-Day23
1.为什么用Nodejs,它有哪些优缺点? 优点: 事件驱动,通过闭包很容易实现客户端的生命活期. 不用担心多线程,锁,并行计算的问题 V8引擎速度非常快 对于游戏来说,写一遍游戏逻辑代码,前端后端通 ...
随机推荐
- ASP.NET MVC NPOI导入Excel DataTable批量导入到数据库
使用NPOI导入Excel 首先在MVC项目中导入NPOI 查询NPOI安装,排序依据,选择:最高下载量,选择第一个. 在控制器中创建ExcelController 在Index视图中写入代码: @u ...
- [leetcode.com]算法题目 - Jump Game
Given an array of non-negative integers, you are initially positioned at the first index of the arra ...
- Lerning Entity Framework 6 ------ A demo of using Entity framework with MySql
Create a new project named MySqlTest Install following packages by right-clicking on the References ...
- Linux查看运行时间
以下命令都可以查看出系统运行时间.对于查看机器的状态很有帮助. w -b 查看最后一次系统启动的时间 w -r 查看当前系统运行时间 last reboot 查看系统历史启动的时间 top up后表示 ...
- Swift5 语言指南(二十六) 内存安全
默认情况下,Swift可以防止代码中发生不安全行为.例如,Swift确保变量在使用之前进行初始化,在取消分配后不访问内存,并检查数组索引是否存在越界错误. Swift还确保对同一内存区域的多次访问不会 ...
- 解放双手 | Jenkins + gitlab + maven 自动打包部署项目
前言 记录 Jenkins + gitlab + maven 自动打包部署后端项目详细过程! 需求背景 不会偷懒的程序员不是好码农,传统的项目部署,有时候采用本地手动打包,再通过ssh传到服务器部署运 ...
- python3 调用 salt-api
使用python3调用 salt-api 在项目中我们不能使用命令行的模式去调用salt-api,所以我们可以写一个基于salt-api的类,方便项目代码的调用.在这里特别附上两种方式实现的pytho ...
- 远程连接阿里云服务器出现"远程桌面,身份验证错误:要求的函数不受支持"解决办法
---恢复内容开始--- 更新:win10专业版用户可以看之前的的直接来,但家庭版用户用下面的好像并不能完美解决,献上在网上找到的一个终极解决办法 windows+R打开运行 输入regedit打开 ...
- Linux inode空间占满 “no space left on device”
Linux inode空间占满 提示 “no space left on device” 中文环境:“无法创建XXX目录,设备没有空间” Linux系统iNode耗尽硬盘无法写入文件怎么办?df -h ...
- 8皇后问题(c++/python实现)
问题描述:在8*8的国际象棋盘上摆放8个皇后,使其不能互相攻击,即任何两个皇后都不能处于同一行.同一列或者同一斜线上,问有多少种摆法. 算法分析: 利用3个数组分表来标记冲突,数组a.b.c. a数组 ...