目录
html
css
javascript
首页 web前端 html教程 网站代码优化_html/css_WEB-ITnose

网站代码优化_html/css_WEB-ITnose

Jun 24, 2016 am 11:24 AM

将面试整理的网站优化资料记一记,针对移动端的代码说的。

html

1: 标签嵌套层级不要太深,标签尽量简洁化.如懒加载后将data属性去除

2: DNS预先处理 dns-prefetch,如果一个页面有多个不同地址的引用,则DNS预解析很有用。页面预先处理link标签的prefetch

3: 大量图片的懒加载策略,以及一些元素利用ajax在onload后实行延迟加载

4: 对一些js的异步加载

css

1: 嵌套层级不要太深,一般三层最多了。这个主要还是看团队项目结构,命名规范对这个有很大影响,互有取舍,是命名长一点不会有重复还是命名方便一点嵌套深一点

2: css解析从右向左,所以最右边的应该是相对少一点的,比如.on.li_lick 就比.li_click.on要好(如果.on很多的话)

3: html用了base64的img的话,并不会缓存起来,可以将这个base64的图片放在css文件里,css会缓存,图片就缓存起来了

4: 尽量不用后代元素选择器,最右边的一层不要是标签,尤其是像div这种非常常用的标签

5: 多使用css的继承,而不是每一次都书写时都全部重写一遍。写多个css属性时,能连在一起写的就连在一起写。如:background: #fff url() center center no-repeat

javascript

以一个for循环来构建DOM文档举例(使用jquery)

// var lis = document.getElementsByTagName("li")

var lis = [1, "2", "3", "4"];

var ulObj = $("ul");

var lisLength = lis.length;

var html = "";

for (var i = 0; i

if (lis[i] === 1) {

html += '

  • ' + lis[i] + '
  • ';

    } else {

    html += '

  • ' + lis[i] + '
  • ';

    }

    }

    ulObj.html(html);

    01. 缓存变量。$("ul") 使用jquery这种语句记得将其存在变量里,每一句$()都是非常重的函数,能尽量少用就少用。

    02. 使用诸如getElementsByTagName这类LIVE类型的collections时,更要注意对其length的缓存

    03. var html = ""。 赋值时,用字面量的方式

    04. for 循环。实践证明,递减循环比递增循环要快那么一点点。

    05. 对于大型的for循环,可能导致执行时页面卡住,可以考虑使用数组分块技术将循环分割成多个循环一部分一部分的执行

    06. for循环里的条件判断lis.length一定要缓存在变量里,不然每一次都要去查询一次长度。

    07. 构建DOM结构。一般有三种方式:

    ①: 使用节点关系createElement,appendChild这些去构建生成节点关系。

    ②:使用文档片段documentFragment的方式。

    ③:直接用字符串拼接:这个又分为两种,直接+号拼接和数组join拼接。第三种速度效率最高。而第三种里面在移动端里使用+号比数组快很多,在PC端得看浏览器,不同浏览器不同版本对这两种方式的优化不同。

    08. 插入到DOM文档:使用innerHTML的方式比appendChild要效率高。综上,移动端还是使用+号拼接字符串最后使用innerHTML的方式

    09. 插入到DOM中时,一定要将插入结果放在变量里,在for循环结束后插入,千万不能在for循环中执行插入操作,会造成大量的重绘重排。尽量减少对DOM的操作

    10. 这个例子需要动态添加,动态删除,每个li标签有click事件。如果每次插入到DOM后给li添加click事件,那么删除时就要清除注册在li上的click事件。非常麻烦。所以采用事件委托的机制,将事件绑定在ul上,通过target属来判断

    11. 条件判断: == 与 ===,==要进行类型转换比较,多了一个步骤,效率低

    12. 使用直接函数,而不是与之等同的函数,比如$.ajax(),其他$.get()等最终都是调用$.ajax(),多余的步骤多余的调用必然导致效率相对低

    13. 选择器: 使用原生的选择器一定是最快的getElementById(),getElementsByTagName()这些,因为是用编译语言写好的方法。所以jquery里$("li")标签选取器的效率是很高的,所以$("li .my_li")这样写比$(".my_li")效率要高

    14. 善用事件委托:如果有许多类似的结构要绑定事件,都利用事件冒泡的机制,在上层元素上绑定事件

    15. 将一些多条件判断赋值语句用数组来做,比如:

    switch(a) {

    case 0:

    result = "一";

    break;

    case 1:

    result = "二";

    break;

    }

    改成:

    var arr = ["零", "一"];

    result = arr[a]

    16. 对于有复杂动画的模块,尽量用定位使其脱离文档流。利用css3实现的动画,调用一下translate3d(0, 0, 0)或其他的的3d变换,就会调起硬件加速,这个页面其他动画就都会有硬件加速的效果了。要考虑低端机型的话慎用

    17. 函数尽量简单,少用闭包,嵌套的对象成员也会影响性能,总之结构尽量简单,能少一层就少一层

    18. 对于非常频繁调用的函数,如scroll触发的函数,可以考虑使用函数节流,debounce,throttle

    转自: https://segmentfault.com/a/1190000004223993

    作者:  zzzddd

    本篇文章由 HTML5梦工场 小编从其他媒体精选前端相关文章转载,仅供网友学习和交流,如果小编的工作有侵犯到您的权益,请及时联系小编QQ:123464386,将会在第一时间进行处理!投稿与合作,请发至邮箱:tommy@html5dw.com

    本站声明
    本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

    热AI工具

    Undresser.AI Undress

    Undresser.AI Undress

    人工智能驱动的应用程序,用于创建逼真的裸体照片

    AI Clothes Remover

    AI Clothes Remover

    用于从照片中去除衣服的在线人工智能工具。

    Undress AI Tool

    Undress AI Tool

    免费脱衣服图片

    Clothoff.io

    Clothoff.io

    AI脱衣机

    AI Hentai Generator

    AI Hentai Generator

    免费生成ai无尽的。

    热门文章

    R.E.P.O.能量晶体解释及其做什么(黄色晶体)
    2 周前 By 尊渡假赌尊渡假赌尊渡假赌
    仓库:如何复兴队友
    4 周前 By 尊渡假赌尊渡假赌尊渡假赌
    Hello Kitty Island冒险:如何获得巨型种子
    3 周前 By 尊渡假赌尊渡假赌尊渡假赌

    热工具

    记事本++7.3.1

    记事本++7.3.1

    好用且免费的代码编辑器

    SublimeText3汉化版

    SublimeText3汉化版

    中文版,非常好用

    禅工作室 13.0.1

    禅工作室 13.0.1

    功能强大的PHP集成开发环境

    Dreamweaver CS6

    Dreamweaver CS6

    视觉化网页开发工具

    SublimeText3 Mac版

    SublimeText3 Mac版

    神级代码编辑软件(SublimeText3)

    公众号网页更新缓存难题:如何避免版本更新后旧缓存影响用户体验? 公众号网页更新缓存难题:如何避免版本更新后旧缓存影响用户体验? Mar 04, 2025 pm 12:32 PM

    公众号网页更新缓存,这玩意儿,说简单也简单,说复杂也够你喝一壶的。你辛辛苦苦更新了公众号文章,结果用户打开还是老版本,这滋味,谁受得了?这篇文章,咱就来扒一扒这背后的弯弯绕绕,以及如何优雅地解决这个问题。读完之后,你就能轻松应对各种缓存难题,让你的用户始终体验到最新鲜的内容。先说点基础的。网页缓存,说白了就是浏览器或者服务器为了提高访问速度,把一些静态资源(比如图片、CSS、JS)或者页面内容存储起来。下次访问时,直接从缓存里取,不用再重新下载,速度自然快。但这玩意儿,也是个双刃剑。新版本上线,

    如何使用HTML5表单验证属性来验证用户输入? 如何使用HTML5表单验证属性来验证用户输入? Mar 17, 2025 pm 12:27 PM

    本文讨论了使用HTML5表单验证属性,例如必需的,图案,最小,最大和长度限制,以直接在浏览器中验证用户输入。

    如何高效地在网页中为PNG图片添加描边效果? 如何高效地在网页中为PNG图片添加描边效果? Mar 04, 2025 pm 02:39 PM

    本文展示了使用CSS为网页中添加有效的PNG边框。 它认为,与JavaScript或库相比,CSS提供了出色的性能,详细介绍了如何调整边界宽度,样式和颜色以获得微妙或突出的效果

    HTML5中跨浏览器兼容性的最佳实践是什么? HTML5中跨浏览器兼容性的最佳实践是什么? Mar 17, 2025 pm 12:20 PM

    文章讨论了确保HTML5跨浏览器兼容性的最佳实践,重点是特征检测,进行性增强和测试方法。

    < datalist>的目的是什么。 元素? < datalist>的目的是什么。 元素? Mar 21, 2025 pm 12:33 PM

    本文讨论了html< datalist>元素,通过提供自动完整建议,改善用户体验并减少错误来增强表格。Character计数:159

    > gt;的目的是什么 元素? > gt;的目的是什么 元素? Mar 21, 2025 pm 12:34 PM

    本文讨论了HTML< Progress>元素,其目的,样式和与< meter>元素。主要重点是使用< progress>为了完成任务和LT;仪表>对于stati

    我如何使用html5< time> 元素以语义表示日期和时间? 我如何使用html5< time> 元素以语义表示日期和时间? Mar 12, 2025 pm 04:05 PM

    本文解释了HTML5< time>语义日期/时间表示的元素。 它强调了DateTime属性对机器可读性(ISO 8601格式)的重要性,并在人类可读文本旁边,增强Accessibilit

    < meter>的目的是什么。 元素? < meter>的目的是什么。 元素? Mar 21, 2025 pm 12:35 PM

    本文讨论了HTML< meter>元素,用于在一个范围内显示标量或分数值及其在Web开发中的常见应用。它区分了< meter>从< progress>和前

    See all articles