2020-08-28 面试题

1. H5应用缓存和浏览器缓存的区别

H5引入了应用缓存的概念,就是离线缓存

提高性能,借助manifest文件实现

使用

  1. 引入
<html manifest="test.appache">

https://www.w3school.com.cn/html5/html_5_app_cache.asp

  1. 编写manifest文件

manifest文件

CACHE MANIFEST   文件将在首次下载后进行缓存
NETWORK			文件需要与服务器的连接,且不会被缓存
FALLBACK		文件规定当页面无法访问时的回退页面
window.applicationCache

浏览器实现离线缓存

有网络的情况,html标签设置了manifest属性后,浏览器第一次加载网页,会根据manifest属性访问到.appache结尾的文件,然后根据文件内容进行离线缓存。已经访问过的情况下,浏览器会利用已经离线存储的文件资源加载页面,再对比manifest文件时候改变,如果改变了,重新下载文件中的资源并进行离 线存储。

没有网络的时候 直接使用离线缓存的资源文件

2.H5存储

cookie localstorage sessionstorage

  1. 作用
  2. 存储时长
  3. 存储大小

3. h5文档类型和字符集

H5文档类型:HTML使用的UTF-8

https://www.cnblogs.com/wuqiutong/p/5986191.html

Doctype作用

文件类型定义(DTD)声明的作用为了告诉浏览器该文件的类型。让浏览器解析器知道应该用哪个规范来解析文档。声明必须在 HTML 文档的第一行,这并不是一个 HTML 标签。

4. HTML全局属性

https://www.w3school.com.cn/tags/html_ref_standardattributes.asp

5.viewport

一个常用的针对移动网页优化过的页面的 viewport meta 标签

<meta name="viewport" content="width=device-width, initial-scale=1.0">
width  设置viewport宽度 device-width  设备宽度
height 设置viewport高度   一般设置了宽度,会自动解析出高度
initial-scale 默认缩放比例(初始缩放比例)
minimum-scale 允许用户最小缩放比例
maximum-scale 允许用户最大缩放比例
user-scalable 是否允许手动缩放

6.meta

<DOCTYPE html> <!--H5 标准声明,使用 HTML5 doctype,不区分大小写-->
<head lang=”en”> <!--标准的 lang 属性写法-->
<meta charset=’utf-8ʹ><!--声明文档使用的字符编码-->
<meta name=”description” content=”不超过 150 个字符”/><!--页面描述-->
<meta name=”keywords” content=””/><!-- 页面关键词-->
<meta name=”author” content=”name, email@gmail.com”/><!--网页作者--> 
<meta name=”robots” content=”index,follow”/><!--搜索引擎抓取-->
<meta name=”apple-mobile-web-app-title” content=”标题”><!--iOS 设备 begin-->
<meta name=”apple-mobile-web-app-capable” content=”yes”/><!--添加到主屏后的标题(i 是
否启用 WebApp 全屏模式,删除苹果默认的工具栏和菜单栏-->
<meta name=”renderer” content=”webkit”><!-- 启用 360 浏览器的极速模式(webkit)--> 
<meta name=”x5-orientation” content=”portrait”> <!--QQ 强制竖屏-->
    
    
<!--设置页面不缓存--> 
<meta http-equiv=”pragma” content=”no-cache”>
<meta http-equiv=”cache-control” content=”no-cache”>
<meta http-equiv=”expires” content=”0″>

7.响应式布局

  1. viewport

  2. 网格视图

    *{
    	box-sizing:border-box;
    }
    //将网页划分成12列   100% / 12 列 = 8.33%   class="col-"
    
  3. 媒体查询

    @media only screen and (max-width:457px){
    	/*浏览器窗口小于457px时的样式*/
    }
    

8.SEO优化

  1. title,description,keywords 搜索对着三项的权重逐个减小 每个页面标题合适 描述合适

    title:重点,越是关键内容放在越前面

    description:页面内容高度概括,长度合适

    keywords:列举重要关键词

  2. 使用语义化HTML标签 让搜索引擎容易理解网页

  3. 重要内容 HTML 代码放在最前:搜索引擎抓取 HTML 顺序是从上到下,有的搜索引擎对抓取长 度有限制,保证重要内容一定会被抓取

  4. 重要内容不要用 js 输出:爬虫不会执行 js 取内容

  5. 少用 iframe :搜索引擎不会抓取 iframe 中的内容

  6. 非装饰性图片必须加 alt

  7. 提高网站速度:网站速度是搜索引擎排序的一个重要指标

9.渲染优化

  1. 禁止使用iframe阻塞文档onload事件

  2. 禁止使用 gif 图片实现 loading 效果(降低 CPU 消耗,提升渲染性能)

  3. 使用 CSS3 代码代替 JS 动画(尽可能避免重绘重排以及回流)

  4. 对于一些小图标,可以使用 base64 位编码,以减少网络请求。但不建议大图使用,比较耗费 CPU

  5. 页面头部的会阻塞页面;(因为Renderer 进程中 JS 线程和渲染线程是互斥的)

  6. 页面中空的 href 和 src 会阻塞页面其他资源的加载 (阻塞下载进程)

  7. 前端模板 JS+数据,减少由于 HTML 标签导致的带宽浪费,前端用变量保存 AJAX 请求结果,每次操作本地变量,不用请求,减少请求次数

  8. 网页 gzip ,CDN 托管,data 缓存 ,图片服务器

  9. 用 innerHTML 代替 DOM 操作,减少 DOM 操作次数,优化 javascript 性能

  10. 当需要设置的样式很多时设置 className 而不是直接操作 style

  11. 少用全局变量、缓存 DOM 节点查找的结果。减少 IO 读取操作

  12. 图片预加载,将样式表放在顶部,将脚本放在底部 加上时间戳

    总:尽量向前端优化、减少数据库操作、减少磁盘 IO

10.js引入位置

  1. body部分 js在页面加载的时候执行
  2. head部分 js被调用时执行

11. css优先级计算

  1. 声明元素选择符 :1
  2. class选择符:10
  3. id符:100
  4. !important 优先级最高
  5. 优先级相同时,选择最后出现的
  6. 继承的样式优先级最低

12.重绘和回流

什么是重绘和回流

重绘简单的说就是重新绘页面 回流是元素尺寸,布局,或者被隐藏引起的页面重构

回流必定会引起重绘 但重绘不一定会引起回流

触发回流的条件

添加或者删除可见的DOM元素

元素位置改变,元素尺寸改变

边距、填充、边框、宽度和高度,内容改变

浏览器页面初始化

减少重绘和回流

首先浏览器机制会帮助我们,浏览器会维护1个队列,把所有会引起回流、重绘的操作放入这个队列,等队列中的操作到了一定的数量或者到了一定的时间间隔,浏览器就会flush队列,进行一个批处理

  1. 操作样式时使用 cssText className
  2. 不在布局信息改变时做DOM查询
  3. 对于多次重排的元素,如动画,使用绝对定位脱离文档流

13.base64的优缺点

优点:可以加密 减少HTTP请求

缺点:需要消耗CPU进行编码

14. PNG /GIF /JPG 的区别及如何选

GIF

8位像素 256色

无损压缩

支持简单动画

支持 boolean 透明

适合简单动画

JPEG

颜色限于 256

有损压缩

可控制压缩质量

支持透明

适合照片

PNG

有 PNG8 和 truecolor PNG

PNG8 类似 GIF 颜色上限为 256 ,文件小,支持 alpha 透明度,无动画

适合图标、背景、按钮

15.浏览器兼容问题

  1. 兼容性工具

    (html5shiv.js , respond.js , css reset, normalize.css , Modernizr)

  2. 条件判断,CSS Hack , js检测

  3. 框架库的选择

渐进增强(progressive enhancement)

针对低版本进行构建页面,保证最基本的功能,然后再针对高级浏览器进行效果,交互等改进和追加功能达到更好的用户体验

优雅降级(graceful degradation)

一开始先构建完整的功能,然后再针对低版本的浏览器进行兼容

16.前端性能优化

  1. 减少HTTP请求
  2. 减少DOM操作
  3. 避免不必要的重绘和回流
  4. 优化css选择器
  5. css、js压缩
  6. Gzip压缩
  7. 将css放置顶部,js放置尾部
  8. 压缩图片以及精灵图的使用(css sprite)
  9. 使用CDN加速 适当进行文件缓存
  10. 合理控制cookie大小

17. 如何解决前端安全性问题

XSS

恶意脚本攻击 跨站脚本攻击

web浏览器本身设计不安全 不会判断恶意代码

CSRF

跨域请求伪造

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值