浏览器渲染与web前端开发

86
浏览器渲染与WEB前端开发 nwind

Upload: duoyi-wu

Post on 09-May-2015

7.044 views

Category:

Technology


5 download

DESCRIPTION

百度web前端研发部2010年10月在电子科技大学的技术交流

TRANSCRIPT

Page 1: 浏览器渲染与web前端开发

浏览器渲染与WEB前端开发nwind

Page 2: 浏览器渲染与web前端开发

Outline

•百度Web前端研发部

• HTML布局无处不在

•渲染引擎

•浏览器

Page 3: 浏览器渲染与web前端开发
Page 4: 浏览器渲染与web前端开发

FrontEnd

Page 5: 浏览器渲染与web前端开发

Web前端研发部

•负责百度各产品线前端的开发、优化

• html、css、javascript、flash、php

Page 6: 浏览器渲染与web前端开发

百度视频

Page 7: 浏览器渲染与web前端开发

内部平台

Page 8: 浏览器渲染与web前端开发

Outline

•百度Web前端研发部

• HTML布局无处不在

•渲染引擎

•浏览器

Page 9: 浏览器渲染与web前端开发

当CSS和HTML越来越丰富时...

Page 10: 浏览器渲染与web前端开发

HTML布局将无处不在

•悄悄融入到各种桌面应用中

•成为程序的插件

•本地应用

•各种其它设备...

Page 11: 浏览器渲染与web前端开发

嵌入到桌面应用

Page 12: 浏览器渲染与web前端开发

Widget

Page 13: 浏览器渲染与web前端开发

Smartphone Apps using the Web Standards you already know

Page 14: 浏览器渲染与web前端开发

User Interface Everywhere using the Web Standards you already know

Page 15: 浏览器渲染与web前端开发

Outline

•百度Web前端研发部

• HTML布局无处不在

•渲染引擎

•浏览器

Page 16: 浏览器渲染与web前端开发

Webkit engine

Page 17: 浏览器渲染与web前端开发

WebKit渲染引擎

• is an engine, not a browser

• forked from KHTML

• 10% market share

Page 18: 浏览器渲染与web前端开发

WebKit begins where the chrome ends

http://webkit.org/blog/101/back-to-basics/

Page 19: 浏览器渲染与web前端开发

What uses WebKit

Page 20: 浏览器渲染与web前端开发

WebKit engine features

• standards compliance (css3, html5)

• performance

• clear, maintainable code

Page 21: 浏览器渲染与web前端开发

WebKit Components

• WebKit

• front-end layer, gtk/mac/qt/win/wx

• WebCore

• rendering, layout, painting...

• JavaScriptCore

• JavaScript engine (interpreter)

Page 22: 浏览器渲染与web前端开发

WebKit API

Page 23: 浏览器渲染与web前端开发

Application

WebCore

WebKit

JavaScriptCore

WebKit

API Boundary

UI Process

Page 24: 浏览器渲染与web前端开发

WebKit API

• 封装对webcore的调用

• 为webcore提供平台相关的操作

• 网络调用• 绘图• 监听用户交互

Page 25: 浏览器渲染与web前端开发

WebKit API

• mac

• qt

• gtk

• win

• wx

• chromium

• ...

Page 26: 浏览器渲染与web前端开发

WebKit mac#include  <WebKit/WebKit.h>

Page 27: 浏览器渲染与web前端开发

WebKit development

• WebView WebFrame WebPreferences...

• Delegate

• DOM API

• using javascript

Page 28: 浏览器渲染与web前端开发

WebView API

• loadRequest()

• reload()

• goBack() / goForward()

• makeTextLarger() / makeTextSmaller()

Page 29: 浏览器渲染与web前端开发

Delegate

• WebFrameLoad

• didFailLoadWithError:forFrame

• WebPolicy

• decidePolicyForNewWindowAction

• WebResourceLoad

• didFinishLoading

• WebUI

Page 30: 浏览器渲染与web前端开发

DOM API

• W3C DOM Specification

• [[doc documentElement] innerHTML]

Page 31: 浏览器渲染与web前端开发

Call Javascript

• id  win  =  [webView  windowScriptObject];

• [win  evaluateWebScript:@"location.href"];

Page 32: 浏览器渲染与web前端开发

WebKit demo

Page 33: 浏览器渲染与web前端开发

WebKit Components

• WebKit

• front-end layer, gtk/mac/qt/win/wx

• WebCore

• rendering, layout, painting...

• JavaScriptCore

• JavaScript engine (interpreter)

Page 34: 浏览器渲染与web前端开发

WebCore

Parsing

LoadingPainting

Rendering

Script ExecutionLayout

Style Resolution

Event Handling

Page 35: 浏览器渲染与web前端开发

ProcessLoading

Parsing

Rending

layout

Painting

Page 36: 浏览器渲染与web前端开发

Loading

• 网络, 本地

• 分为两种类型

• Frames 网页• Resources 其它

Page 37: 浏览器渲染与web前端开发

Loading is complexity

• 调用网络接口

• 加载 解析 执行, 错综复杂的关系

• 各种Cache机制

• HTTP• 前进后退

Page 39: 浏览器渲染与web前端开发

ProcessLoading

Parsing

Rending

layout

Painting

Page 40: 浏览器渲染与web前端开发

Parsing

• 状态机

• 构建DOM树

• 建立节点的对象

• 各种出错情况处理

Page 41: 浏览器渲染与web前端开发

DOM Tree

Page 42: 浏览器渲染与web前端开发

ProcessLoading

Parsing

Rending

layout

Painting

Page 43: 浏览器渲染与web前端开发

Rending

• 依据Selector计算出节点的样式

• 生成Render Tree

• 需等待CSS加载

• RenderObject.h

Page 44: 浏览器渲染与web前端开发

Selector matching

Page 45: 浏览器渲染与web前端开发

Render Tree

• 只和展现相关

• 不关心display:none的DOM节点

• 将节点和样式关联起来

• 生成一些匿名节点

• 文字折行

Page 46: 浏览器渲染与web前端开发

Render Tree

Page 47: 浏览器渲染与web前端开发

ProcessLoading

Parsing

Rending

layout

Painting

Page 48: 浏览器渲染与web前端开发

Layout

• 从根节点递归调用render对象的layout方法

• 只有input框从子结点开始渲染

• 计算元素的大小及位置等信息

Page 49: 浏览器渲染与web前端开发

ProcessLoading

Parsing

Rending

layout

Painting

Page 50: 浏览器渲染与web前端开发

Painting

• 从root元素开始

• 从底至顶一层层绘图

• 调用2D图形API

Page 51: 浏览器渲染与web前端开发

overview (Gecko)

Page 52: 浏览器渲染与web前端开发

Event Handling

• 监听鼠标键盘事件

• 找到对应的元素(hitTest)

• 设置需要layout的标志位

• layout (队列, 异步执行)

• painting

Page 53: 浏览器渲染与web前端开发

Event Example

• -­‐[WebHTMLView  mouseUp:]

• WebCore::EventHandler::mouseUp

• WebCore::EventHandler::handleMouseReleaseEvent

• WebCore::EventHandler::prepareMouseEvent

• WebCore::Document::preperMouseEvent

• WebCore::RenderLayer::hitTest

• WebCore::RenderLayer::hitTestLayer

Page 54: 浏览器渲染与web前端开发

Event System (Mac)

Page 55: 浏览器渲染与web前端开发

Dynamic changes

Page 56: 浏览器渲染与web前端开发

el.style.left = "2px";el.style.left = el.offsetLeft + "px";

Page 57: 浏览器渲染与web前端开发

Outline

•百度Web前端研发部

• HTML布局无处不在

•渲染引擎

•浏览器

Page 58: 浏览器渲染与web前端开发

Browsers

Page 59: 浏览器渲染与web前端开发

Browser features起始页tab管理崩溃恢复地址栏增强广告拦截超级拖拽快速查找下载管理自动升级

防假死智能填表代理切换屏幕截图收藏管理鼠标手势安全检测进程管理皮肤

缩放错误页安全检测在线升级插件机制账号绑定快捷键隐私浏览清除纪录

Page 60: 浏览器渲染与web前端开发

基本实现方法

• 监听渲染引擎提供的事件/hook

• 使用渲染引擎提供的DOM API

• 如鼠标手势

• 有些功能可以直接用html

• 如起始页

Page 61: 浏览器渲染与web前端开发

Chrome [OS]

Page 62: 浏览器渲染与web前端开发

Chrome

• Multi-process

• WebKit glue

• Skia

• Network

• Extension

• Update

Page 63: 浏览器渲染与web前端开发

Multi-process Architecture

• browser as an operating system

• asynchronous

• backing store

• sandbox

Page 64: 浏览器渲染与web前端开发

Multi-process Architecture

Application (Host Process

WebKit

WebCore

JavaScriptCore

API Boundary

UI Process

Application (Render Process)

Web Process

Page 65: 浏览器渲染与web前端开发

Chrome multi-process architecture

IPC

IPC

Page 66: 浏览器渲染与web前端开发

Other Process Model

• WebKit2

• IE8 “Loosely-Coupled IE”, “Gazelle”

• Firefox “Electrolysis”

Page 67: 浏览器渲染与web前端开发

WebKit2

• build in separate process

• no-blocking API

Page 68: 浏览器渲染与web前端开发

WebKit2

Application

WebKit (Web Process)

WebCore

JavaScriptCore

API Boundary

UI Process

WebKit (UI Process)

Web Process

Page 69: 浏览器渲染与web前端开发

WebKit WebKit2 Chrome

Application

WebKit

WebCore

JavaScriptCore

UI Process

Application

Web Process

Application

WebKit

WebCore

JavaScriptCore

UI Process

WebKit

Web Process

Application

WebKit

WebCore

JavaScriptCore

UI Process

Page 70: 浏览器渲染与web前端开发

WebKit glue

• "WebKit embedding layer"

• 避免依赖各种GUI框架

• Chrome与WebKit的桥梁

Page 71: 浏览器渲染与web前端开发

Chrome layersBrowser window

Tab contents

Render host

Renderer

WebKit glue

WebKitWebKit port

Page 72: 浏览器渲染与web前端开发

Skia

• GDI is not enough

• GDI+ is no longer support and is slow

• in-house solution

• use GDI for text

Page 73: 浏览器渲染与web前端开发

Network

• Rewrite Network Stack

• DNS Prefetching

• SPDY

Page 74: 浏览器渲染与web前端开发

Extensions

• can use javascript

• html5, css3• donʼt need restart

• NPAPI

• not sandbox

• Native Client

Page 75: 浏览器渲染与web前端开发

SandBox

Page 76: 浏览器渲染与web前端开发

Firefox (Gecko)

Page 77: 浏览器渲染与web前端开发

Firefox (Gecko)

• not just a browser

• mail, newsgroup, web design tool...

• complexity

• XPCOM, XUL

• mozilla 2

Page 78: 浏览器渲染与web前端开发

Komodo

Page 79: 浏览器渲染与web前端开发

Thunderbird

Page 80: 浏览器渲染与web前端开发

Internet Explorer (Trident)

Page 81: 浏览器渲染与web前端开发

IE shells (MSHTML)• 360安全浏览器

• 基于theworld, 基本上就是换了个肤• 支持多进程模式

• 遨游浏览器

• 细节功能很多, UI不错

• 搜狗高速浏览器

• 全网加速• webkit/IE双引擎

Page 82: 浏览器渲染与web前端开发

• HTML5 CSS3 ES5 SVG

• GPU

• Chakra inside

Page 84: 浏览器渲染与web前端开发

欢迎加入百度WEB前端研发部!

http://hr.baidu.com/www/campusPro.action?l=7

搜索研发部_Web前端研发工程师(2011校园招聘)

Page 85: 浏览器渲染与web前端开发

http://www.baiduux.com

Page 86: 浏览器渲染与web前端开发

Thank you