webkit内部的WebView, page, WebFrame, Frame, document, frameView, RenderView, RenderFrame, Widget的关系和构建

webkit内部的WebView,page, WebFrame, Frame, document, frameView, RenderView, RenderFrame,Widget的层级关联关系以及构建过程



Webcore内部:

Page, Node, Element, Document, Settings



WebKit接口层:

WebView(WebViewImpl), WebNode, WebElement, WebDocument,WebSettings, WebFrame,



Platform层:

Widget.h, WebLayer,



  1. WebViewImpl包含Page,WebSettings, WebLayer tree.

  2. Page包含:Frame(main frame),FrameHost(一个被page内所有frame共享的数据结构),Settings.

  3. Frame(LocalFrame)包含:

    FrameLoader, FrameView,

    有指向LocalDomWindow的引用,

    FrameTree,

    指向FrameHost,

    指向一个FrameOwner(HTMLFrameOwnerElement)就是包含这个Frame的element.而element间接继承自Node,Node又和renderObject关联,也就是有renderer()函数。

    WebLocalFrame指向WebCore::LocalFrame.

    Frame.ownerRenderer()拿到一个RenderPart.继承自RenderWidget,实际上继承自RenderObject.

  4. FrameHost,和一个page关联,是一个page内所有frame共享的结构。

  5. FrameOwnerElement.继承自HTMLELement,是element.能够拿到renderer().

  6. LocalDomWindow有Document指针,由于继承自FrameDestructionObserver,所以有Frame指针,这个Frame应该是mainframe.

  7. 一个Frame包含一个document么?LocalDomWindow对应整个网页么?







创建LocalDOMWindow:

->DocumentLoader::dataReceived

->DocumentLoader::commitData

->DocumentLoader::ensureWriter

->DocumentLoader::createWriterFor(LocalFrame* frame, constDocument* ownerDocument, const KURL& url,

->LocalDOMWindow::create(*frame),并把创建的dowwindow设置给frame.

可以看出此domwindow和frame一一对应,那么要看该frame是mainframe还是普通frame?



可以自己写一个多个frame的网页,然后加log,看看究竟创建了几个frame,几个domwindow,几个Document,几个Page,几个DocumentLoader,等等。



我写了一个简单的网页:

f.htm:

<body>
<iframe src="1.htm">
</iframe>
<iframe src="2.htm">
</iframe>
</body>



1.htm:

<body>
<p>hello 1</p>
</body>



2.htm:

<body>
<p>hello 2</p>
</body>
 
打开f.htm显示两个frame.
那么此时构建的上述类的结构关系如何?
当加载f.htm时:
Page (1个)----
Frame (mainFrame, 也是LocalFrame, 1个)
Frame包含:
1. FrameHost (1个,被page的所有frame共享)
2. FrameLoader (1个,于Frame11对应)
3. LocalDomWindow(1个,于Frame
11对应
4. Document
(1个,先创建一个,加载完成后,会destroy然后重新创建,
于frame11对应)
5.
DocumentLoader(会出现2个,应该是provisional,commited状态变换所致,最终会销毁第一个,只剩下一个),每个DocumentLoader会附带创建一个11对应的ResourceFetcher,
DocumentLoader销毁,ResourceFetcher也销毁。
6. FrameView
(1个,加载网页后,会被销毁重建,于frame
11对应)
 
加载网页过程中,Document会销毁重建,2个DocumentLoader中,有一个会被销毁。FrameView会被销毁重建。
 
f.htm加载完成,解析,发现有2个子iframe,
会生成两个子frame去加载:
子frame的结构关系:
Frame包含:
1. FrameLoader (于frame
11对应)
2. DocumentLoader
(也会建立两个,最后销毁一个),每个DocumetLoader对应一个resourceFetcher.
3. FrameView (于frame
11对应,会销毁重建)
4. Document (于frame
11对应,会销毁重建)
5. LocalDomWindow (于
frame 11 对应,会销毁重建)
 
最终结论:
网页中有main
frame, 每个iframe会建立子frame.
每个frame都有自己的FrameLoader,
Document,  DoducmentLoader, FrameView 和LocalDomWindow.
但是FrameHost是多个frame共享的,Page也是共享的。
 
下面看Frame
--- element --- render之间的关联。
WebLocalFrame指向一个LocalFram.
每个LocalFrame关联一个FrameOwner,
其实是一个element:
class
HTMLFrameOwnerElement : public HTMLElement, public FrameOwner .
Element
的父类ContainerNode的父类Node有renderer()函数可以得到RenderObject*。所以Frame也可通过其Owner
Element得到renderer.
 
实际上Frame的render是RenderPart.
是一个很深的继承自RenderObject的子孙类。所以HTMLFrameOwnerElement有函数renderPart()得到RenderPart*.
 



Widget:

HTMLFrameOwnerElement拥有一个widget,ownedWidget()可以拿到。这个widget一般情况下就是FrameView.

Widget是scrollView,scrollBar,以及pluginView的基类。

Widget之间有父子关系。



FrameView:

Frame都有一个FrameView,FrameView就继承自ScrollView,继承自Widget.

FrameView是widget系列的东西。

FrameView有m_widgets保存若干子RenderWIdgets.



LocalFrame::createView中会为自己创建一个FrameView,并把它当作widget注册给HTMLFrameOwnerElement,也就是ownerRender.

classHTMLFrameElementBase : public HTMLFrameOwnerElement {





RenderView:

RenderView和Document关联,Document的attach函数创建一个RenderView, RenderView也是继承自RenderObject,他是rendertree的root.

RenderView是RenderObject系列的东西,也是render系列的东西。



RenderWIdget:

RenderWidget也是RenderObject系列的东西。

RenderWidget和一个widget关联。也是和一个HTMLFrameOwnerElement关联。

可以认为RenderWidget把widget包装了一层,是一个adapter,对RenderWIdget调用的一些操作会被其关联的widget处理。所以虽然RenderWidget是render系列的东西,但是他会把逻辑调用转给widget.



LocalDomWindow:

在DocumentLoader收到数据后,会创建LocalDomWindow并注册给Frame.



WebView:

继承自WebWIdget.

WebViewImpl继承自WebView.

WebView.h是接口。被chrome的content模块使用。

Content层的RenderViewImpl::initialize中就创建了WebView,并创建了WebFrame作为mainframe注册给创建的WebView.



下面看看FrameHost,FrameClient.

FrameClient:

FrameLoaderClient继承自FrameClient,所以Frame的FrameClient就是FrameLoaderClient.

classFrameLoaderClientImpl FINAL: public WebCore::FrameLoaderClient







Frame,LocalFrame, WebFrame, WebLocalFrame, WebLocalFrameImpl:

WebLocalFrameImpl继承自WebFrame.LocalFrame继承自Frame.

WebLocalFrameImpl里面会建立并关联一个LocalFrame.并把自己的FrameLoaderClientImpl关联给LocalFrame作为FrameClient.



WebLocalFrame的创建:

1.建立childframe:

在content的RenderFrameImpl中创建一个RenderFrameImpl和一个WebLocalFrameImpl(调用的是WebLocalFrame::create),然后把这两个content模块和WebCore模块的frame相关联。而且content模块的RenderFrameImpl作为WebLocalFrame的WebFrameClient。

Childframe何时建立?

->htmlparser解析处理token:比如处理iframetoken.

->HTMLConstructionSite::insertSelfClosingHTMLElement(AtomicHTMLToken*token)

->HTMLConstructionSite::attachLater(ContainerNode*parent, PassRefPtrWillBeRawPtr<Node> prpChild, boolselfClosing)

建立HTMLConstructionSiteTask,然后queueTask.

---------------下面是执行task----------------

->voidHTMLConstructionSite::executeQueuedTasks()

-》executeInsertTask()

->插入,replace,append节点都会引起一些下面的notify动作。

->voidContainerNode::updateTreeAfterInsertion(Node& child)

void ContainerNode::parserInsertBefore(PassRefPtrWillBeRawPtr<Node>newChild, Node& nextChild)

void ContainerNode::parserAppendChild(PassRefPtrWillBeRawPtr<Node>newChild)

-》ContainerNode::notifyNodeInserted(Node&root, ChildrenChangeSource source)当一个node被插入到domtree后,会调用这个callback:

->voidHTMLFrameElementBase::didNotifySubtreeInsertionsToDocument()

->voidHTMLFrameElementBase::setNameAndOpenURL()

->HTMLFrameElementBase::openURL(boollockBackForwardList)

->HTMLFrameOwnerElement::loadOrRedirectSubframe

->FrameLoaderClient::createFrame(url,framname,...)创建完后会调用started()

->WebLocalFrameImpl::createChildFrame

->RenderFrameImpl::createChildFrame



  1. 建立mainframe

    content模块的RenderViewImpl::initialize中,建立一个RenderFrameImpl,和一个WebLocalFrameImpl(通过WebLocalFrame::create),并让他们关联。

    并把mainframe注册给webview.



LocalFrame的client是WebLocalFrame的FrameLoaderClientImpl成员.

WebLocalFrame的client是RenderFrameImpl.



WebFrame,WebLocalFrame可以看作是把Frame,LocalFrame的内容包了一下。

WebFrame,WebLocalFrame都是blinknamespace的。

Frame,LocalFrame都是webCorenamespace的。



加载网页时,是调用WebFrame的loadrequest()函数。

进而会触发FrameLoader的一系列操作。



javascript 酷炫时钟 javascript 酷炫时钟 阅读详情

相关推荐

LMS Virtual.Lab二次开发:声学仿真结果导出方法(VBScript、Python)

Siemens LMS Virtual.Lab 提供一套集成软件平台用以模拟机械系统的品质属性,如结构完整性、振动噪声、耐久性、系统动力学特性、驾驶的平顺性及操纵的稳定性等。

爱看书的小沐 6021

Webkit浏览器内核探究——Webkit简介

Wekbit是一个开源的Web浏览器引擎,也就是浏览器的内核。Apple的Safari, Google的Chrome, Nokia S60平台的默认浏览器,Apple手机的默认浏览器,Android手机的默认浏览器均采用的Webkit作为器浏览器内核。Webkit的采用程度由 此可见一斑,理所当然的成为了当今主流的三大浏览器内核之一。另外两个分别是Gecko和Trident,大名鼎鼎的Firefox便是使用的Gecko 内核,而微软的IE系列则使用的是Trident内核。

森明帮大于黑虎帮的博客 7552

手机拍照背后的隐形功臣:一文读懂高通ISP三兄弟(IFE/BPS/IPE)如何协同工作

本文深入解析了高通ISP三兄弟(IFE/BPS/IPE)在手机拍照中的协同工作机制。通过拟人化比喻,详细介绍了IFE作为图像前端引擎的分流预处理、BPS作为RAW格式修图师的专业处理,以及IPE作为全能后期制作人的多面功能,揭示了三者在图像处理pipeline中的高效配合与技术创新。

weixin_27032989的博客 530

开发者需要了解的 WebKit

Paul Irish是著名的前端开发工程师,同时他也是 Chrome 开发者关系团队成员,jQuery 团队成员,Modernizr、 Yeoman、CSS3 Please 和 HTML5 Boilerplate 的 lead developer。针对大家对 WebKit 的种种误解,他在自己的博客发表了《WebKit for Developers》一文,试图为大家解惑: 对许多开发者来说,WebKit 就像一个黑盒。我们把 HTML、CSS、JS 和其他一大堆东西丢进去,然后 WebKit 魔法般的以.

顺其自然~专栏 3646

envi5.3处理高分二号影像数据详细过程记录

全文根据此篇文章进行数据处理: tm影像辐射定标_高分二号影像数据预处理及裁剪过程 其他参考: 学习笔记---遥感影像辐射定标与大气校正 利用ENVI自带全球DEM数据计算区域平均高程 高分二号数据处理流程(有高分二号的数据信息) GF2有多光谱和全色两个数据,MSS是多光谱的,PAN是全色的,多光谱的分辨率低,全色的高,需要把这两个数据融合,融合之前需要做定标等处理,获取经纬度。 一、多光谱影像处理 1. 辐射定标 以这个为例: 其他路径\2022.4.2...

ligous的博客 5万+

RTX 4060笔记本也能跑!保姆级教程:用Ollama在Windows上部署DeepSeek-R1-8B模型

本文详细介绍了如何在RTX 4060笔记本上通过Ollama本地部署DeepSeek-R1-8B模型,提供从环境配置到性能调优的全流程优化指南。针对笔记本用户的显存、散热等问题,给出了量化模型选择、启动参数优化及散热解决方案,帮助用户在消费级硬件上高效运行大语言模型。

weixin_28745067的博客 527

WebKit – WebKit For Android

如需转载,请注明出处!WebSite: http://www.jjos.org/作者: 姜江 linuxemacs@gmail.comQQ: 457283这是一篇自己写于一年前的工作文档,分享出来。原文:http://www.jjos.org/android/2010/05/10/312_webkit-webkit-for-android.html一、WebKit简介W

★果冻★的专栏 4396

PICO+Unity MR空间网格开发实战:从零构建透视交互场景

本文详细介绍了使用PICO 4 Ultra与Unity引擎进行MR空间网格开发的完整实战流程。从环境准备、项目初始化、核心组件配置,到空间网格的生成、可视化与物理交互实现,手把手教你构建一个能识别真实环境并发射虚拟小球的透视交互场景。文章重点解析了PICO SDK中空间网格功能的关键配置与优化技巧,并提供了真机部署与调试的实用指南。

e3f4g5的博客 490

WebKit:浏览器背后的强大引擎

WebKit 是一个开源的浏览器引擎,在互联网领域具有重要地位。其发展历程可谓丰富曲折。WebKit 起源于 1998 年的 KHTML 和 KJS 项目,苹果公司在 2001 年看中其潜力并着手开发,于 2003 年推出基于 WebKit 的 Safari 浏览器。此后,WebKit 不断演进,吸引了众多开发者的参与和改进。WebKit 的主要特点显著。它具有跨平台的特性,能在多种操作系统和设备上运行,为用户提供一致的体验。

qq_22232065的博客 1476

Multisim仿真运放积分器踩坑实录:为什么你的方波变不成三角波?

本文针对Multisim仿真运放积分器时方波无法转换为三角波的常见问题,提供了详细的排查与调试指南。文章指出,经典RC积分电路因直流反馈开路导致运放饱和,核心解决方案是在反馈电容两端并联大阻值电阻以稳定直流工作点。通过参数优化(调整Rin、C、Rf)和高级仿真技巧,手把手教你调出线性度好、幅度适中的完美三角波,并分享异常波形(如饱和、不对称、振荡)的对应策略。

weixin_29231263的博客 115

实战案例—encrypt靶场(AES固定key篇)

AES是一种对称密钥加密方法,意味着加密和解密时使用相同的密钥。AES加密存在三种形式:AES-128、AES-192和AES-256,它们分别对应于三种不同的密钥长度——128位(即16字节)、192位(即24字节)和256位(即32字节)。通常情况下,密钥的长度越长,提供的安全性就越高,但相应地,加解密过程所需的时间也会增加。默认情况下,采用的是AES-128,其提供的安全性对于大多数应用来说已经足够充分。

zhouzhou_98的博客 498

《webkit 技术内幕》

webkit 技术原理,chrome 浏览器工作原理

qq_42943914的博客 1877

Keras中神经网络可视化模块keras.utils.visualize_util安装配置方法

Keras中神经网络可视化模块keras.utils.visualize_util安装配置方法

jacke121的专栏 2759

【WebKit】深入解析 WebKit: 高性能网页浏览器引擎的技术内幕与应用

WebKit 是一种开源的网页浏览器引擎,由苹果公司开发,最初用于 Safari 浏览器。它是一个高性能、标准兼容的引擎,被广泛应用于多种浏览器和平台,如 Safari、早期版本的 Google Chrome 以及许多移动设备上的浏览器。WebKit 由两个主要部分组成:WebCore 和 JavaScriptCore。WebKit 是一个强大且灵活的网页浏览器引擎,其高性能、标准兼容性和跨平台特性使得它在众多浏览器和应用程序中得到了广泛应用。

m0_67414667的博客 1687

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

深入了解WebKit:简介及工作流程详解

WebKit是一种开源的浏览器引擎,为许多流行的浏览器提供了核心功能。它最初由Apple创建,并被广泛应用于Safari浏览器。如今,WebKit已成为一个多平台、多功能的浏览器引擎,在Web开发和浏览器技术中占有重要地位。本文将详细介绍WebKit的历史、架构、工作流程,以及如何使用WebKit进行测试和接口验证。WebKit是一个开源的浏览器引擎,负责解析和渲染HTML、CSS、JavaScript等Web内容。

洛秋的博客 1889

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

WebKit:你真的了解WebKit吗?

WebKit是一个开源的浏览器引擎,负责解析HTML、CSS、JavaScript等网页内容,并将其渲染为可视化的网页页面。主要组件:WebKit主要包括WebCore(负责HTML解析、CSS样式计算和布局)和JavaScriptCore(负责JavaScript解释执行)两大部分。开源特性:WebKit是开放源代码的项目,遵循相应的开源许可证(如BSD许可证),允许开发者自由查看、使用、修改和分发其源代码,促进了技术共享和社区协作。

Liu_y_xin的博客 2007

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

WebKit的详细介绍

同类的浏览器引擎有: Trident ( IE 内核), Gechko ( Netscape, Mozilla 和 Firefox 内核), Presto ( Opera 内核,不免费), Tasman ( IE for MAC 内核),等等,而 WebKit 因为其功能强大、速度快而且免费备受欢迎。WebKit 目前支持 HTML4/5 , CSS1/2 , DOM1/2 , HTTP/FILE , GIF/JPEG/PNG , XML , SVG , RSS2.0 等;

不加防腐剂的博客 1295

WebKit简介及工作流程

WebKit是一个开源的浏览器引擎,它的起源可以追溯到2001年,当时苹果公司推出了其首款基于Unix的操作系统Mac OS X。在2002年,苹果公司启动了WebKit项目,旨在开发一款新的网页渲染引擎。最初的Safari浏览器使用了KHTML作为其渲染引擎,但随着时间的推移,苹果逐渐意识到KHTML的局限性,因此决定开发WebKit来取代它。经过几年的持续开发和迭代,苹果于2005年发布了Safari浏览器的第二个版本,正式引入了WebKit作为其渲染引擎。

日常笔记/总结/系列知识梳理 3334

WebKit 入门介绍

WebKit 是一个开源的浏览器引擎,主要用于处理和渲染网页内容。它包含了用于解析 HTML 和 CSS、构建及维护文档对象模型 (DOM)、渲染页面布局与图形、以及执行 JavaScript 脚本等一系列功能模块,旨在为用户提供快速、流畅且标准兼容的网页浏览体验。:负责解析 HTML 和 CSS 文件,构建 DOM 树结构,并根据 CSS 规则计算元素的样式和布局信息,最终将这些信息转化为可绘制的图形。

wangbo_angel的博客 1328

探索WebKit的奥秘:打造高效、兼容的现代网页应用

WebKit是一个功能强大的浏览器引擎,它的模块化设计使得各个部分可以独立更新和优化。通过理解WebKit的结构和工作原理,开发者可以更有效地开发和调试网页应用。在实际开发中,WebKit的这些特性和工具可以帮助我们创建更加高效、兼容性更强的网页,为用户提供更好的浏览体验。通过文章中的这些代码实例,我们可以更深入地理解WebKit的工作方式和它所提供的功能。这些实例不仅展示了WebKit的强大功能,也为我们提供了实际开发中可能会用到的实用技巧。

qq_70814008的博客 1692

【前端开发】从0到1,WebKit学习全攻略

WebKit浏览器引擎技术解析 摘要:WebKit是一款开源的网页浏览器引擎,以其高效渲染和跨平台特性成为现代浏览器核心技术。本文系统介绍了WebKit的核心架构与工作原理:重点解析了WebCore(负责HTML/CSS解析和DOM构建)与JavaScriptCore(高性能JS引擎)两大核心组件的工作机制;详细阐述了从资源加载、HTML/CSS解析到渲染树构建、布局和绘制的完整渲染流程;通过Safari浏览器、Arora轻量级浏览器及QtWebKit企业应用等典型案例,展示了WebKit的实际应用价值。

大雨淅淅的博客 1699

开源浏览器引擎对比与适用场景:WebKit、Chrome、Gecko

武汉优联前端科技有限公司由一批从事前端10余年的专业人才创办,是一家致力于H5前端技术研究的科技创新型公司,为合作伙伴提供专业高效的前端解决方案,合作伙伴遍布中国及东南亚地区,行业涵盖广告,教育, 医疗,餐饮等。有效的解决了合作伙伴的前端技术难题,节约了成本,实现合作共赢。承接Web前端,微信小程序、小游戏,2D/3D游戏,动画交互与UI广告设计等各种技术研发。综上所述,不同的浏览器引擎适用于不同的场景。而Gecko则因其高度定制性和扩展性、隐私保护和安全性以及兼容性和稳定性等特点适合需要这些特性的场景。

ufrontend的博客 4004

Webkit简介及工作流程

在当今的互联网时代,浏览器作为我们获取信息和进行交互的重要工具,其背后的浏览器引擎起着至关重要的作用。WebKit作为一款广泛使用的开源浏览器引擎,被应用于众多知名的浏览器中,如Safari、早期的Chrome等。本文将对WebKit进行简要介绍,并详细阐述其工作流程,帮助读者更好地理解网页是如何被加载和渲染的。WebKit是一个开源的浏览器引擎,最初由苹果公司在2005年发布,其基础来源于KDE项目的KHTML和KJS引擎。它主要负责解析和渲染HTML、XML文档以及执行JavaScript脚本。

ning的博客 920

WebKit是什么

现在基于WebKit的浏览器已经无处不在了,恐怕除了微软的IE以及Mozilla的Firefox,其他浏览器已经全被WebKit给占据了。 那WebKit到底是什么呢?要回答这个问题,首先让我们来看一下什么是浏览器是: ·      浏览器是一多媒体程序,它能够查看视频、图片以及播放音乐,所以它需要支持各种视频、图片和音频的解码。 ·      浏览器是一个图形程序,它需要对字体和图形进行渲

苍白笼统模糊的专栏 4630

Chromium网页URL加载过程分析

Chromium在Browser进程中为网页创建了一个Frame Tree之后,会将网页的URL发送给Render进程进行加载。Render进程接收到网页URL加载请求之后,会做一些必要的初始化工作,然后请求Browser进程下载网页的内容。Browser进程一边下载网页内容,一边又通过共享内存将网页内容传递给Render进程解析,也就是创建DOM Tree。本文接下来就分析网页URL的加载过程。

老罗的Android之旅 3万+

Android硬件渲染流程

Android硬件渲染分成两个部分:渲染指令列表的构建和渲染指令列表的渲染,分别对应着ThreadedRenderer的updateRootDisplayList方法和syncAndDrawFrame方法。即绘制过程和渲染过程是分开的。绘制过程发生在UI线程,渲染过程发生在Render线程。

LeeDuoZuiShuai的博客 2438
上一篇: blink渲染知识(一)
下一篇: blink里layout的几个触发点
csshell2002
博客等级 码龄11年 30粉丝 41原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值