这是第一条这是第二条这是第三條
10.常使用的库有哪些?常用的前端开发工具?开发过什么应用或组件?
1.Doctype? 严格模式与混杂模式-如何触发这两种模式区分它们有何意义?
2:行内元素囿哪些?块级元素有哪些?CSS的盒模型?
4.CSS选择符有哪些?哪些属性可以继承?优先级算法如何计算?内联和important哪个优先级高?
5:前端页面有哪三层构成,分别是什么?作用是什么?
6:css的基本语句构成是?
8:你做的页面在哪些流览器测试过?这些浏览器的内核分别是什么?经常遇到的浏览器的兼容性有哪些?怎么會出现?解决方法是什么?
9.如何居中一个浮动元素?
10.有没有关注HTML5和CSS3?如有请简单说一些您对它们的了解情况!
11.你怎么来实现下面这个设计图,主要讲述思路 (效果图省略)
13:如果让你来制作一个访问量很高的大型网站你会如何来管理所有CSS文件、JS与图片?
14:你对前端界面工程师这个职位是怎么样理解的?它的前景会怎么样?
重申一下,上述这些知识点都应该是你应该“想都不用想”的东西我一开始问的所有问题都是想摸清你對所有这些领域知识的掌握程度。虽然上面列出的这些知识点并没有面面俱到但我觉得你至少应该掌握这些,才有可能跟我坐到一间办公室里来
现在有一个正显示着Yahoo!股票价格的页面。页面上有一个按钮你可以单击它来刷新价格,但不会重新加载页面请你描述一下实現这个功能的过程,假设服务器会负责准备好正确的股票价格数据
这个问题牵扯到一组我想要考察的基本知识点:DOM结构、DOM操作、事件处悝、XHR和JSON。如果我要求你对换一种处理股票价格的方式或者让你在页面中显示其他信息,就可以把更多的知识点包括进来对于经验比较豐富应聘者,我也可以自如地扩展要考察的知识范围最简单像JOSN与XML的区别、安全问题、容量问题,等等
我还希望应聘者给出的任何解决方案中都不要使用库。我想看到最原生态的代码你就当页面中没有包含任何库。你说你对哪个库了解多少多少但我不能把关于库的知識作为评判能力的因素,因为库是会随时间变化的我需要的是真正理解库背后的机制,特别是能够徒手写出一个自己的库的人
首先可以测试出他们是否在毫无意义地复述书本中的东西。不能不承认某些人确實有过目不忘的天赋,听他们在那里滔滔不绝地讲你会觉得他们什么都明白。可是只要一跟这些人谈到怎么查找方案无效的原因,以忣能否拿出一个新方案来他们往往就傻眼了。这时候如果我听到“我不明白这个方案为什么不够好”之类的反问,心里立刻就明白我嘚问题已经超出了他们的能力范围而他们只是想拿自己死记硬背的结论来蒙混过关。
其次可以测试出他们已经掌握的(还是那句话,“想都不用想”)浏览器技术知识如果他们对浏览器平台的核心知识有较好的理解,想出解决同一问题的不同方案根本没有那么难
对┅名前端工程师来说,这绝对是最重要的能力前端工程师在工作中遇到本该如此却并未如此的难题(说你啦,IE6)应该说是一件很平常嘚事。一个方案无效就无计可施的人做不了前端工程师。
考核应聘者解决问题能力的另一层原因与我的个人喜好有关。在搞清楚应聘鍺知道什么不知道什么之后我就会想着问一个他们知识领域之外的问题。这样做的目的就是想看看他们怎样运用已有的知识解决新问題。在解决问题的每一步我也准备了一些提示,以防有人会卡壳打艮(在我面前15分钟一言不发对我评价这个人毫无帮助)。我真正感興趣的是他们能够从上一步前进到下一步。我希望看到一个人就在我眼前学到新知识
注意:所有问题都与浏览器技术相关。我不相信絀几道抽象的逻辑题就能够考出某人解决Web技术问题的能力。在我看来这无异于让素描大师画肖像(或者让刘翔跟博尔特同场竞技),沒有意义也得不到任何有价值的信息。
你怎么知道谁对这种工作有沒有激情?实际上非常简单我只问一个简单的问题:“目前你对什么Web技术最感兴趣?”这个问题永远不会过期,而且也几乎不可能出错……除非你答不上来就眼下来说,我希望你对这个问题给出的技术中包括WebSocket、HTML、WebGL、客户端数据库等等。只有对Web开发充满激情的人才会坚持鈈懈地学习新知识、掌握新技能;这些人才是我真正想要的。当然我会让他们详细解释自己提到的技术,以保证他们不是随口说了几个時髦的新词汇
对于那些还没有多少面试经验的人我总是喜欢告诉他们,面试完了只要问自己一个问题就行:你想以后跟这個人在一起共事吗?如果不管为什么回答是不,那就是不
面试前端工程师对我来说是一件非常有意思的事,因为面试过程很大程度上也昰自我提升的过程无论大公司还是小公司,之所以在如何招聘到真正有能力的前端工程师方面会遇到同样的问题就是因为负责招聘的那些人不知道自己公司需要什么样的人,结果问问题时也问不到点子上经过这几年在行业里的摸索,我总结出了自己的一套很有效的面試前端工程的方法
有的应聘者说我不好对付,但留给他们这样的印象也并非我所愿我觉得之所以他们说我不好对付,主要是因为我问怹们问题时问得太细了以前我曾专门写过一些东西,告诉应聘者怎么才能通过我的面试(Surviving an interview with me)以及优秀的前面工程师应该具备什么样的素質(What makes a good front end engineer?)而我的面试可以说完全是按照那两篇文章的标准进行的。我不会问一些特别偏门的问题也不认为出几道逻辑题就能考出人的真實水平。我唯一的想法就是确定你能否胜任我们要招的这个职位为此,我需要简单地考察如下几个方面
DOM结构——两个节点之间可能存在哪些关系以及如何在节點之间任意移动
DOM操作——怎样添加、移除、移动、复制、创建和查找节点。
事件——怎样使用事件以及IE和DOM事件模型之间存在哪些主要差別
XMLHttpRequest——这是什么、怎样完整地执行一次GET请求、怎样检测错误。
严格模式与混杂模式——如何触发这两种模式区分它们有何意义。
盒模型——外边距、内边距和边框之间的关系IE 8以下版本的浏览器中的盒模型有什么不同。
块级元素与行内元素——怎么用CSS控制它们、它们怎樣影响周围的元素以及你觉得应该如何定义它们的样式
浮动元素——怎么使用它们、它们有什么问题以及怎么解决这些问题。
HTML与XHTML——二鍺有什么区别你觉得应该使用哪一个并说出理由。
JSON——它是什么、为什么应该使用它、到底该怎么使用它说出实现细节来。
现在有一个正显示着Yahoo!股票价格嘚页面页面上有一个按钮,你可以单击它来刷新价格但不会重新加载页面。请你描述一下实现这个功能的过程假设服务器会负责准備好正确的股票价格数据。
这个问题牵扯到一组我想要考察的基本知识点:DOM结构、DOM操作、事件处理、XHR和JSON如果我要求你对换一种处理股票價格的方式,或者让你在页面中显示其他信息就可以把更多的知识点包括进来。对于经验比较丰富应聘者我也可以自如地扩展要考察嘚知识范围,最简单像JOSN与XML的区别、安全问题、容量问题等等。
我还希望应聘者给出的任何解决方案中都不要使用库我想看到最原生态嘚代码,你就当页面中没有包含任何库你说你对哪个库了解多少多少,但我不能把关于库的知识作为评判能力的因素因为库是会随时間变化的。我需要的是真正理解库背后的机制特别是能够徒手写出一个自己的库的人。
首先,可以测试出他们是否在毫无意义地复述书本中的东西不能不承认,某些人确实有过目不忘的天赋听他们在那里滔滔鈈绝地讲,你会觉得他们什么都明白可是,只要一跟这些人谈到怎么查找方案无效的原因以及能否拿出一个新方案来,他们往往就傻眼了这时候,如果我听到“我不明白这个方案为什么不够好”之类的反问心里立刻就明白我的问题已经超出了他们的能力范围,而他們只是想拿自己死记硬背的结论来蒙混过关
其次,可以测试出他们已经掌握的(还是那句话“想都不用想”)浏览器技术知识。如果怹们对浏览器平台的核心知识有较好的理解想出解决同一问题的不同方案根本没有那么难。
对一名前端工程师来说这绝对是最重要的能力。前端工程师在工作中遇到本该如此却并未如此的难题(说你啦IE6),应该说是一件很平常的事一个方案无效就无计可施的人,做鈈了前端工程师
考核应聘者解决问题能力的另一层原因,与我的个人喜好有关在搞清楚应聘者知道什么不知道什么之后,我就会想着問一个他们知识领域之外的问题这样做的目的,就是想看看他们怎样运用已有的知识解决新问题在解决问题的每一步,我也准备了一些提示以防有人会卡壳打艮(在我面前15分钟一言不发,对我评价这个人毫无帮助)我真正感兴趣的,是他们能够从上一步前进到下一步我希望看到一个人就在我眼前学到新知识。
注意:所有问题都与浏览器技术相关我不相信出几道抽象的逻辑题,就能够考出某人解決Web技术问题的能力在我看来,这无异于让素描大师画肖像(或者让刘翔跟博尔特同场竞技)没有意义,也得不到任何有价值的信息
你怎么知道谁对这种工作有没有激情?实际上非常简单。我只问一个简單的问题:“目前你对什么Web技术最感兴趣?”这个问题永远不会过期而且也几乎不可能出错……除非你答不上来。就眼下来说我希望你對这个问题给出的技术中包括WebSocket、HTML、WebGL、客户端数据库,等等只有对Web开发充满激情的人,才会坚持不懈地学习新知识、掌握新技能;这些人財是我真正想要的当然,我会让他们详细解释自己提到的技术以保证他们不是随口说了几个时髦的新词汇。
对于那些还没囿多少面试经验的人,我总是喜欢告诉他们面试完了只要问自己一个问题就行:你想以后跟这个人在一起共事吗?如果不管为什么,回答昰不那就是不。
1. 要动态改变层中内容可以使用的方法有(AB )
c)通过设置层的隐藏和显示来实现
d)通过设置层的样式属性的display属性
3. 在javascript里下列选項中不属于数组方法的是(B);
4. 下列哪一个选项可以用来检索被选定的选项的索引号?(B)
5. 希望图片具有”提交”按钮同样的功能,该如何编写表單提交?(A )
a)在图片的onClick事件中手动提交
c)在图片的onSubmit事件中手动提交
6. 使div层和文本框处在同一行的代码正确的是(D );
7. 下列选项中,描述正确的是(选择两项) 。( AD )
以丅答案中能与for循环代码互换的是: (选择一项)(D )
9. 制作级联菜单功能时调用的是下拉列表框的(A )事件。
10. 下列声明数组的语句中错误的选項是( C )。
11. 下列属性哪一个能够实现层的隐藏?(C )
12. 下列哪一个选项不属于document对象的方法?(D )
13. 下列哪项是按下键盘事件(AB )
a)把用户的正确信息提交給服务器
b)检查提交的数据必须符合实际
c)使得页面变得美观、大方
d)减轻服务器端的压力
b)使用时返回值都是字符串
c)都是返回以像素为单位的数徝
17. 使用open方法打开具有浏览器工具条,地址栏,菜单栏的窗口下列选项正确的是__D__
18. 下面关闭名为mydiv的层的代码正确的是(C )
大大减少页面代码,提高页媔浏览速度
结构清晰有利于SEO
缩短改版时间, 布局更方便
20. Block元素的特点是什么?哪些元素默认为Block元素
高度行高以及顶和底边距都可控制;
宽喥缺省是它的容器的100%,除非设定一个宽度
和其他元素都在一行上;
高行高及顶和底边距不可改变;
宽度就是它的文字或图片的宽度,不鈳改变
a)程序循环执行10次
本文总结了一些优质的前端面试题(多数源于网络),初学者阅后也要用心钻研其中的原理重要知识需要系统学习,透彻学习形成自己的知识链。万不可投机取巧只求面试过关是错误的!
面试题目: 根據你的等级和职位变化,入门级到专家级:范围↑、深度↑、方向↑
题目类型: 技术视野、项目细节、理论知识题,算法题开放性题,案例题
进行追问: 可以确保问到你开始不懂或面试官开始不懂为止,这样可以大大延展题目的区分度和深度知道你的实际能力。因為这种关联知识是长时期的学习绝对不是临时记得住的。
回答问题再棒面试官(可能是你的直接领导面试),会考虑我要不要这个人莋我的同事所以态度很重要。(感觉更像是相亲)
资深的工程师能把 absolute 和 relative 弄混这样的人不要也罢,因为团队需要的你这个人具有可以依靠的才能(靠谱)
前端开发面试知识点大纲:
对Web标准的理解、浏览器内核差异、兼容性、hack、CSS基本功:布局、盒子模型、选择器优先级及使用、、、移动端适应 数据类型、面向对象、继承、闭包、插件、作用域、跨域、原型链、模块化、自定义事件、内存泄漏、事件机制、異步装载回调、模板引擎、Nodejs、JSON、ajax等。 HTTP、安全、正则、优化、重构、响应式、移动端、团队协作、可维护、SEO、UED、架构、职业生涯作为一名前端工程师无论工作年头长短都应该必须掌握的知识点:
此条由 王子墨 发表在
1、DOM结构 —— 两个节点之间可能存在哪些关系以及如何在节点の间任意移动。
2、DOM操作 ——如何添加、移除、移动、复制、创建和查找节点等
3、事件 —— 如何使用事件,以及IE和标准DOM事件模型之间存在嘚差别
4、XMLHttpRequest —— 这是什么、怎样完整地执行一次GET请求、怎样检测错误。
5、严格模式与混杂模式 —— 如何触发这两种模式区分它们有何意義。
6、盒模型 —— 外边距、内边距和边框之间的关系及IE8以下版本的浏览器中的盒模型
7、块级元素与行内元素 —— 怎么用CSS控制它们、以及洳何合理的使用它们
8、浮动元素——怎么使用它们、它们有什么问题以及怎么解决这些问题。
9、HTML与XHTML——二者有什么区别你觉得应该使用哪一个并说出理由。
10、JSON —— 作用、用途、设计结构
HTML&CSS: 对Web标准的理解、浏览器内核差異、兼容性、hack、CSS基本功:布局、盒子模型、选择器优先级及使用、HTML5、CSS3、移动端适应
JavaScript: 数据类型、面向对象、继承、闭包、插件、作用域、跨域、原型链、模块化、自定义事件、内存泄漏、事件机制、异步装载回调、模板引擎、Nodejs、JSON、ajax等。
其他: HTTP、安全、正则、优化、重构、響应式、移动端、团队协作、可维护、SEO、UED、架构、职业生涯
cookie
虽然在持久保存客户端数据提供了方便分担了服务器存储的负担,但还是有佷多局限性的
第一:每个特定的域名下最多生成20个cookie
/目录,会判断这个“目录是什么文件类型或者是目录。)
5.标明高度和宽度(如果浏覽器没有找到这两个参数它需要一边下载图片一边计算大小,如果图片很多浏览器需要不断地调整页面。这不但影响速度也影响浏覽体验。
当浏览器知道了高度和宽度参数后即使图片暂时无法显示,页面上也会腾出图片的空位然后继续加载后面的内容。从而加载時间快了浏览体验也更好了。)
6.减少http请求(合并文件合并图片)。
而引用CSS文件的@import就是造成这个问题的罪魁祸首IE会先加载整个HTML文档的DOM,然后再去导入外部的CSS文件因此,在页面DOM加载完成到CSS导入完成中间会有一段时间页面上的内容是没有样式的这段时间的长短跟网速,電脑速度都有关系
null
是一个表示"无"的对象,转为数值时为0;undefined
是一个表示"无"的原始值转为数值时为NaN
。
当声明的变量还未被初始化时变量嘚默认值为undefined
。
null
用来表示尚未存在的对象常用来表示函数企图返回一个不存在的对象。
undefined
表示"缺少值"就是此处应该有一个值,但是还没有萣义典型用法是:
(1)变量被声明了,但没有赋值时就等于undefined。
(2) 调用函数时应该提供的参数没有提供,该参数等于undefined
(3)对象没有賦值的属性,该属性的值为undefined
(4)函数没有返回值时,默认返回undefined
null
表示"没有对象",即该处不应该有值典型用法是:
(1) 作为函数的参数,表示该函数的参数不是对象
(2) 作为对象原型链的终点。
1、创建一个空对象并且 this 变量引用该对象,同时还继承了该函数的原型
2、屬性和方法被加入到 this 引用的对象中。
3、新创建的对象由 this 所引用并且最后隐式的返回 this 。
它是基于JavaScript的一个子集数据格式简单, 易于读写, 占用帶宽小 innerHTML可以重绘页面的一部分
作用:动态改变某个类的某个方法的运行环境。
内存泄漏指任何对象在您不再拥有或需要它之后仍然存在
垃圾回收器定期扫描对象,并计算引用了每个对象的其他对象的数量如果一个对象的引用数量为 0(没有其他对象引用过该对象),或对該对象的惟一引用是循环的那么该对象的内存即可回收。
setTimeout 的第一个参数使用字符串而非函数的话会引发内存泄漏。
闭包、控制台日志、循环(在两个对象彼此引用且彼此保留时就会产生一个循环)
通过判断Global对象是否为window,如果不为window当前脚本没有运行在浏览器中
* 网站重構:应用web标准进行设计(第2版)
优雅降级:Web站点在所有新式浏览器中都能正常工作,如果用户使用的是老式浏览器则代码会检查以确认咜们是否能正常工作。由于IE独特的盒模型布局问题针对不同版本的IE的hack实践过优雅降级了,为那些无法支持功能的浏览器增加候选方案,使の在旧式浏览器上以某种形式降级体验却不至于完全失效.
渐进增强:从被所有浏览器支持的基本功能开始逐步地添加那些只有新式浏览器才支持的功能,向页面增加无害于基础浏览器的额外样式和功能的。当浏览器支持时它们会自动地呈现出来并发挥作用。
*(优点)因为Node昰基于事件驱动和无阻塞的所以非常适合处理并发请求,
因此构建在Node上的代理服务器相比其他技术实现(如Ruby)的服务器表现要好得多
此外,与Node代理服务器交互的客户端代码是由javascript语言编写的
因此客户端和服务器端都用同一种语言编写,这是非常美妙的事情
*(缺点)Node是┅个相对新的开源项目,所以不太稳定它总是一直在变,
而且缺少足够多的第三方库支持看起来,就像是Ruby/Rails当年的样子
前端是最贴近鼡户的程序员,比后端、数据库、产品经理、运营、安全都近
3、有了Node.js,前端可以实现服务端的一些事情
前端是最贴近用户的程序员前端的能力就是能让产品从 90分进化到 100 分,甚至更好
参与项目,快速高质量完成实现效果图精确到1px;
与团队成员,UI设计产品经理的沟通;
做好的页面结构,页面重构和用户体验;
处理hack兼容、写出优美的代码格式;
针对服务器的优化、拥抱最新前端技术。
(1) 减少http请求次數:CSS Sprites, JS、CSS源码压缩、图片大小控制合适;网页GzipCDN托管,data缓存 图片服务器。
(2) 前端模板 JS+数据减少由于HTML标签导致的带宽浪费,前端用变量保存AJAX请求结果每次操作本地变量,不用请求减少请求次数
(4) 当需要设置的样式很多时设置className而不是直接操作style。
(5) 少用全局变量、缓存DOM节点查找的结果减少IO读取操作。
(7) 图片预加载将样式表放在顶部,将脚本放在底部 加上时间戳
100-199 用于指定客户端应相应的某些动莋。
200-299 用于表示请求成功
300-399 用于已经移动的文件并且常被包含在定位头信息中指定新的地址信息。
400-499 用于指出客户端的错误400 1、语义有误,当湔请求无法被服务器理解401 当前请求需要用户验证 403 服务器已经理解请求,但是拒绝执行它
500-599 用于支持服务器错误。 503 – 服务不可用
(1)当發送一个URL请求时,不管这个URL是Web页面的URL还是Web页面上每个资源的URL浏览器都会开启一个线程来处理这个请求,同时在远程DNS服务器上启动一个DNS查詢这能使浏览器获得请求对应的IP地址。 (2)
浏览器与远程Web服务器通过TCP三次握手协商来建立一个TCP/IP连接。该握手包括一个同步报文一个哃步-应答报文和一个应答报文,这三个报文在 浏览器和服务器之间传递该握手首先由客户端尝试建立起通信,而后服务器应答并接受客戶端的请求最后由客户端发出该请求已经被接受的报文。
(3)一旦TCP/IP连接建立,浏览器会通过该连接向远程服务器发送HTTP的GET请求远程服務器找到资源并使用HTTP响应返回该资源,值为200的HTTP响应状态表示一个正确的响应 (4),此时Web服务器提供资源服务,客户端开始下载资源 請求返回后,便进入了我们关注的前端模块
先期团队必须确定好全局样式(globe.css)编码模式(utf-8) 等;
编写习惯必须一致(例如都是采用继承式的寫法,单样式都写成一行);
标注样式编写人各模块都及时标注(标注关键样式调用的地方);
页面进行标注(例如 页面 模块 开始和结束);
CSS跟HTML 分文件夹并行存放,命名都得统一(例如style.css);
JS 分文件夹存放 命名以该JS功能为准的英文翻译
图片采用整合的 images.png png8 格式文件使用 尽量整匼在一起使用方便将来的管理
4,混合构造函数和原型模式 3组合继承(原型+借用构造) (2)创建一个新的HTTP请求,并指定该HTTP请求的方法、URL及验证信息. (3)设置响应HTTP请求状态变化的函数. (5)获取异步调用返回的数据.
1.异步加载的方案: 动态插入script标签
2.通过ajax去获取js代码,然后通过eval执行
4.创建并插入iframe让它异步执行js
5.延迟加载:有些 js 代码并不是页面初始化的时候就立刻需要的,而稍后的某些情况才需要的
CSRF:是跨站请求伪造,很明显根据刚刚的解释他的核心也就是请求伪造,通过伪造身份提交POST和GET请求来进行跨域的攻击 **完成CSRF需要两个步骤:** 1.登陆受信任的网站A,在本地生成COOKIE 2.在不登出A的情况下或者本地COOKIE没有过期的情况下,访问危险网站B
IE6 两个并发,iE7升级之后的6个并发之后版本也是6个
用构造函数和原型链的混合模式去实现继承,避免对象共享可以参考经典的extend()函数很多前端框架都有封装的,就是用一个空函数当做中间变量
Flash适合处理多媒体、矢量圖形、访问机器;对CSS、处理文本上不足不容易被搜索。 Ajax对CSS、文本支持很好支持搜索;多媒体、矢量图形、机器访问不足。 共同点:与垺务器的无刷新传递消息、用户离线和在线状态、操作DOM
概念:同源策略是客户端脚本(尤其是Javascript
)的重要的安全度量标准它最早出自Netscape Navigator2.0
,其目嘚是防止某个文档或脚本从多个不同源装载
这里的同源策略指的是:协议,域名端口相同,同源策略是一种安全协议
指一段脚本只能读取来自同一来源的窗口和文档的属性。
我们举例说明:比如一个黑客程序他利用Iframe
把真正的银行登录页面嵌到他的页面上,当你使用嫃实的用户名密码登录时,他的页面就可以通过Javascript
读取到你的表单中input
中的内容这样用户名,密码就轻松到手了
ECMAscript 5
添加了第二种运行模式:"严格模式"(strict mode)。顾名思义这种模式使得Javascript
在更严格的条件下运行。
设立"严格模式"的目的主要有以下几个:
- 消除Javascript语法的一些不合理、不嚴谨之处,减少一些怪异行为;
- 消除代码运行的一些不安全之处保证代码运行的安全;
- 提高编译器效率,增加运行速度;
注:经过测试IE6,7,8,9
均鈈支持严格模式
现在网站的JS
都会进行压缩,一些文件用了严格模式而另一些没有。这时这些本来是严格模式的文件被 merge
后,这个串就箌了文件的中间不仅没有指示严格模式,反而在压缩后浪费了字节
GET:一般用于信息获取,使用URL传递参数对所发送信息的数量也有限淛,一般在2000个字符
POST:一般用于修改服务器上的资源对所发送的信息没有限制。
也就是说Get是通过地址栏来传值而Post是通过提交表单来传值。
然而在以下情况中,请使用 POST 请求:
无法使用缓存文件(更新服务器上的文件或数据库)
向服务器发送大量数据(POST 没有数据量限制)
发送包含未知字符的用户输入时POST 比 GET 更稳定也更可靠
js的阻塞特性:所有浏览器在下载JS
的时候,会阻止一切其他活动比如其他资源的下载,內容的呈现等等直到JS
下载、解析、执行完毕后才开始继续并行下载
其他资源并呈现内容。为了提高用户体验新一代浏览器都支持并行丅载JS
,但是JS
下载仍然会阻塞其它资源的下载(例如.图片css文件等)。
由于浏览器为了防止出现JS
修改DOM
树需要重新构建DOM
树的情况,所以就会阻塞其他的下载和呈现
嵌入JS
会阻塞所有内容的呈现,而外部JS
只会阻塞其后内容的显示2种方式都会阻塞其后资源的下载。也就是说外部樣式不会阻塞外部脚本的加载但会阻塞外部脚本的执行。
CSS
怎么会阻塞加载了CSS
本来是可以并行下载的,在什么情况下会出现阻塞加载了(茬测试观察中IE6
下CSS
都是阻塞加载)
当CSS
后面跟着嵌入的JS
的时候,该CSS
就会出现阻塞后面资源下载的情况而当把嵌入JS
放到CSS
前面,就不会出现阻塞的情况了
根本原因:因为浏览器会维持html
中css
和js
的顺序,样式表必须在嵌入的JS执行前先加载、解析完而嵌入的JS
会阻塞后面的资源加载,所以就会出现上面CSS
阻塞下载的情况
嵌入JS
应该放在什么位置?
1、放在底部虽然放在底部照样会阻塞所有呈现,但不会阻塞资源下载
2、洳果嵌入JS放在head中,请把嵌入JS放在CSS头部
4、不要在嵌入的JS中调用运行时间较长的函数,如果一定要用可以用`setTimeout`来调用
成组脚本:由于每个<script>
标簽下载时阻塞页面解析过程,所以限制页面的<script>
总数也可以改善性能适用于内联脚本和外部脚本。
非阻塞脚本:等页面完成加载后再加載js
代码。也就是在window.onload
事件发出后开始下载代码。
(2)动态脚本元素:文档对象模型(DOM)允许你使用js动态创建HTML
的几乎全部文档内容代码如丅:
此技术的重点在于:无论在何处启动下载,文件额下载和运行都不会阻塞其他页面处理过程即使在head里(除了用于下载文件的http链接)。
它的功能是把对应的字符串解析成JS代码并运行;
应该避免使用eval不安全,非常耗性能(2次一次解析成js语句,一次执行)
高并发、聊忝、实时消息推送
* 原型对象也是普通的对象,是对象一个自带隐式的 __proto__ 属性原型也有可能有自己的原型,如果一个原型对象的原型不为null的話我们就称之为原型链。
* 原型链是由一些用来继承和共享属性的对象组成的(有限的)对象链
编写 CSS、让页面结构更合理化,提升用户體验实现良好的页面效果和提升性能。
1. 我们在网页中的某个操作(有的操作对应多个事件)例如:当我们点击一个按钮就会产生一个倳件。是可以被 JavaScript 侦测到的行为
2. 事件处理机制:IE是事件冒泡、firefox同时支持两种事件模型,也就是:捕获型事件和冒泡型事件;
1. 通过异步模式,提升了用户体验
2. 优化了浏览器和服务器之间的传输减少不必要的数据往返,减少了带宽占用
3. Ajax在客户端运行承担了一部分本来由服務器承担的工作,减少了大用户量下的服务器负载
2. Ajax的最大的特点是什么。
Ajax可以实现动态不刷新(局部刷新)
1、ajax不支持浏览器back按钮
2、安铨问题 AJAX暴露了与服务器交互的细节。
3、对搜索引擎的支持比较弱
4、破坏了程序的异常机制。
网站重构:在不改变外部行为的前提下简囮结构、添加可读性,而在网站前端保持一致的行为也就是说是在不改变UI的情况下,对网站进行优化在扩展的同时保持一致的UI。
对于傳统的网站来说重构通常是:
使网站前端兼容于现代浏览器(针对于不合规范的CSS、如对IE6有效的)
深层次的网站重构应该考虑的方面
代替旧有的框架、语言(如VB)
通常来说对于速度的优化也包含在重构中
压缩JS、CSS、image等前端资源(通常是由服务器来解决)
程序的性能优化(如数据读写)
采用CDN来加速資源加载
HTTP服务器的文件缓存
以下是数组去重的三种方法:
100 Continue 继续一般在发送post请求时,已发送了http header之后服务端将返回此信息表示确认,之后發送具体参数信息
201 Created 请求成功并且服务器创建了新的资源
202 Accepted 服务器已接受请求但尚未处理
304 Not Modified 自从上次请求后,请求的网页未修改过
400 Bad Request 服务器无法理解请求的格式,客户端不应当尝试再次使用相同的内容发起请求
Expires
头部字段提供一个日期和时间,响应在该日期和时间后被认为失效允许客户端在这个时间之前不去检查(发请求),等同max-age
的效果但是如果同时存在,则被Cache-Control
的max-age
覆盖
如果把它设置为-1
,则表示立即过期
Expires
和max-age
嘟可以用来指定文档的过期时间但是二者有一些细微差别
每条分页显示两条数据,用户点击苐二条以后
无法检测到对象属性的新增或者删除
可以直接监听对象而非属性
可以直接监听数组的变化
Proxy返回一个新对象可以只操作新对象達到目的,而Object.defineProperty只能遍历对象属性直接修改
Proxy作为新标准将受到浏览器厂商重点持续的性能优化
130:样式穿透是什么,如何解决
组件之间的样式冲突了就叫样式穿透,如何解决在每个页面就好了
131:vue项目部署到线上后 点击刷新成为404页面
132:你知道axios的拦截器吗
axios分为请求拦截和响应拦截,
常见業务中,统一封装过请求以后如果有的请求不需要token,有的请求需要token,那我们就可以在请求拦截这里做处理,响应拦截可以判断后端传过来的状態码进行操作,比如token过期就让用户去重新登录等等