⑴ 谷歌浏览器是使用什么内核的呢
是WebKit内核,和苹果的Safari一样,和FF和IE都不一样,不过开发这个引擎的很多人也参与了FF内核的开发, WebKit也使用了一部分Gecko(FF内核)的代码。 Chrome现在只有Windows、MacOS和手机操作系统上的版本,其他操作系统的版本还在开发,很快的,因为内核是一样的,只是显示等外部调用的库不同。
⑵ 下了chrome源码还要下JSV8源码么
您好,
虽然Chrome浏 览器没有完全解决内存尺寸问题,但是,它通过减少碎片来控制这个问题。在传统的浏览器中,浏览器为一个线程分配一套虚拟内存。当然,每一个标签都占用这个 总内存集中的一个内存块。随着你打开更多的标签,系统将分配更多的内存。但是,在你关闭标签的时候,内存没有完全恢复,不足以运行未来的标签。你最终将遇 到标准的内存碎片问题。
但是,在Chrome浏览器中,每一个标签都有自己的线程。你没有看错,不是每一个Chrome的窗口,而是每一个标签。Cogswell说,我做了20多年的开发工作。我从来没有看到一个窗口能够托管多个线程。但是,Chrome浏览器确实做到了。
Cogswell说,如果我目前的标签上有一个网页,我在地址栏输入一个新的URL地址的时候,与那个网页有关的chrome.exe命令请求就关闭了,并且开始一个新的chrome.exe命令请求。这样做是很完美的:不用输入命令清除分配给已经关闭的网页的内 存,Chrome浏览器将完全消除整个线程,然后开始一个新的线程。这是Chrome浏览器阻止内存碎片以及保护和隔离每一个网页的又一种方法。
更有趣的是在我装载雅虎网站www.yahoo.com的时候发现了一个奇怪的现象。我看到启动了两个线程。但是,对于谷歌搜索引擎 www.google.com那种比较小的网页,我仅看到了一个流程。当我查看命令行的时候我发现原来输入命令行参数设置了一个插件。那是一个叫做插件路 径的额外的参数,设置是c:/windows/system32/macromed/flash/npswf32.dll
那是Flash播放器。Chrome为嵌入在网页的Flash播放器启动了另一个线程。当我在Chrome浏览器 中保持雅虎网页处于打开状态并且关闭分配给Flash播放器的线程的时候,Chrome在雅虎网页上面显示一个提示并且用一个Flash标识取代了那个 Flash窗口,Flash标识上面有一个失望的面孔。
⑶ Chrome的javas Script中的V8引擎是什么原理
V8引擎先将JavaScript代码编译成二进制的机器码的,而非字节码或是直接解释,然后再执行它,以此提升效能。
⑷ v8是什么软件
Lars Bak是这个项目的组长,目前该JavaScript引擎已用于其它项目的开发。第一个版本随着第一个版本的Chrome于2008年9月2日发布。
V8使用C++开发,并在谷歌浏览器中使用。在运行JavaScript之前,相比其它的JavaScript的引擎转换成字节码或解释执行,V8将其编译成原生机器码(IA-32,x86-64,ARM, orMIPSCPUs),并且使用了如内联缓存(inline caching)等方法来提高性能。有了这些功能,JavaScript程序在V8引擎下的运行速度媲美二进制程序。
V8中实现的ECMAScript中指定 ECMA - 262 ,第3版 运行在Windows XP和Vista,Mac OS X的10.5(雪豹和Linux系统使用IA - 32或ARM处理器。
V8可以独立运行,也可以 嵌入 到任何C++应用程序。项目托管在Google Code上,基于BSD协议,任何组织或个人可以将其源码用于自己的项目中。
⑸ v8引擎是如何知道js数据类型的
V8是谷歌开源的一个高性能JavaScript引擎,用 C++ 实现,并用在谷歌的开源浏览器Chrome里。有些C/C++开发者有些奇怪的观念。他们认为使用面向对象和设计模式会降低程序的性能。但V8证明了这种观念是错误的。V8的实现使用了许多设计模式,但依然非常高效。观察者设计模式是将算法和算法处理的对象分开的一种方式。这种分离可以在不修改结构本身的情况下,将新的操作添加到已有的对象结构上。这是一条遵循open/closed准则的方式。
与工厂模式相似,访问者模式也为实现添加了封装层。这样让其代码更加可读且可维护。V8源码中许多类都实现了访问者模式。JavaScript是一种动态编程语言:可以在对象运行时为对象添加或删除熟悉。这意味着很容易改变对象的属性。JSFunction和JSValue的父类都是JSObject,JSFunction用来表示一个javascript函数,JSValue用来表示一个javascript值。但没有继承自JSObject的类,用以表示Function或Value这样的Class。许多JavaScript引擎使用词典类型的数据结构来存储这些对象的熟悉,访问每个属性都需要动态查找并解析属性在内存中的位置。这种方式导致JavaScript在访问对象变量的属性时,比在Java或Smalltalk中要慢。在这些语言中,实列变量分配的位置是固定的,即由编译器根据对象的类定义中的布局,在该对象在内存中的位置加上固定的偏移位置。因此访问这些属性仅仅是内存上的读取或存储,而这种操作通常只需一条指令。V8使用隐藏类概念来降低访问JavaScript属性所消耗的时间。V8不使用动态查询来访问属性,而是在幕后创建隐藏类。出于效率因素而不使用面向对象或设计模式,这是一个错误的观念。这样只会获得数毫秒的优化,却失去了代码的可读性和可维护性。
⑹ 如何看待谷歌V8 JavaScript引擎引入新解释器Ignition
刚刚看了下V8的源码。。。不是什么解释器
而是一个字节码解码器。。。。
src/runtime/runtime-interpreter.cc
这里面就有定义了
⑺ 什么是Google V8 JavaScript引擎
V8是一个由丹麦Google开发的开源JavaScript引擎,用于Google Chrome中。[2]Lars Bak是这个项目的组长。[3]
V8在执行之前将JavaScript编译成了机器码,而非位元组码或是直译它,以此提升效能。更进一步,使用了如内联缓存(inline caching)等方法来提高性能。有了这些功能,JavaScript程序与V8引擎的速度媲美二进制编译。[4]
传统的javascript是动态语言,又可称之为Prototype-based Language,JavaScript继承方法是使用prototype,透过指定prototype属性,便可以指定要继承的目标。属性可以在运行时添加到或从对象中删除,引擎会为执行中的物件建立一个属性字典,新的属性都要透过字典查找属性在内存中的位置。V8为object新增属性的时候,就以上次的hidden class为父类别,创建新属性的hidden class的子类别,如此一来属性访问不再需要动态字典查找了。
为了缩短由垃圾收集造成的停顿,V8使用stop-the-world, generational, accurate的垃圾收集器。[5]在执行回收之时会暂时中断程序的执行,而且只处理物件堆叠。还会收集内存内所有物件的指标,可以避免内存溢位的情况。V8组译器是基于Strongtalk组译器。[6]。
⑻ Chrome JavaScript 引擎 V8 背后的牛人 Lars Bak 有什么故事
2000或2001年以前在美国,是Sun的HotSpot JDK的主力开发之一
回到丹麦,2002年创立OOVM。因为他对Smalltalk的热爱,OOVM被写成一个以Smalltalk为开发语言的迷你虚拟机,主打各种资源有限嵌入式设备,代码调试、热部署、热替换都很方便。没记错的话当时宣传是最低128K RAM就可以运行。
OOVM在2004年被当时J2ME VM的主要开发商Esmertec收购,后来改名为OSVM,以突出其能够在bare metal上运行的特性。
Lars Bak的家是个丹麦的农场,有时候高层开会就跑去他家里开...
2006年因为经济不景气,同时OSVM始终没能在市场上取得大的进展(一方面原因是Smalltalk还是太小众了),Esmertec关掉了位于丹麦的OSVM分支。
Lars Bak随后加入Google。这里Wikipedia上的记载有误,他是在06年而不是04年加入Google从事V8开发的。
⑼ 浏览器核心是不是大体可分为 ie核心(目前国内大多数),firefox。还有谷歌的chrome,
浏览器的种类,如果按照生产商的品牌分,不说数以万计,起码也有成百上千种了, 如果按浏览器核心分类,它的种类就会少的多。
当今浏览器核心的种类值得一体的大约只有三到四个,它们分别是:Trident、Gecko、WebKit和Presto。
乍一看,似乎都很陌生,其实并不然,只要你上过网,就至少用过其中一种浏览器核心的浏览器软件,因为它们的市场占有率的确是太高了。
一、Trident核心,代表产品Internet Explorer说起Trident,很多人都会感到陌生,但提起IE(Internet Explorer)则无人不知无人不晓,由于其被包含在全世界使用率最高的操作系统Windows中,得到了极高的市场占有率,所以我们又经常称其为IE核心。
Trident(又称为MSHTML),是微软开发的一种排版引擎。它在1997年10月与IE4一起诞生,至今经历12年,至少更新了四个版本,虽然它相对其它浏览器核心还比较落后,但Trident一直在被不断地更新和完善。而且除IE外,许多产品都在使用Trident核心,比如Windows的Help程序、RealPlayer、Windows Media Player、Windows Live Messenger、Outlook Express等等都使用了Trident技术。
但并不是所有的IE都使用Trident引擎,微软还有另一个网页浏览器排版引擎,叫做Tasman,它是使用在Internet Explorer for Mac的排版引擎,即苹果版的IE引擎。
使用Trident引擎的浏览器有很多,比如Internet Explorer、Maxthon遨游、世界之窗、腾讯TT、Netcapter、Avant等等,但Trident只能应用于Windows平台,且是不开源的。
二、Gecko核心,代表作品Mozilla FirefoxGecko也是一个陌生的词,但Firefox的名声应该已经有所耳闻,Gecko是一套开放源代码的、以C++编写的网页排版引擎。
目前为Mozilla家族网页浏览器以及Netscape 6以后版本浏览器所使用。这软件原本是由网景通讯公司开发的,现在则由Mozilla基金会维护。它的最大优势是跨平台,能在Microsoft Windows、Linux和MacOS X等主要操作系统上运行,而且它提供了一个丰富的程序界面以供互联网相关的应用程式使用,例如网页浏览器、HTML编辑器、客户端/服务器等等。
Gecko是最流行的排版引擎之一,仅次于Trident。使用它的最着名浏览器有Firefox、Netscape6至9。
三、WebKit核心,代表作品Safari、Chromewebkit 是一个开源项目,包含了来自KDE项目和苹果公司的一些组件,主要用于Mac OS系统,它的特点在于源码结构清晰、渲染速度极快。主要代表作品有Safari和Google的浏览器Chrome。
四、Presto核心,代表作品Opera
Presto是由Opera Software开发的浏览器排版引擎,供Opera 7.0及以上使用。它取代了旧版Opera 4至6版本使用的Elektra排版引擎,包括加入动态功能,例如网页或其部分可随着DOM及Script语法的事件而重新排版。
Presto在推出后不断有更新版本推出,使不少错误得以修正,以及阅读Javascript效能得以最佳化,并成为速度最快的引擎,这也是Opera被公认为速度最快的浏览器的基础。
⑽ 除了安卓,谷歌有哪些用户熟知的开源项目
谷歌开源项目很多的,下面我列举几个我用过的:
Google GFlags
GFlags是一个命令行标记的处理库,它可以替代“getopt()”,其内置对C++的支持比如string,十分方便。
Google Glog
Glog提供强大的日志处理工具库,能够满足客户端以及服务器等多种应用场景,性能高资源消耗低。
ProtoBuf
ProtoBuf是一种可扩展编码序列数据的方式,Google在几乎所有内部RPC协议和文件格式都使用了ProtoBuf。它可以用于很多语言无缝交换数据,是一种很好的通信协议。而且被一些IDE所支持,比如NetBeans。
Chromium
Chromium是Chrome浏览器的开源项目,Chromium的目标是建立一个新一代的强大网络应用程序,它与Chrome有很多不同之处。Chrome以稳定为主,而Chromium以功能驱动为主。
V8 引擎
V8是Google的开源JavaScript引擎,用C++写成,用于Chrome浏览器之上。V8使用ECMAScript的ECMA-262第三版可运行于Windows XP、Vista、Mac OS 10.5和使用IA-32或ARM处理器的Linux。V8可独立运行也可嵌入到任何C++程序里使用。
Chromium OS
Chromium OS是开源版的Chrome OS操作系统,提供快速、简单而安全的网络体验。
Google Style Guide
Google内部的C++编码规范
GO
Google开发的新编程语言,具有强大的并发能力,适用于处理海量数据。
Skia
Skia是一个完整的2D图形处理库,用于绘制文字、图形、图片等,在Chrome和Android上都有应用。
GoogleTest
GoogleTest是一个强大适用的C++ 单元测试和性能测试库,使用易上手。
Fonts
谷歌提供了自家的所有开源字体,如:Roboto、Open Sans等。
Gson
Gson是一个Java序列化库,能够提供Java对象到Json对象的完美转换。
LevelDB
LevelDB是一个key-value数据库,可以有序存放key和value的映射,性能高。
其他更多好的开源项目请到https://github/google查找