主要分红两部分:渲染引擎(layout engineer或Rendering Engine)和JS引擎。
渲染引擎:负责取得网页的内容(HTML、XML、图像等等)、
整理讯息(例如加入CSS等),以及计算网页的显示方式,而后会输出至显示器或打印机。
浏览器的内核的不一样对于网页的语法解释会有不一样,因此渲染的效果也不相同。
全部网页浏览器、电子邮件客户端以及其它须要编辑、显示网络内容的应用程序都须要内核。
JS引擎则:解析和执行javascript来实现网页的动态效果。
最开始渲染引擎和JS引擎并无区分的很明确,后来JS引擎愈来愈独立,内核就倾向于只指渲染引擎。
复制代码
微格式(Microformats)是一种让机器可读的语义化XHTML词汇的集合,是结构化数据的开放标准。
是为特殊应用而制定的特殊格式
优势:将智能数据添加到网页上,让网站内容在搜索引擎结果界面能够显示额外的提示。
复制代码
(1)图片懒加载,在页面上的未可视区域能够添加一个滚动条事件,
判断图片位置与浏览器顶端的距离与页面的距离,若是前者小于后者,优先加载。
(2)若是为幻灯片、相册等,能够使用图片预加载技术,
将当前展现图片的前一张和后一张优先下载。
(3)若是图片过大,能够使用特殊编码的图片,
加载时会先加载一张压缩的特别厉害的缩略图,以提升用户体验。
(4)若是图片展现区域小于图片的真实大小,则因在服务器端根据业务须要先行进行图片压缩,图片压缩后大小与展现一致。
复制代码
列子:javascript
// 实现一个方法,能够给 obj 全部的属性添加动态绑定事件,当属性值发生变化时会触发事件
let obj = {
key_1: 1,
key_2: 2
}
function func(key) {
console.log(key + ' 的值发生改变:' + this[key]);
}
bindData(obj, func);
obj.key_1 = 2; // 此时自动输出 "key_1 的值发生改变:2"
obj.key_2 = 1; // 此时自动输出 "key_2 的值发生改变:1"
复制代码
答案:java
function bindData(obj, fn) {
for (let key in obj) {
Object.defineProperty(obj, key, {
set(newVal) {
if (this.value !== newVal) {
this.value = newVal;
fn.call(obj, key);
}
},
get() {
return this.value;
}
})
}
}
复制代码
有一个祖先树状 json 对象,当一我的有一个儿子的时候,其 child 为其儿子对象,若是有多个儿子,child 为儿子对象的数组。
请实现一个函数,找出这个家族中全部有多个儿子的人的名字(name),输出一个数组。
列子:
// 样例数据
let data = {
name: 'jack',
child: [
{ name: 'jack1' },
{
name: 'jack2',
child: [{
name: 'jack2-1',
child: { name: 'jack2-1-1' }
}, {
name: 'jack2-2'
}]
},
{
name: 'jack3',
child: { name: 'jack3-1' }
}
]
}
答案:
用递归
function findMultiChildPerson(data) {
let nameList = [];
function tmp(data) {
if (data.hasOwnProperty('child')) {
if (Array.isArray(data.child)) {
nameList.push(data.name);
data.child.forEach(child => tmp(child));
} else {
tmp(data.child);
}
}
}
tmp(data);
return nameList;
}
不用递归
function findMultiChildPerson(data) {
let list = [data];
let nameList = [];
while (list.length > 0) {
const obj = list.shift();
if (obj.hasOwnProperty('child')) {
if (Array.isArray(obj.child)) {
nameList.push(obj.name);
list = list.concat(obj.child);
} else {
list.push(obj.child);
}
}
}
return nameList;
}
复制代码