• 浏览器内核


      做浏览器内核这一想法,始于一年前。    当时比较闲,闲久了,就想做点什么事情。然后,看到网上冒出了很多浏览器,就研究了下浏览器这个东西,发现这些浏览器都没有核心,都是在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,不妨留个言,我会更新掉。
  • 相关阅读:
    Python 安装、循环语句、数据类型(一)
    Python 字符、整型、列表字典等操作(二)
    JAVA实现文章的上一篇下一篇
    什么是公钥、私钥、密码、助记词
    XSS跨站网络攻击
    区块链相关知识
    冷钱包
    .NET 后台提交POST请求
    邮件的发送
    数据库中字段类型对应的C#中的数据类型
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2907733.html
Copyright © 2020-2023  润新知