面试题

  • 作用域及原型链
    作用域参考:https://my.oschina.net/u/2949632/blog/793898

原型链及其他参考:(快手一面)

// 1
var a = { x: 1 };
var b = a;
a.x = a = { n: 1 };
console.log(a);
console.log(b);

// 2
Function.prototype.a = () => alert(1);
Object.prototype.b = () => alert(2);
function A() {}
const a = new A();
a.a();
a.b();

console.log(a instanceof Function);
console.log(a instanceof Object);
console.log(A instanceof Function);
console.log(A instanceof Object);

// 3
console.log(a);
var a = 0;

console.log(b);
let b = 0;

console.log(c);
function c() {}

console.log(d);
class d {}

// 4
var x = 10;
function a(y) {
    var x = 20;
    return b(y);
}

function b(y) {
    return x + y.
}

a(20);
  • Promise.all实现
  • 控制Promise并发数实现,手写题目中promise很多,最好能手动写一遍promise polyfill加深理解
  • curry,支持自定义回调函数
  • 跨域(90%几率会问),建议按照阮一峰梳理的内容分三个方面回答:https://www.ruanyifeng.com/blog/2016/04/same-origin-policy.html
    然后可以说下目前自己公司是如何处理跨域的,如node层代理,Nginx代理。
  • 你对vue的了解,我一般会说双向绑定原理,建议看下这块源码,Watcher、Dep的关系。Proxy比defineProperty的优势
  • ES6用过哪些
  • vue scope原理
  • XSS, CSRF,CSP,一定要清楚cookie发送的原理,浏览器同源策略。CRSF的预防措施
  • 前端性能优化,面试官喜欢问实际实践过的。没有的话就说webpack配置的优化点。
  • webpack loader和plugin区别,动手写过吗,建议看下webpack打包后的源码,可先配置optimizition把运行时及依赖都分离了。
  • lazyMan实现
  • 平时学习其他技术吗?我一般答看技术书。
  • 前端性能指标:可以按照这个说浏览器回车后发生了什么,也可以通到每个时间点分析性能如何优化。
    performance

在这里插入图片描述

– 首字节时间:服务器返回第一个字节的时间,即responseStart。反映的是DNS、服务器性能,网络状态。

– 可交互时间:服务器返回所有响应后,浏览器开始解析HTML,构建DOM树,完成后页面处于可交互状态,js可操作DOM,即domInteractive

– domInteractive表示document.readystate状态变为interactive。即DOM树构建时间点,未形成渲染树

document.readystate的状态包含:

  • loading: 仍在加载
  • interactive:loading结束,文档已被解析,但其他资源如样式表、框架、图片仍在加载
  • complete:所有子资源已被加载

当DOM树构建完成后,开始构建渲染树,即DOMContentLoadedStart,(所以domInteractive和DOMContentLoadedStart之间的时间是CSSOM的构建时间?)渲染树构建完成后DOMContentLoadedEnd,还要将渲染树绘制在屏幕上,即domComplete

– 解析时间:从服务器开始返回数据到页面成可交互状态所用时间,即domInteractive - responseStart
– 白屏时间FCP:从navigationTo即fetchStart到浏览器绘制第一bit内容所用时间
– 首屏时间FSP:first-meaningful-paint::首屏时间是指浏览器从响应用户输入网络地址,到首屏内容渲染完成的时。统计方式:

  • 首屏无图:页面处于稳定状态前最后一次DOM变动时刻 - window.performance.timing.navigationStart
  • 首屏有图:首屏图片全部加载完成 - window.performance.timing.navigationStart

而背景图片的加载不会触发DOM变动,所以要在performancec.getEntriesByType(‘resource’)中过滤initiatorType为img或css,且在首屏中((0,0)到(100vw,100vh))的条目,取responseEnd最晚的那个点作为最后一张图片的加载完成时间

– CSS优化:直到样式表全部下载并构建出cssom对象后,浏览器才开始渲染,所以说css是阻塞选择的资源,需要将它尽早尽快的下载以缩短首次渲染的时间。

如何使css不阻塞渲染呢?
https://developers.google.com/web/fundamentals/performance/critical-rendering-path/render-blocking-css

1.媒体类型或媒体查询标记

代码块

但这些样式表还是会下载,只不过优先级较低。只不过不阻塞渲染。

渲染的过程:https://developers.google.com/web/fundamentals/performance/critical-rendering-path/render-tree-construction

解析HTML构建DOM树

加载并解析样式表构建CSSOM树

合并DOM和CSSOM构成渲染树

根据渲染树计算每个节点的精确布局

将节点绘制在屏幕上

所以如果DOM或CSSOM被修改,就需要重新执行上述5个过程,所以说DOM的操作对浏览器来说成本很大,要尽可能的减少或合并DOM操作。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值