1、前端需要注意哪些SEO
(1)合理的title、description、keywords
:搜索对着三项的权重逐个减小,title
值强调重点即可,重要关键词出现不要超过2次,而且要靠前,不同页面title
要有所不同;description
把页面内容高度概括,长度合适,不可过分堆砌关键词,不同页面description
有所不同;keywords
列举出重要关键词即可。
(2)语义化的HTML
代码,符合W3C规范:语义化代码让搜索引擎容易理解网页。
(3)重要内容HTML
代码放在最前:搜索引擎抓取HTML
顺序是从上到下,有的搜索引擎对抓取长度有限制,保证重要内容一定会被抓取。
(4)重要内容不要用js输出:爬虫不会执行js获取内容。
(5)少用ifram
:搜索引擎不会抓取ifram
中的内容。
(6)非装饰图片必须加alt
。
(7)提高网站速度:网站速度是搜索引擎排序的一个重要指标。
2、<img>
的title
和alt
有什么区别
(1)通常当鼠标滑动到元素上的时候显示。
(2)alt
是<img>
的特有属性,是图片内容的等价描述,用于图片无法加载时显示读屏器阅读图片,可提高图片访问性,除了纯装饰图片外都必须设置有意义的值,搜索引擎会重点分析。
3、HTTP的几种请求方法用途
(1)GET
方法:发送一个请求来取得服务器上的某一资源。
(2)POST
方法:向URL
指定的资源提交数据或附加新的数据。
(3)PUT
方法:跟POST
方法很像,也是向服务器提交数据,但是,它们之间有不同,PUT
指定了资源在服务器上的位置,而POST
没有。
(4)HEAD
方法:只请求页面的首部。
(5)DELETE
方法:删除服务器上的某资源。
(6)OPTION
方法:用于获取当前URL
所支持的方法。如果请求成功,会有一个ALLOW
的头包含类似"GET,POST
"这样的信息。
(7)TRACE
方法:TRACE
方法被用于激发一个远程的、应用层的请求消息回路。
(8)CONNECT
方法:把请求连接转换到透明的TCP/IP
通道。
4、从浏览器地址输入url到显示页面的步骤
基础版本:
a.浏览器根据请求的URL
交给DNS
域名解析,找到真实IP
,向服务器发起请求;
b.服务器交给后台处理完成后返回数据,浏览器接收文件(HTML、JS、CSS
、图像等);
c.浏览器对加载到的资源(HTML、JS、CSS
等)进行语法解析,建立相应的内部数据结构(如HTML
的DOM
);
d.载入解析到的资源文件,渲染页面,完成。
详细版:
(1)在浏览器地址栏输入URL
;
(2)浏览器查看缓存,如果请求资源在缓存中并且新鲜,跳转到转码步骤:
a.如果资源未缓存,发起新请求;
b.如果已缓存,检验是否足够新鲜,足够新鲜直接提供给客户端,否则与服务器进行验证。
c.检验新鲜通常有两个HTTP头进行控制Expires
和Cache-Control
:
HTTP1.0t提供Expires
,值为一个绝对时间表示缓存新鲜日期;
HTTP2.0增加了Cache-Control:max-age=
,值为以秒为单位的最大新鲜时间。
(3)浏览器解析URL
获取协议、主机、端口、path;
(4)浏览器组装一个HTTP(GET)
请求报文;
(5)浏览器获取主机ip
地址,过程如下:
a.浏览器缓存
b.本机缓存
c.hosts
文件
d.路由器缓存
e.ISP DNS
缓存
f.DNS
递归查询(可能存在负载均衡导致每一次IP不一样)
(6)打开一个socket
与目标IP
地址,端口建立TCP
链接,三次握手如下:
a.客户端发送一个TCP
的SYN=1,Seq=X
的包到服务器窗口;
b.服务器发回SYN=1,ACK=X+1,Seq=Y
的响应包;
c.客户端发送ACK-Y+1,Seq=Z
。
(7)TCP
链接建立后发送HTTP
请求;
(8)服务器接受请求并解析,将请求转发到服务程序,如虚拟主机使用HTTP Host
头部判断请求的服务程序;
(9)服务器检查HTTP
请求头是否包含缓存验证信息如果验证缓存新鲜,返回304等对应状态码;
(10)处理程序读取完整请求并准备HTTP
响应,可能需要查询数据库等操作;
(11)服务器将响应报文通过TCP
连接发送回浏览器;
(12)浏览器接收HTTP
响应,然后根据情况选择关闭TCP
连接或者保留重用,关闭TCP
连接的四次握手如下:
a.主动方发送Fin=1,Ack=Z,Seq=X
报文;
b.被动方发送ACK=X+1,Seq=Z
报文;
c.被动方发送Fin=1,ACK=X,Seq=Y
报文;
d.主动方发送ACK=Y,Seq=X
报文;
(13)浏览器检查响应状态吗:是否为1XX,3XX,4XX,5XX
,这些情况处理与2XX
不同;
(14)如果资源可缓存,进行缓存;
(15)对响应进行解码(例如gzip压缩);
(16)根据资源类型决定如何处理(假设资源为HTML
文档);
(17)解析HTML
文档,构件DOM
树,下载资源,构造CSSOM
树,执行js
脚本,这些操作没有严格的先后顺序,以下分别解释;
(18)构建DOM
树:
a.Tokenizing
:根据HTML
规范将字符流解析为标记;
b.Lexing
:词法分析将标记转换为对象并定义属性和规则;
c. DOM construction
:根据HTML标记关系将对象组成DOM
树;
(19)解析过程中遇到图片、样式表、js
文件,启动下载;
(20)构建CSSOM
树:
a.Tokenizing
:字符流转换为标记流
b.Node
:根据标记创建节点
c.CSSOM
:节点创建CSSOM
树
(21)根据DOM
树和CSSOM
树构建渲染树:
a.从DOM
树的根节点遍历所有可见节点,不可见节点包括:1) script
,meta
这样本身不可见的标签。2)被css
隐藏的节点,如 display:none
b.对每一个可见节点,找到恰当的CSSOM
规则并应用
c. 发布可视节点的内容和计算样式
(22)js
解析如下:
a.浏览器创建Document
对象并解析HTML
,将解析到的元素和文本节点添加到文档中,此时document.readystate
为loading
。
b. HTML
解析器遇到没有async
和defer
的script
时,将他们添加到文档中,然后执行行内或外部脚本。这些脚本会同步执行,并且在脚本下载和执行时解析器会暂停。这样就可以用document.write()
把文本插入到输入流中。同步脚本经常简单定义函数和注册事件处理程序,他们可以遍历和操作script
和他们之前的文档内容。
c.当解析器遇到设置了async
属性的script
时,开始下载脚本并继续解析文档。脚本会在它下载完成后尽快执行,但是解析器不会停下来等它下载。异步脚本禁止使用
document.write()
,它们可以访问自己script
和之前的文档元素。
d.当文档完成解析,document.readState
变成interactive
。
f.所有defer脚本会按照在文档出现的顺序执行,延迟脚本能访问完整文档树,禁止使用document.write()
。
g.浏览器在Document
对象上触发DOMContentLoaded
事件。
h.此时文档完全解析完成,浏览器可能还在等待如图片等内容加载,等这些内容完成载入并且所有异步脚本完成载入和执行,document.readState
变为complete
,window
触发load
事件。
(23)显示页面(HTML解析过程中会逐步显示页面)
详细简版
a.从浏览器接收 url
到开启网络请求线程(这一部分可以展开浏览器的机制以及进程与线程之间的关系)。
b.开启网络线程到发出一个完整的HTTP
请求(这一部分涉及到dns
查询,TCP/IP
请求,五层因特网协议栈等知识)。
c.从服务器接收到请求到对应后台接收到请求(这一部分可能涉及到负载均衡,安全拦截以及后台内部的处理等等)。
d.后台和前台的 HTTP
交互(这一部分包括 HTTP
头部、响应码、报文结构、cookie
等知识,可以提下静态资源的 cookie
优化,以及编码解码,如gzip
压缩等)。
f.单独拎出来的缓存问题, HTTP
的缓存(这部分包括http
缓存头部,ETag,catch-control
等)。
g.浏览器接收到 HTTP
数据包后的解析流程(解析 html
-词法分析然后解析成dom
树、解析css
生成 css
规则树、合并成 render
树,然后 layout、painting
渲染、复合图层的合成、GPU
绘制、外链资源的处理、loaded
和 DOMContentLoaded
等)。
h. CSS的可视化格式模型(元素的渲染规则,如包含块,控制框,BFC,IFC
等概念)。
i. JS
引擎解析过程(JS
的解释阶段,预处理阶段,执行阶段生成执行上下文,VO
,作用域链、回收机制等等)。
j.其它(可以拓展不同的知识模块,如跨域,web
安全,hybrid
模式等等内容)。
5、如何进行网站性能优化
content
方面
。减少 HTTP
请求:合并文件、CSS
精灵、inline Image
。减少 DNS
查询:DNS
缓存、将资源分布到恰当数量的主机名
。减少 DOM
元素数量
Server
方面
。使用 CDN
。配置 ETag
。对组件使用 Gzip
压缩
Cookie
方面
。减小 cookie
大小
css
方面
。将样式表放到页面顶部
。不使用CSS
表达式
。使用<link>
不使用@import
Javascript
方面
。将脚本放到页面底部
。将 javascript
和css
从外部引入
。压缩 javascript
和 css
。删除不需要的脚本
。减少 DOM
访问
·图片方面
。优化图片:根据实际颜色需要选择色深、压缩
。优化 css
精灵
。不要在 HTML
中拉伸图片
6 、HTTP状态码及其含义
1XX
:信息状态码
。100 Continue
继续,一般在发送 post
请求时,已发送了 http header
之后服务端将返回此信息,表示确认,之后发送具体参数信息
2XX
:成功状态码
。 200 0K
正常返回信息
。 201 Created
请求成功并且服务器创建了新的资源
。 202 Accepted
服务器已接受请求,但尚未处理
3XX
:重定向
。301 Moved Permanently
请求的网页已永久移动到新位置。
。 302 Found
临时性重定向。
。 303 See Other
临时性重定向,且总是使用 GET
请求新的 URL
。
。 304 Not Modified
自从上次请求后,请求的网页未修改过。
4XX
:客户端错误
。 400 Bad Request
服务器无法理解请求的格式,客户端不应当尝试再次使用相同的内容发起请求。
。 401 Unauthorized
请求未授权。
。 403 Forbidden
禁止访问。
。 404 Not Found
找不到如何与 URL
相匹配的资源。
5XX
:服务器错误
。500 Internal Server Error
最常见的服务器端错误。
。 503 Service Unavailable
服务器端暂时无法处理请求(可能是过载或维护)。
7、语义化的理解
•用正确的标签做正确的事情!
·HTML
语义化就是让页面的内容结构化,便于对浏览器、搜索引擎解析;
·在没有样式CSS
情况下也以一种文档格式显示,并且是容易阅读的。
·搜索引擎的爬虫依赖于标记来确定上下文和各个关键字的权重,利于 SEO
。
•使阅读源代码的人对网站更容易将网站分块,便于阅读维护理解
8、介绍一下你对浏览器内核的理解?
·主要分成两部分:渲染引擎(layout engineer
或 Rendering Engine
)和 JS
引擎
·渲染引擎:负责取得网页的内容(HTML、XML
、图像等等)、整理讯息(例如加入CSS
等),以及计算网页的显示方式,然后会输出至显示器或打印机。浏览器的内核的不同对于网页的语法解释会有不同,所以渲染的效果也不相同。所有网页浏览器、电子邮件客户端以及其它需要编辑、显示网络内容的应用程序都需要内核。
.JS
引擎:解析和执行 javascript
来实现网页的动态效果
•最开始渲染引擎和JS
引擎并没有区分的很明确,后来JS引擎越来越独立,内核就倾向于只指渲染引擎。
9、 html5有哪些新特性、移除了那些元素?
HTML5
现在已经不是 SGML
的子集,主要是关于图像,位置,存储,多任务等功能的增加。
。绘画 canvas
。用于媒介回放的 video
和 audio
元素
。本地离线存储 localStorage
长期存储数据,浏览器关闭后数据不丢失。sessionStorage
的数据在浏览器关闭后自动删除
。语意化更好的内容元素,比如 article、footer、header 、nav、section
。表单控件,calendar 、date 、time 、email 、url、search
。新的技术 webworker、 websocket 、 Geolocation
·移除的元素:
。纯表现的元素:basefont、big 、center、font、s、strike、tt、u
。对可用性产生负面影响的元素:frame、frameset、noframes
•支持 HTML5
新标签:
。IE8/IE7/IE6
支持通过 document.createElement
方法产生的标签
。可以利用这一特性让这些浏览器支持 HTML5
新标签
。浏览器支持新标签后,还需要添加标签默认的样式
·当然也可以直接使用成熟的框架、比如html5shim
10、 HTML5
的离线储存怎么使用,工作原理能不能解释一下?
•在用户没有与因特网连接时,可以正常访问站点或应用,在用户与因特网连接时,更新用户机器上的缓存文件。
• 原理: HTML5
的离线存储是基于一个新建的 .appcache
文件的缓存机制(不是存储技术),通过这个文件上的解析清单离线存储资源,这些资源就会像 cookie
一样被存储了下来。之后当网络在处于离线状态下时,浏览器会通过被离线存储的数据进行页面展示·如何使用:
。页面头部像下面一样加入一个manifest
的属性;
。在cache.manifest
文件的编写离线存储的资源
。在离线状态时,操作window.applicationCache
进行需求实现
CACHE MANIFEST
#v0.11 CACHE: js/app.js css/style.css NETWORK: resourse/logo.png FALLBACK: /offline.html
11、浏览器是怎么对 HTMLs的离线储存资源进行管理和加载的呢
·在线的情况下,浏览器发现html
头部有manifest
属性,它会请求manifest
文件,如果是第一次访问 app
,那么浏览器就会根据manifest
文件的内容下载相应的资源并且进行离线存储。如果已经访问过 app
并且资源已经离线存储了,那么浏览器就会使用离线的资源加载页面,然后浏览器会对比新的 manifest
文件与旧的 manifest
文件,如果文件没有发生改变,就不做任何操作,如果文件改变了,那么就会重新下载文件中的资源并进行离线存储。
.离线的情况下,浏览器就直接使用离线存储的资源。
12、请描述一下 cookies, sessionStorage
和 localStorage
的区别?
cookie
是网站为了标示用户身份而储存在用户本地终端(Client Side)
上的数据(通常经过加密)
cookie
数据始终在同源的http
请求中携带(即使不需要),记会在浏览器和服务器间来回传递
sessionStorage
和 localStorage
不会自动把数据发给服务器,仅在本地保存•存储大小:
。 cookie
数据大小不能超过4k
。sessionStorage
和localStorage
虽然也有存储大小的限制,但比cookie
大得多,可以达到5M或更大
·有期时间:
。localStorage
存储持久数据,浏览器关闭后数据不丢失除非主动删除数据
。sessionStorage
数据在当前浏览器窗口关闭后自动删除
。cookie
设置的 cookie
过期时间之前一直有效,即使窗口或浏览器关闭
13、 iframe
有那些缺点?
· iframe
会阻塞主页面的 Onload
事件
·搜索引擎的检索程序无法解读这种页面,不利于SEO
iframe
和主页面共享连接池,而浏览器对相同域的连接有限制,所以会影响页面的并行加载。
·使用 iframe
之前需要考虑这两个缺点。如果需要使用iframe
,最好是通过javascript
动态给 iframe
添加 src
属性值,这样可以绕开以上两个问题
14 、WEB标准以及W3C标准是什么?
·标签闭合、标签小写、不乱嵌套、使用外链css
和js
、结构行为表现的分离
15、 xhtml
和html
有什么区别?
·一个是功能上的差别
。主要是XHTML
可兼容各大浏览器、手机以及 PDA,并且浏览器也能快速正确地编译网
•另外是书写习惯的差别
。XHTML
元素必须被正确地嵌套,闭合,区分大小写,文档必须拥有根元素
16、 Doctype作用?严格模式与混杂模式如何区分?它们有何意义?
·页面被加载的时,link
会同时被加载,而@import
页面被加载的时,link
会同时被加载,而@import
引用的CSS
会等到页面被加载完再加载 import
只在IE5
以上才能识别,而link
是XHTML
标签,无兼容问题 link
方式的样式的权重 高于@import
的权重。
<!DOCTYPE>
声明位于文档中的最前面,处于 <html>
标签之前。告知浏览器的解析器,用什么文档类型 规范来解析这个文档。
·严格模式的排版和 JS
运作模式是以该浏览器支持的最高标准运行
•在混杂模式中,页面以宽松的向后兼容的方式显示。模拟老式浏览器的行为以防止站点无法工作。DOCTYPE
不存在或格式不正确会导致文档以混杂模式呈现
17 、行内元素有哪些?块级元素有哪些?空(void)元素有那些?行内元素和块级元素有什么区别?
·行内元素有:a b span img input select strong
·块级元素有:div ul ol li dl dt dd h1 h2 h3 h4.. p
·空元素:<br> shr> <img> <input> <link> <meta>
•行内元素不可以设置宽高,不独占一行
·块级元素可以设置宽高,独占一行
18、 HTML全局属性(global attribute)有哪些
.class
:为元素设置类标识
.data-*
:为元素增加自定义属性
draggable
:设置元素是否可拖拽
id
:元素 id
,文档内唯一
lang
:元素内容的的语言
style
:行内 css
样式
title
:元素相关的建议信息
19、Canvas
和SVG
有什么区别?
svg
绘制出来的每一个图形的元素都是独立的DOM
节点,能够方便的绑定事件或用来修改。 canvas
输出的是一整幅画布
svg输出的图形是矢量图形,后期可以修改参数来自由放大缩小,不会失真和锯齿。而canvas 输出标量画布,就像一张图片一样,放大会失真或者锯齿。
20 、HTML5为什么只需要写<!DOCTYPE HTML>
HTML5
不基于 SGML
,因此不需要对 DTD
进行引用,但是需要doctype
来规范浏览器的行为
•而HTML4.01
基于 SGML
,所以需要对 DTD
进行引用,才能告知浏览器文档所使用的文档类型
21、如何在页面上实现一个圆形的可点击区域?
• svg
.border-radius
·纯js
实现 需要求一个点在不在圆上简单算法、获取鼠标坐标等等
22、网页验证码是干嘛的,是为了解决什么安全问题
•区分用户是计算机还是人的公共全自动程序。可以防止恶意破解密码、刷票、论坛灌水•有效防止黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试。
23、 viewport
<meta name=“viewport” content="width=device-width,initial-scale=1.0,minimm
// width 设置viewport宽度,为一个正整数,或字符串‘device-width’
// device-width 设备宽度
// height 设置viewport高度,一般设置了宽度,会自动解析出高度,可以不用设置
// initial-scale 默认缩放比例(初始缩放比例),为一个数字,可以带小数
// minimum-scale 允许用户最小缩放比例,为一个数字,可以带小数
// maximum-scale 允许用户最大缩放比例,为一个数字,可以带小数
//user-scalable 是否允许手动缩放
·延伸提问
。怎样处理 移动端 1px被 渲染成 2px 问题
局部处理
mate 标签中的 viewport 属性,initial-scale 设置为1
rem按照设计稿标准走,外加利用transfrome 的 scale(0.5)缩小一倍即可;
全局处理
mate 标签中的 viewport 属性,initial-scale 设置为 0.5
rem 按照设计稿标准走即可
24、 渲染优化
·禁止使用 iframe
(阻塞父文档 onload
事件)
。iframe
会阻塞主页面的 Onload
事件
。搜索引擎的检索程序无法解读这种页面,不利于SEO
。iframe
和主页面共享连接池,而浏览器对相同域的连接有限制,所以会影响页面的并行加载
。使用 iframe
之前需要考虑这两个缺点。如果需要使用iframe
,最好是通过javascript
。动态给 iframe
添加 src
属性值,这样可以绕开以上两个问题
·禁止使用 gif
图片实现loading
效果(降低CPU
消耗,提升渲染性能)
·使用CSS3
代码代替JS
动画(尽可能避免重绘重排以及回流)
·对于一些小图标,可以使用base64
位编码,以减少网络请求。但不建议大图使用,比较耗费 CPU
。小图标优势在于
·减少 HTTP
请求
·避免文件跨域
·修改及时生效
·页面头部的<style></style><script></script>
会阻塞页面;(因为 Renderer
进程中 JS
线程和渲染线程是互斥的)
·页面中空的 href
和 src
会阻塞页面其他资源的加载(阻塞下载进程)
•网页 gzip,CDN
托管,data
缓存,图片服务器
前端模板JS+
数据,减少由于 HTML
标签导致的带宽浪费,前端用变量保存AJAX
请求结果,每次操作本地变量,不用请求,减少请求次数
·用innerHTML
代替 DOM
操作,减少DOM
操作次数,优化javascript
性能·当需要设置的样式很多时设置 className
而不是直接操作 style
少用全局变量、缓存 DOM
节点查找的结果。减少IO
读取操作
·图片预加载,将样式表放在顶部,将脚本放在底部 加上时间戳
·对普通的网站有一个统一的思路,就是尽量向前端优化、减少数据库操作、减少磁盘I0