前端核心知识

Promise

Promise对象代表一个异步操作,有三种状态

  • Pending
  • Resolved
  • Rejected

Promise缺点是无法取消,pending的进度无法获取

基本api:

Promise.resolve()
Promise.reject()
Promise.reject()
Promise.prototype.then()
Promise.prototype.catch()
Promise.all()//所有的完成
Promise.race()//竞速 完成一个即可

block, inline和inline-block的区别

  • 起新行
    • block元素会独占一行, 多个block元素会各自新起一行. 默认情况下, block元素宽度自动填满其父元素宽度
    • inline元素不会独占一行, 多个相邻的行内元素会排列在同一行里, 直到一行排列不下, 才会新换一行, 其宽度随元素的内容而变化
  • 设置宽高
    • block元素可以设置width, height属性. 块级元素即使设置了宽度, 仍然独占一行
    • inline元素设置width, height无效
  • 内外边距
    • block元素可以设置margin和padding属性
    • inline元素的margin和padding属性,水平方向的padding-left, padding-right, margin-left, margin-right都会产生边距效果. 但是竖直方向的 margin/padding-top/bottom不会产生边距效果
  • 包含
    • block可以包含inline和block元素,而inline元只能包含inline元素
    • 而display: inline-block, 则是将对象呈现为inline对象, 但是对象的内容作为block对象呈现. 之后的内联对象会被排列到一行内. 比如我们可以给一个link(a元素)inline-block的属性, 使其既有block的高宽特性又有inline的同行特性

Ajax缓存

Ajax调用都采用缓存调用方式,一般采用附加特征参数方式实现,注意其中的<script src=”xxx.js?{VERHASH}”,{VERHASH}就是特征参数,这个参数不变化就使用缓存文件,如果发生变化则重新下载新文件或更新信息

浏览器结构

  1. 用户界面(UI)
  2. 浏览器引擎(Rendering engine)
  3. JS解析器
  4. 网络部分
  5. UI后端
  6. 数据存储

浏览器加载文件

文件加载顺序

浏览器加载页面上引用的CSS、JS文件、图片时,是按顺序从上到下加载的,每个浏览器可以同时下载文件的个数不同,因此经常有网站将静态文件放在不同的域名下,这样可以加快网站打开的速度。

reflow

在加载JS文件时,浏览器会阻止页面的渲染,因此将js放在页面底部比较好。

因为如果JS文件中有修改DOM的地方,浏览器会倒回去把已经渲染过的元素重新渲染一遍,这个回退的过程叫reflow。
CSS文件虽然不影响js文件的加载,但是却影响js文件的执行,即使js文件内只有一行代码,也会造成阻塞。因为可能会有var width = $('#id').width()这样的语句,这意味着,js代码执行前,浏览器必须保证css文件已下载和解析完成。
办法:当js文件不需要依赖css文件时,可以将js文件放在头部css的前面。

常见的能引起reflow的行为:

  1. 改变窗囗大小
  2. 改变文字大小
  3. 添加/删除样式表
  4. 脚本操作DOM
  5. 设置style属性

线程和进程的区别

一个程序至少有一个进程,一个进程至少有一个线程.

线程的划分尺度小于进程,使得多线程程序的并发性高。

线程是独立调度的基本单位, 进程是拥有资源的基本单位

另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。

线程在执行过程中与进程还是有区别的。

每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。

但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。

从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别

前端开发的优化问题

  1. 减少http请求次数:css spirit,data uri
  2. JS,CSS源码压缩
  3. 前端模板 JS+数据,减少由于HTML标签导致的带宽浪费,前端用变量保存AJAX请求结果,每次操作本地变量,不用请求,减少请求次数
  4. 用innerHTML代替DOM操作,减少DOM操作次数,优化javascript性能
  5. 用setTimeout来避免页面失去响应
  6. 用hash-table来优化查找
  7. 当需要设置的样式很多时设置className而不是直接操作style
  8. 少用全局变量
  9. 缓存DOM节点查找的结果
  10. 避免使用CSS Expression
  11. 图片预载
  12. 避免在页面的主体布局中使用table,table要等其中的内容完全下载之后才会显示出来,显示比div+css布局慢

display:none 和 visibility: hidden的区别

display:none 隐藏对应的元素,在文档布局中不再给它分配空间,它各边的元素会合拢,就当他从来不存在。

visibility:hidden 隐藏对应的元素,但是在文档布局中仍保留原来的空间。

CSS预处理器

基于 CSS 扩展了一套属于自己的 DSL,来解决我们书写 CSS 时难以解决的问题:

语法不够强大,比如无法嵌套书写导致模块化开发中需要书写很多重复的选择器;

没有变量和合理的样式复用机制,使得逻辑上相关的属性值必须以字面量的形式重复输出,导致难以维护。

选择器引用&

用 & 在嵌套的规则集中引用上层的选择器

元素分类

  • 行内元素有:span img input select strong
  • 块级元素有:div ul ol dl dt dd h1 h2 h3 h4 p...
  • 常见的空元素:br hr img input link meta base area command embed keygen param source track wbr....

搜索引擎优化SEO

  • 语义化html标签
  • 合理的title, description, keywords;
  • 重要的html代码放前面
  • 少用iframe, 搜索引擎不会抓取iframe中的内容
  • 图片加上alt

Doctype

  • 作用: doctype声明位于文档中最前面的位置,处于标签之前,告知浏览器使用的是哪种规范。
  • 类型: 三种: Strict、Transitional 以及 Frameset
  • 如果不声明: 不写doctype,浏览器会进入quirks mode (混杂模式)。即,如果不声明doctype,浏览器不引入w3c的标准,那么早期的浏览器会按照自己的解析方式渲染页面。浏览器采用自身方式解析页面的行为称为"quirks mode(混杂模式也称怪异模式)";采用w3c方式解析就是"strict mode(标准模式)"。 如果完全采用strictmode就不会出任何的差错,但这样会降低程序的容错率,加重开发人员的难度
  • 用哪种:
    • 没有doctype声明的采用quirks mode解析
    • 对于有doctype的大多数采用standard mord。
    • 特殊情况:
      • 对于那些浏览器不能识别的doctype ,浏览器采用quirks mode;
      • 没有声明DTD或者html版本声明低于4.0采用quirks mode,其他使用standard mode;
      • ie6中,如果在doctype声明前有一个xml声明(比如:<?xml version="1.0" encoding="iso-8859-1"?>),则采用quirks mode解析
  • 标准模式与怪异模式的区别:
    • 标准模式:浏览器根据规范呈现页面
    • 混杂模式(怪异模式):页面以一种比较宽松的兼容方式显示。
    • 他们最大的不同是对盒模型的解析。
      • 在strict mode中 :width是内容宽度 ,也就是说,元素真正的宽度 = margin-left + border-left-width + padding-left + width + padding-right + border-right- width + margin-right;
      • 在quirks mode中 :width则是元素的实际宽度 ,内容宽度 = width - (margin-left + margin-right + padding-left + padding-right + border-left-width +  border-right-width)

cookies,sessionStorage 和 localStorage 的区别

  • cookie:
    • cookie是网站为了标示用户身份而储存在用户本地终端(Client Side)上的数据(通常经过加密)。
    • cookie数据始终在同源的http请求中携带(即使不需要),记会在浏览器和服务器间来回传递。
  • sessionStorage和localStorage不会自动把数据发给服务器,仅在本地保存。
  • 存储大小:
    • cookie数据大小不能超过4k。
    • sessionStorage和localStorage 虽然也有存储大小的限制,但比cookie大得多,可以达到5M或更大。
  • 有期时间:
    • localStorage 存储持久数据,浏览器关闭后数据不丢失除非主动删除数据;
    • sessionStorage 数据在当前浏览器窗口关闭后自动删除。
    • cookie 设置的cookie过期时间之前一直有效,即使窗口或浏览器关闭
  • 作用域不同:
    • sessionStorage不在不同的浏览器窗口中共享,即使是同一个页面;
    • localStorage 在所有同源窗口中都是共享的;cookie也是在所有同源窗口中都是共享的。
  • Web Storage 支持事件通知机制,可以将数据更新的通知发送给监听者。
  • Web Storage 的 api 接口使用更方便。

canvas和svg的区别

  • svg:
    • SVG是一种使用XML描述2D图形的语言
    • SVG基于XML, 这意味着SVG DOM中的每个元素都是可用的. 所以可以为每个元素附加JavaScript事件处理器
    • 在SVG中, 每个被绘制的图像均被视为对象. 如果SVG对象的属性发生变化, 那么浏览器能够自动重现图像
  • Canvas
    • Canvas通过js来绘制2D图形
    • Canvas是逐像素进行渲染的
    • 在Canvas中, 一旦图形被绘制完成, 它就不会继续得到浏览器的关注. 如果其位置发生变化, 那么整个场景也需要重新绘制, 包括任何或许已被图形覆盖的对象.
  • 区别
    • Canvas支持分辨率, SVG不支持
    • Canvas不支持事件处理器, SVG支持
    • Canvas只有弱的文本渲染能力, 而SVG最适合带有大型渲染区域的应用程序(比如谷歌地图)
    • Canvas能够以.png或.jpg格式保存结果图像
    • SVG的复杂度过高的话会减慢渲染速度(任何过度使用DOM的应用都不快)
    • Canvas最适合图像密集型的游戏, 其中的许多对象会被频繁重绘. 而SVG不适合游戏应用
    • Canvas是基于位图的图像,它不能够改变大小, 只能缩放显示; SVG是基于矢量的, 所以它能够很好地处理图形大小的改变
    • Canvas提供的功能更原始, 适合像素处理, 动态渲染和大数据量绘制; SVG功能更完善, 适合静态图片显示, 高保真文档查看和打印的应用场景
    • 绘制Canvas对象后, 不能使用脚本和CSS对它进行修改; 而SVG对象是文档对象模型的一部分, 所以可以随时使用脚本和CSS修改它们

src和href的区别

  • src指向外部资源的位置, 用于替换当前元素, 比如js脚本, 图片等元素
  • href指向网络资源所在的位置, 用于在当前文档和引用资源间确定联系, 加载css
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 156,265评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,274评论 1 288
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,087评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,479评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,782评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,218评论 1 207
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,594评论 2 309
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,316评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 33,955评论 1 237
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,274评论 2 240
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,803评论 1 255
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,177评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,732评论 3 229
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,953评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,687评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,263评论 2 267
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,189评论 2 258

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,624评论 1 92
  • •前端面试题汇总 一、HTML和CSS 21 你做的页面在哪些流览器测试过?这些浏览器的内核分别是什么? ...
    Simon_s阅读 2,199评论 0 8
  • 一:在制作一个Web应用或Web站点的过程中,你是如何考虑他的UI、安全性、高性能、SEO、可维护性以及技术因素的...
    Arno_z阅读 1,087评论 0 1
  • <a name='html'>HTML</a> Doctype作用?标准模式与兼容模式各有什么区别? (1)、<...
    clark124阅读 3,418评论 1 19
  • 点开日历,看到手机日历上居然也把明天就是双十一标上“光棍节”,简直了。明明是商家为了促销搞的一个噱头,如今却被人人...
    花悠然阅读 333评论 2 2