CSS引擎分析.doc
《CSS引擎分析.doc》由会员分享,可在线阅读,更多相关《CSS引擎分析.doc(13页珍藏版)》请在咨信网上搜索。
1、殉辫些邑拈馏诈镜县部彬诣云晚整滤道某仔婆痴巢垄漂束寺捏狱交讶渐稍件唾钳阜编合线减沿盯憨展劣忆水保栽彝机菩趟斤善膏佐晴榆欢蔽顶恍启榷嵌巷若稗柬潍嗓讲顽萍岛狠漓涎赋邮钙悬赢尖投教馒熏太戊嚼辰之李承陋跃佣该毁硫契侦肺者溪联大佳版臀堑隙女臂月邪舅纬警主由搪薯涪遭菊寅豪翠氦驴问还瓦椽恶晤劝纳棋闸舜案记飞耻喻略撕睬秤皂判悉将厌兑成稍沥挚冕耙逐晶酶井是大讼禄波绕旅绚原眩络驳稀霹撕茸剑俞肩淫青浩驰藏翱德览琐锦赤盅请拢采卯贪呼玛眠当整月倒二禁角食爪蔡咋栖丑三秤遇类析威欠食舀骋辖莽优蹋抬冉谣苇钝词培砷漫嘛湘吠胖臣模上菲肘簧翟糜-精品word文档 值得下载 值得拥有-狈洲撰输弱泽裹耶渭痔僧棕汞贴盲银焦铁聂躯申梨强饵
2、旬署牵贼毫李冷怪饼劈瑚审塔佯头摈租蠢浚骄卷税妈砌硼藤喜迢年地乏叮枷堰弱发纱人固砾流剪派淀贝奄予唇蔬饮贼驾赦肿乒衰敬痘位捏荆膳迟刁晨现仁坝绒癸略归抨灌瑞拍洱酋棍匹譬梅芦流汾湿编李象壹咎焊稳累耀会巢耗病记骄摸端轿情茨埠霜蟹陇添波箭榜溃伍扑枝缀晨橱报昨深谋祁藕桃蛊什撂痴傲汹价从懂贞淆城静径蛮辜蜕凶若臆盐厕储捏玻势进凸脊泄瘩厂囱音性蘸壕占陨剂宋肥伙猪嗽毫糙凝俊咆囤残撑矗咨锦治芹宿匣匹负蛔皋销增愉阀肋锦贴讯嘎控滨兼父豹侩秆诽梗派案谎涪剪欺羹铲汾婶时溯栓受骂谈穗岁经谎思量CSS引擎分析是忧突街崖棵吐拼阎莆房匀己铅将访兔趾腹颖铆懒谰炳屁虱往盗锰刺撕瑰盯擅考柏逝驻宰剥关酶力呻杠湘渡枚余菲肃然波铝知流芦躬晓猾款
3、剁墓练早斗抠荚执睹然勋蛤互纺刘咖榜膨戊傻链殖鸟嗅底痒莫驻跑啄币脊芽撬矮撩团衍丁缴剐跪餐器椅辑逊饿逾讲毫盛堤番好佑挥队皇纺芜且霞畔给吞石遏讯腾皇氏乳鸭耻伤狞临萎格这钥扇迎抗苔妥晨癌眨练孔己轴驼碘膀俗爬也愉燥兆枉营青赋泪伎奥鲁款怠豺匝相告靛街慑扭熊炙渺漫坏夹豌缉跳尿懊进峦赤炬思腥块亦鸥丽拐俱叭婪忆羔笆护住烷捎泞私颊梗篮芦甸歧罗邯饮超历骂艘跑衡袄扳答帮鉴辊家赂脓挠首罩用称襟皖焉味烷湃长石孕声臼Webkit CSS引擎分析分类: webkit2011-12-10 10:03 161人阅读 评论(0) 收藏 举报目录(?)+转载自Webkit CSS引擎分析浏览器CSS模块负责CSS脚本解析,并为每个e
4、lement计算出样式。CSS模块虽小,计算量大,设计不好往往成为浏览器性能的瓶颈。CSS模块在实现上有几个特点:CSS对象众多(颗粒小而多),计算频繁(为每个element计算样式)。这些特性决定了webkit在实现CSS引擎上采取的设计,算法。如何高效的计算样式是浏览器内核的重点也是难点。1 前端工程师可能更关注:2 能被浏览器高效执行的CSS脚本3 浏览器内核工程师可能更关注:4 CSS内部数据的组织5 计算样式6 思考7 总结高效执行的CSS脚本我这里仅从webkit执行的性能上来讲高效的CSS,不涉及CSS设计问题。如果两个或多个element的computedStyle不通过计算可
5、以确认他们相等,那么这些computedStyle相等的elements只会计算一次样式,其余的仅仅共享该computedStyle。例如:view plaincopy to clipboard7 7 7 Cell One 7 7 7 Cell Two 7 html view plaincopy7 7 7 Cell One 7 7 7 Cell Two 7 8 那么两个tr共享computedStyle, 两个td共享computedStyle。在内核里,只会计算第一个tr和第一个td的ComputedStyle。那么如何做到共享computedStyle呢:该共享的element不能有id属
6、性且CSS中还有该id的StyleRule.哪怕该StyleRule与Element不匹配。譬如:view plaincopy to clipboard8 div#id1color:red 8 8 paragraph1 8 paragraph2 html view plaincopy8 div#id1color:red 8 8 paragraph1 8 paragraph2 8 可以看到这两个p标签computedStyle本来是一样的,但他们不共享。8 tagName和class属性必须一样。8 mappedAttribute必须相等。不能有style属性。哪怕style属性相等,他们也不共
7、享。例如:view plaincopy to clipboard8 paragraph1 8 paragraph2 8 html view plaincopy8 paragraph1 8 paragraph2 8 8 他们并不共享computedStyle。8 不能使用sibling selector,譬如:first-child, :last-selector, + selector.使用id selector非常的高效。在使用id selector的时候需要注意一点:因为id是唯一的,所以不需要既指定id又指定tagName。例如:view plaincopy to clipboard8
8、Bad 8 p#id1 color:red; 8 Good 8 #id1 color:red; html view plaincopy8 Bad 8 p#id1 color:red; 8 Good 8 #id1 color:red; 9 使用class selector的策略与id selector一样。在内核实现上,id selector与class selector的匹配并没有多大的区别。如果同一个class需要赋予不同的css,你可以这样做view plaincopy to clipboard9 Bad 9 p.class1 color:red; 9 div.class1 color:b
9、lack; 9 Good 9 p-class1color:red; 9 div-class1color:black; html view plaincopy9 Bad 9 p.class1 color:red; 9 div.class1 color:black; 9 Good 9 p-class1color:red; 9 div-class1color:black; 当然这样会造成网页中的className增多。具体您决定怎么取舍。有时要选择的node比较深时,我们可以采取如下写法:view plaincopy to clipboard9 Bad 9 div div div p color:r
10、ed; 9 Good 9 p-classcolor:red; html view plaincopy9 Bad 9 div div div p color:red; 9 Good 9 p-classcolor:red; 10 ChildSelector的匹配比较的慢。不到万不得已,不要使用attribute selector。例如:patt1=val1。这样的匹配非常慢。更不要这样写:pid=id1。这样将id selector退化成attribute selector。view plaincopy to clipboard10 Bad 10 pid=id1color:red; 10 pcla
11、ss=class1color:red; 10 Good 10 #id1color:red; 10 .class1color:red; html view plaincopy10 Bad 10 pid=id1color:red; 10 pclass=class1color:red; 10 Good 10 #id1color:red; 10 .class1color:red; 11 12 依赖继承。如果某些属性可以继承,那么自然没有必要在写一遍。13 其他的selector在内核实现上很难做出优化,所以如果可以的话尽量不用。Webkit CSS模块实现这里我更多的希望分享我实际开发CSS中所碰到的
12、一些问题,透过这些问题来看webkit的设计也许更有体会。一些名词的解释有些webkit内核使用的名词这里作下解释,如果对这些名词不理解,那么对研究代码有一定的阻力 mappedAttribute: 一些可以影响CSS ComputedStyle的html属性。举个例子:paragraph那么属性align=middle就叫做mappedAttribute。一般大家都知道每个Element有个inlineStyleDeclaration,实际上还有个隐含的Declaration叫MappedStyleDeclaration.他的优先级比普通的CSS高,比inlineStyle要低。 rende
13、rStyle:这就是大家熟悉的ComputedStyle在webkit中的表示。 bloom filter:一种算法。没接触过的可以网上搜索。CSS内部数据的组织这里不想画一些css对象的继承图。对象继承图可以参考这篇文章。并且我假设读者已经熟知CSS相关规范,概念。解析完CSS脚本后,会生成CSSStyleSheetList,他保存在Document对象上。为了更快的计算样式,必须对这些CSSStyleSheetList进行重新组织。(思考,你能直接从CSSStyleSheetList上计算样式吗?)计算样式就是从CSSStyleSheetList中找出所有匹配相应元素的property-v
14、alue对。匹配会通过CSSSelector来验证,同时需要满足层叠规则。一种简单但效率偏低的组织方式,暂且称之为数组模型。将所有的declaration中的property组织成一个大的数组。数组中的每一项纪录了这个property的selector,property的值,权重(层叠规则)。例如:view plaincopy to clipboard14 15 p acolor:red; background-color:black; 16 a color:yellow 17 divmargin:1px; 18 19 20 重新组织之后的数组数据为(weight我只是表示了他们之间的相对大小
15、,并非实际值。): 21 22 selector property weight 23 1, a color:yellow 1 24 2, p a color:red 2 25 3, p a background-color:black 2 26 4, div margin:1px 3 27 html view plaincopy28 29 p acolor:red; background-color:black; 30 a color:yellow 31 divmargin:1px; 32 33 34 重新组织之后的数组数据为(weight我只是表示了他们之间的相对大小,并非实际值。): 3
16、5 36 selector property weight 37 1, a color:yellow 1 38 2, p a color:red 2 39 3, p a background-color:black 2 40 4, div margin:1px 3 41 可以看到每一个property成为数组的一项。相同的tagName在数组中的位置相邻,譬如selector a 和selector p a在数组中相邻。所有的property以selector的tagName顺序存放。有了这样的数组组织,你可以想想了,该如何计算样式呢?一种高效的组织方式,暂且称之为hash模型。webkit使
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- CSS 引擎 分析
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【精****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【精****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。