侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

页面重构技能-Javascript、CSS篇

前端  /  管理员 发布于 7年前   293

About JS、CSS

CSS:

  1. 样式表置于顶部
  2. 避免CSS表达式
  3. 使用外部JS、CSS
  4. 削减JS、CSS
  5. <link> ,@import
  6. 避免滤镜

JS:

  1. 脚本置于底部
  2. 使用外部JS、CSS
  3. 削减JS、CSS
  4. 不用重复脚本
  5. 减少访问和操作DOM
  6. 事件委托

1、样式表置顶,Why?

浏览器渲染页面都是自上而下的渲染,当在<body>里遇到<link>或是<style>时候会阻塞渲染页面,而且也有可能会造成页面重绘,就好像格子铺里,东西都按顺序摆好了,但是老板说,这个东西得这样、那样摆,又得挨个重新摆了。除此之外,加在<head>里是为了可以顺序加载所需的样式。

2、避免CSS表达式,Why?

很多人包括我在内,当学习到CSS表达式时候,都说避免或不要用它,所以都偷懒的不用看了,包括JS里的eval一样……

后来有一次项目我就偏偏用了一次,结果。。。它成为了最后查出来的BUG。。。(IE6下影响了页面样式)

其实CSS表达式最主要的弊端是它影响性能,要知道CSS是具有时效性的,也就是说,当你修改一下样式,它会马上生效,

而改变窗口大小,滚动页面甚至移动鼠标都会触发表达式进行频繁的求值,会严重影响,所以要尽量避免。

3、使用外部JS、CSS,Why?

我们都知道使用外部文件会增加HTTP请求,但是由于缓存的关系,当用户再次访问时,或者访问其它页面里相同的文件时候,页面会明显提升响应速度,而且,还有一点好处就是外部JSS、CSS可以减少页面内的文档大小。

4、削减JS、CSS,Why?

这个不用说了……你说为什么?

5、用<link>,@import,Why?

先来看看两者区别:

区别1:老祖宗的差别。@import完全是CSS提供的一种方式,link是XHTML标签,除了加载CSS外,还可以定义RSS等其他事务;@import属于CSS范畴,只能加载CSS。

区别2:加载顺序的差别。link引用CSS时,在页面载入时同时加载;@import需要页面网页完全载入以后加载。

区别3:兼容性的差别。link是XHTML标签,无兼容问题;@import是在CSS2.1提出的,低版本的浏览器不支持。

区别4:使用dom控制样式时的差别。link支持使用Javascript控制DOM去改变样式;而@import不支持。

两者比较,@import明显弱爆了……

6、避免使用滤镜,Why?

IE独有属性AlphaImageLoader用于修正7.0以下版本中显示PNG图片的半透明效果。这个滤镜的问题在于浏览器加载图片时它会终止内容的呈现并且冻结浏览器。在每一个元素(不仅仅是图片)它都会运算一次,增加了内存开支,因此它的问题是多方面的。
完全避免使用AlphaImageLoader的最好方法就是使用PNG8格式来代替,这种格式能在IE中很好地工作。如果你确实需要使用AlphaImageLoader,请使用下划线_filter又使之对IE7以上版本的用户无效。

7、脚本置于底部,Why?

脚本的问题就是当浏览器渲染时候遇到<script>,就会跑去下载,然后执行里面的JS,这期间页面就会阻塞,等待完事了再继续向下执行。所以,为了先将页面最快的呈现给用户,JS应放在</body>的上面。

8、减少访问、操作DOM,Why?

访问:在《高性能JavaScript》中这么比喻:“把DOM看成一个岛屿,把JS看成另一个岛屿,两者之间以一座收费桥连接”。

操作:修改和访问DOM元素会造成页面的Repaint和Reflow,也就是重绘和回流。

所以问题显而易见。

解决方案:缓存已经访问过的有关元素

       更新完节点之后再将它们一次性添加到文档树中

9、事件委托,Why?

事件委托,也就是利用事件冒泡的机制,把事件绑定到元素对象的父元素上。

例如:一个多行的表格,含有经过提示行效果,并且表格会随着分页经行变化。

分析:鉴于上面的第7条,我们不能牺牲性能去为每个变化的行元素绑定事件。

解决方案:把事件绑定到table的父元素上,根据e.target(e.secElement)的节点类型判断来进行操作


  • 上一条:
    关于调试CSS跨浏览器样式bug的问题
    下一条:
    hasLayout引发的CSS Bug表
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 使用 Alpine.js 排序插件对元素进行排序(0个评论)
    • 在js中使用jszip + file-saver实现批量下载OSS文件功能示例(0个评论)
    • 在vue中实现父页面按钮显示子组件中的el-dialog效果(0个评论)
    • 使用mock-server实现模拟接口对接流程步骤(0个评论)
    • vue项目打包程序实现把项目打包成一个exe可执行程序(0个评论)
    • 近期文章
    • 智能合约Solidity学习CryptoZombie第四课:僵尸作战系统(0个评论)
    • 智能合约Solidity学习CryptoZombie第三课:组建僵尸军队(高级Solidity理论)(0个评论)
    • 智能合约Solidity学习CryptoZombie第二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2017-06
    • 2017-07
    • 2017-08
    • 2017-09
    • 2017-10
    • 2017-11
    • 2018-03
    • 2018-04
    • 2018-05
    • 2018-06
    • 2018-09
    • 2018-11
    • 2018-12
    • 2019-02
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2021-04
    • 2021-05
    • 2021-07
    • 2021-08
    • 2021-09
    • 2021-10
    • 2021-11
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-02
    • 2023-03
    • 2023-04
    • 2023-05
    • 2023-06
    • 2023-07
    • 2023-09
    • 2023-10
    • 2023-11
    • 2023-12
    • 2024-01
    • 2024-02
    • 2024-03
    • 2024-04
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客