runxinzhi.com
首页
百度搜索
浏览器内核
做浏览器内核这一想法,始于一年前。 当时比较闲,闲久了,就想做点什么事情。然后,看到网上冒出了很多浏览器,就研究了下浏览器这个东西,发现这些浏览器都没有核心,都是在webkit或 者IE上加个壳,于是觉得浏览器核心挺有挑战性的,先是尝试做了一下,后来,就一直断断续续,磕磕碰碰做到现在,从零开始,一个一个,慢慢实现了矢量渲 染,界面框架,HTML/CSS解析,排版,渲染,javascript引擎,DOM API,当然,并不是完整的实现。实际上,我目前也只能算是个网页前端刚学了一年的新手,HTML/CSS,javascript,DOM里面的方方面 面,我还在学习中,学到了新东西,就加以实现,或者测试某个网页,发现有问题,就加以修改,就这样,慢慢完善这个内核。 我的大部分关于HTML/CSS,javascript,DOM的知识都是从http://www.w3school.com.cn/里获取 的,w3cschool对于学习网页前端的新手来说,是个挺不错的地方,而且每个知识点里还有实例可以自己动手测试,加深理解。不过,它讲解得比较笼统, 有些细节的地方,还是需要自己去测试,才能知道正确的答案,比如: 一个block元素的width属性是百分比时,是去取基于包含块(父元素)宽度的百分比宽度,那么,对于absolute或者fixed定位的元素来说,它的包含块还是它的父元素吗? 当一个block元素的width属性是inherit,也就是继承父元素的宽度时,如果父元素的宽度是个百分比时,那么这个block元素继承过来的也是个百分比吗? 等等,还有很多类似的细节问题,有排版的,也有解析的,刚开始,排版模块只能处理一些简单的,并且HTML书写规范的页面,而随着细节的不断修补,现在也能处理复杂,并且书写不怎么规范的页面了,直到现在,我仍然在努力更正这些细节问题。 随着排版模块的不断完善,和我对网页前端的认识不断加深,我发现很多排版错乱的问题并不是排版模块出了BUG,或是又有哪个细节没处理好,而是由于没有执 行网页当中的javascript代码,当时,我对javascript知之甚少,而之前,我一直都以为javascript只不过用来处理一些数据交互 罢了。。。好吧,现在我知道javascript可以改变网页内容,它是怎么做到的?。。。这不是主要问题,主要问题是,我得先实现一个 javascript引擎,然后才能去考虑别的问题。好吧,我甚至连编译原理都不懂,现在却要实现一门语言。。。幸好它只是一个脚本语言。 对于一个熟悉C++的人来说,javascript无论是闭包,还是prototype,函数式编程,还有它的用法上,都显得太怪异了,幸好我不是要用它 干什么,而是实现它。经过几个月的努力,我搭起了一个简单的JS引擎。在这段时间,逛园子时偶尔发现汤姆大叔写的javascript教程,我从中获益非 浅,教程写得很不错,讲解了关于闭包,作用域等一些关键的地方,这里推荐大家去看下。 虽然实现了JS引擎,虽然能执行JS代码了,但我发现,这似乎跟网页排版没有关系。。。还差什么?对,还差DOM API,我很快找到了答案。DOM API?另外一个大坑? 说到DOM,我想说说垃圾回收,因为之前完全不知道有DOM API,JS引擎的垃圾回收机制使用的是引用记数,在查找DOM相关资料的时候,我发现了内存泄露这一说法,当然,这是针对IE的,在进行了详细了解之 后,我才发现,垃圾回收机制应该使用mark and sweep机制。。。整个垃圾收集器得重写了 JS结合DOM API,才能对网页进行操作,当然,它也处理数据交互。不过,这2者都是大坑。 在完善DOM API的同时,JS引擎也经历了多次修改,这里,我不得不说说eval这个函数,eval可以执行一段JS代码,也就是,它可以动态生成一些变量和函数, 而我以为它只是在全局作用域里生成那些变量和函数,实际上这是因为在全局作用域里生成的那些变量和函数,有时候会阴差阳错的得到正确的结果。。。后来在对 淘宝首页的JS问题进行调试时才发现,实际上,eval在哪个作用域里运行,它就在哪个作用域里动态生成一些变量和函数。。。 最后,放个下载,有兴趣的同学可以用用看,不过打开网页有点慢,有时候会比较卡,也比较容易崩溃。http://www.cnblogs.com/BrowserCore/archive/2013/02/06/2900872.html 下载 :(14:36更新)(出于帐号安全考虑,大家不要用这个登录任何网站,实际上,大部分网站它也都登不上去-_-#) 补充一下:运行前请先确保安装了宋体这个字体,一般中文操作系统会自带这个字体。还有因为我也只是个人开发,并没有在很多系统里做过测试,只在XP 32位系统下测试能运行,如果你运行不了,或者少什么DLL,不妨留个言,我会更新掉。
作者:
Leo_wl
出处:
http://www.cnblogs.com/Leo_wl/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
版权信息
相关阅读:
Python 安装、循环语句、数据类型(一)
Python 字符、整型、列表字典等操作(二)
JAVA实现文章的上一篇下一篇
什么是公钥、私钥、密码、助记词
XSS跨站网络攻击
区块链相关知识
冷钱包
.NET 后台提交POST请求
邮件的发送
数据库中字段类型对应的C#中的数据类型
原文地址:https://www.cnblogs.com/Leo_wl/p/2907733.html
最新文章
DataTable数据集动态构造Table表结构 Alec
KMP算法中nextval数组的计算方法 Alec
把123转换成一百二十三 Alec
SQL datediff (时间差) Alec
GridView的Sorting排序 Alec
向FTP服务器上传文件 Alec
SQL中CONVERT(转化日期类型、格式化日期)函数使用 Alec
SQL自增序列 Alec
操作系统知识体系复习总结总结 Alec
Web页面提示、跳转 Alec
热门文章
JS Math.max(),Math.random(), Math.round(),Math.ceil(),Math.floor()函数 Alec
sql返回刚添加的数据的自增id Alec
NET鼠标、键盘事件 Alec
sql存储过程实例 Alec
EF/SQL/新闻中分页应用 Alec
Float计算机表示形式
Python 模块(五)
Python 模块续和面向对象的介绍(六)
Python高级之Socket 探索(五)
Python 函数基础、有序集合、文件操作(三)
Copyright © 2020-2023
润新知