浏览器内核一些定义

来源:互联网 发布:火车票买票软件 编辑:程序博客网 时间:2024/05/01 20:35

000000000000000000000000000000000000000000000000000000

Spring的框架结构

Spring boot官方文档,详细到牙齿

如果你想学习scale,请访问http://www.scala-lang.org/documentation/


111111111111111111111111111111111111111111111111111111111111111

Browserify 可以让你使用类似于 node 的 require() 的方式来组织浏览器端的 Javascript 代码,通过预编译让前端 Javascript 可以直接使用 Node NPM 安装的一些库。

2222222222222222222222222222222222222222222222222222222222

最近在玩React Native,刚开始是在模拟器里运行,后想把它装到真机上,这时localhost上的jsbundle就无法访问了。

这种情况下可以使用main.jsbundle。

步骤:

1.在React Native项目根目录下运行 npm start

2.使用curl命令生成 main.jsbundle

curl http://localhost:8081/index.ios.bundle -o main.jsbundle

3.在AppDelegate.m中选择使用main.jsbundle注释掉

jsCodeLocation = [NSURL URLWithString:@"http://localhost:8081/index.ios.bundle?platform=ios&dev=true"];

取消注释下面这一行

// jsCodeLocation = [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];

4.将真机联上电脑,选择信任,然后在Xcode中选择使用其进行调试,等待编译完成即可运行!

33333333333333333333333333333333333333333333333333333

HTML 在设计时为了展示多媒体信息,虽然后来拓展了一些动态功能,但在应用web化的潮流下,HTNL设计上的不足就越来越突出。

如DOM元素操控太繁琐,业务逻辑很难模块化,可测性低,开发效率低。

而angularJS采用一种全新的设计来解决该问题,提出一系列概念,引入数据绑定,标识符,路由,依赖注入等。


从以前的div+css网格化布局到JavaScript的方兴未艾。然后是各种javascript框架的百家争鸣,HTML和CSS3的落地,移动web冲击下带来的响应式设局,jQuery,AngularJs,ReactJs等操作DOM截然不同的理念和方式,web component的标准化进程...............


Bootstrap,来自 Twitter,是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS、JAVASCRIPT 的,它简洁灵活,使得 Web 开发更加快捷。


444444444444444444444444444444444444444444444444444

浏览器内核的二次开发,开源浏览器的裁剪优化

浏览器的插件

js引擎优化,js扩展,插件开发

熟悉浏览器工作流程,包括URL请求流程,DOM数构建,render数构建,渲染绘制流程,键盘/鼠标事件处理流程





55555555555555555555555555555555555555555555555555555555555555555555


V8是谷歌开源的一个高性能JavaScript引擎,用 C++ 实现,并用在谷歌的开源浏览器Chrome里。

为什么V8非常快,哪种方案让V8达到这种速度?发现其中秘密是一件有趣的事情。

面向对象、设计模式与性能

有些C/C++开发者有些奇怪的观念。他们认为使用面向对象和设计模式会降低程序的性能。但V8证明了这种观念是错误的。V8的实现使用了许多设计模式,但依然非常高效。

下面列出V8中使用的两个模式:

工厂模式

当Javascript引擎执行一个脚本时,引擎为遇到的每个变量、函数或数组都创建一个实例。JSObject是所有这些对象的父对象。

下面列出了所有继承自JSObject的类:

V8实现了一个工厂类来创建这些对象,该类中的Factory::NewJsObject就是用来创建这些对象的。

下面列出了所有使用该类/方法的方法。

V8引擎中的类并没有直接使用这个工厂类,而是添加了另一层封装,通过Heap类调用该工厂类。

访问者模式:

维基百科上这样解释观察者模式:

观察者设计模式是将算法和算法处理的对象分开的一种方式。这种分离可以在不修改结构本身的情况下,将新的操作添加到已有的对象结构上。这是一条遵循open/closed准则的方式。

与工厂模式相似,访问者模式也为实现添加了封装层。这样让其代码更加可读且可维护。

V8源码中许多类都实现了访问者模式。

即使V8开发者必须优化执行效率,他们也不在乎添加到代码中的封装层。使用设计模式和添加一些C++的机制会增加一些封装,所以的确会对效率有影响。但这对效率的影响仅占一小部分,更多的影响来自该应用使用的设计决策。

V8中针对执行效率方面的设计决策

1. 隐藏类和快速属性访问。

JavaScript是一种动态编程语言:可以在对象运行时为对象添加或删除熟悉。这意味着很容易改变对象的属性。

JSFunction和JSValue的父类都是JSObject,JSFunction用来表示一个javascript函数,JSValue用来表示一个javascript值。但没有继承自JSObject的类,用以表示Function或Value这样的Class。许多JavaScript引擎使用词典类型的数据结构来存储这些对象的熟悉,访问每个属性都需要动态查找并解析属性在内存中的位置。

这种方式导致JavaScript在访问对象变量的属性时,比在Java或Smalltalk中要慢。在这些语言中,实列变量分配的位置是固定的,即由编译器根据对象的类定义中的布局,在该对象在内存中的位置加上固定的偏移位置。因此访问这些属性仅仅是内存上的读取或存储,而这种操作通常只需一条指令。

V8使用隐藏类概念来降低访问JavaScript属性所消耗的时间。V8不使用动态查询来访问属性,而是在幕后创建隐藏类。

2. 动态生产机器码

在首次执行时,V8就将JavaScript源码直接编译成机器码,没有中间字节码,没有解释器。属性访问由内联的缓存代码处理,V8执行时可能会有其他机器指令修改这些缓存代码。

3. 高效的垃圾收集器

在执行过程中,V8会重新获得废弃对象的内存,即垃圾回收。为了保证拥有较快的对象分类、较短的垃圾回收停顿,以及没有内存碎片。V8使用了停顿、分代、精确垃圾回收器。这意味着V8使用了:

  • 在垃圾回收循环期间停止程序的执行。
  • 在大多数垃圾循环中,只处理对象堆的一部分。这最大化降低了停顿对应用的影响。
  • 记录所有对象和指针在内存中的位置,避免了将对象作为指针识别而导致的内存泄漏。

结论:

出于效率因素而不使用面向对象或设计模式,这是一个错误的观念。这样只会获得数毫秒的优化,却失去了代码的可读性和可维护性。



0 0
原创粉丝点击