当前位置:首页 » 网页前端 » 前端伯乐
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

前端伯乐

发布时间: 2022-01-20 08:40:29

⑴ 为什么每个前端开发者都要理解网页渲染

今天我要将关注点放到网页渲染以及其重要性上。虽然已经有很多文章提到过这个主题了,但大部分信息都是零碎的片段。为了思考这件事情,我需要研究很多信息的来源。这也就是为什么我觉得我应该写这篇文章的原因。我相信这篇文章对新手会很有用,并且对想刷新和巩固他们已经了解的东西的高手也同样适用。


渲染应该从最开始当页面布局被定义时就进行优化,样式和脚本在页面渲染中扮演着非常重要的角色。专业人员知道一些技巧以避免一些性能问题。

这篇文章不会深入研究浏览器的技术细节,而是提供一些通用的原则。不同浏览器引擎工作原理不同,这就使特定浏览器的学习更加复杂。



浏览器是怎样渲染一个页面的?


我们从浏览器渲染页面的大概过程开始说起:

  1. 由从服务器接收到的 HTML 形成DOM(文档对象模型)。

  2. 样式被加载和解析,形成 CSSOM(CSS 对象模型)。

  3. 紧接着 DOM 和 CSSOM 创建了一个渲染树,这个渲染树是一些被渲染对象的集合( Webkit 分别叫它们”renderer”和”render object”,而在Gecko 引擎中叫”frame”)。除了不可见的元素(比如 head 标签和一些有 display:none 属性的元素),渲染树映射了 DOM 的结构。在渲染树中,每一个文本字符串都被当做一个独立的 renderer。每个渲染对象都包含了与之对应的计算过样式的DOM 对象(或者一个文本块)。换句话说,渲染树描述了 DOM 的直观的表现形式。

  4. 对每个渲染元素来说,它的坐标是经过计算的,这被叫做“布局(layout)”。浏览器使用一种只需要一次处理的“流方法”来布局所有元素(tables需要多次处理)。

  5. 最后,将布局显示在浏览器窗口中,这个过程叫做“绘制(painting)”。




重绘


当在页面上修改了一些不需要改变定位的样式的时候(比如background-color,border-color,visibility),浏览器只会将新的样式重新绘制给元素(这就叫一次“重绘”或者“重新定义样式”)。



重排


当页面上的改变影响了文档内容、结构或者元素定位时,就会发生重排(或称“重新布局”)。重排通常由以下改变触发:

· DOM 操作(如元素增、删、改或者改变元素顺序)。

·内容的改变,包括 Form 表单中文字的变化。

·计算或改变 CSS 属性。

·增加或删除一个样式表。

·改变”class”属性。

·浏览器窗口的操作(改变大小、滚动窗口)。

·激活伪类(如:hover状态)。



浏览器如何优化渲染?


浏览器尽最大努力限制重排的过程仅覆盖已更改的元素的区域。举个例子,一个 position 为 absolue 或 fixed 的元素的大小变化只影响它自身和子孙元素,而对一个 position 为 static 的元素做同样的操作就会引起所有它后面元素的重排。

另一个优化就是当运行一段Jjavascript 代码的时候,浏览器会将一些修改缓存起来,然后当代码执行的时候,一次性的将这些修改执行。

举例来说,这段代码会触发一次重绘和一次重排:


var$body=$('body');

$body.css('padding','1px');//重排,重绘

$body.css('color','red');//重绘

$body.css('margin','2px');//重排,重绘

//实际上只有一次重排和重绘被执行。


如上面所说,访问一个元素的属性会进行一次强制重排。如果我们给上面的代码加上一行读取元素属性的代码,这个情况就会出现:

var$body=$('body');

$body.css('padding','1px');

$body.css('padding');//这里读取了一次元素的属性,一次强制重排就会发生

$body.css('color','red');

$body.css('margin','2px');


上面这段代码的结果就是,进行了两次重排。因此,为了提高性能,你应该讲读取元素属性的代码组织在一起(细节的例子可以看JSBin上的代码)。


有一种情况是必须触发一次强制重排的。例如:给元素改变同一个属性两次(比如margin-left),一开始设置100px,没有动画,然后通过动画的形式将值改为50px。具体可以看例子,当然,我在这里会讲更多的细节。

我们从一个有transition的CSS class开始:

.has-transition{

-webkit-transition:margin-left1sease-out;

-moz-transition:margin-left1sease-out;

-o-transition:margin-left1sease-out;

transition:margin-left1sease-out;

}


然后进行实现:


//我们的元素默认有"has-transition"属性

var$targetElem=$('#targetElemId');


//删除包含transition的class

$targetElem.removeClass('has-transition');

//当包含transition的class已经没了的时候,改变元素属性

$targetElem.css('margin-left',100);


//再将包含transition的class添加回来

$targetElem.addClass('has-transition');


//改变元素属性

$targetElem.css('margin-left',50);


上面的实现没有按照期望的运行。所有的修改都被浏览器缓存了,只在上面这段代码的最后才会执行。我们需要的是一次强制重排,我们可以通过进行以下修改来实现:


//删除包含transition的class

$(this).removeClass('has-transition');


//改变元素属性

$(this).css('margin-left',100);


//触发一次强制重排,从而使变化了的class或属性能够立即执行。

$(this)[0].offsetHeight; //offsetHeight仅仅是个例子,其他的属性也可以奏效。


//再将包含transition的class添加回来

$(this).addClass('has-transition');


//改变元素属性

$(this).css('margin-left',50);


现在这段代码如我们所期望的运行了。



实际的优化建议


汇总了一些有用的信息,我建议以下几点:

·创建合法的 HTML 和 CSS ,别忘了制定文件编码,Style 应该写在 head 标签中,script 标签应该加载 body 标签结束的位置。

·试着简化和优化 CSS 选择器(这个优化点被大多数使用 CSS 预处理器的开发者忽略了)。将嵌套层数控制在最小。以下是 CSS 选择器的性能排行(从最快的开始):

  1. ID选择器:#id

  2. class选择器:.class

  3. 标签:div

  4. 相邻的兄弟元素:a + i

  5. 父元素选择器:ul > li

  6. 通配符选择器:*

  7. 伪类和伪元素:a:hover,你应该记住浏览器处理选择器是从右向左的,这也就是为什么最右面的选择器会更快——#id或.class。

    div*{...}//bad

    .listli{...}//bad

    .list-item{...}//good

    #list.list-item{...}//good

  8. 在你的脚本中,尽可能的减少 DOM 的操作。把所有东西都缓存起来,包括属性和对象(如果它可被重复使用)。进行复杂的操作的时候,最好操作一个“离线”的元素(“离线”元素的意思是与 DOM 对象分开、仅存在内存中的元素),然后将这个元素插入到 DOM 中

  9. 如果你使用 jQuery,遵循jQuery 选择器最佳实践

  10. 要改变元素的样式,修改“class”属性是最高效的方式之一。你要改变 DOM 树的层次越深,这一条就越高效(这也有助于将表现和逻辑分开)。

  11. 尽可能的只对 position 为 absolute 或 fix 的元素做动画。

  12. 当滚动时禁用一些复杂的:hover动画是一个很好的主意(例如,给 body 标签加一个 no-hover 的 class)关于这个主题的文章。


想了解更多的细节,可以看一下这些文章:

1. How browsers work

2. Rendering: repaint, reflow/relayout, restyle

希望这篇文章能够对你有所帮助!


原文链接:frontendbabel翻译:伯乐在线-Moejser

译文链接:http://blog.jobbole.com/72692/

⑵ 为什么今年毕业,大三就从事web前端工作,大四一年就正式工作,现在辞职了,还不好找工作,一看是应届

我才毕业找工作,也是被拒绝过,不过后来发现被拒绝的大部分真的是我不太合适,只是当时自己失望。假如有能力,会找到合适的。不过现在是淡季。 来自职Q用户:匿名用户
自己有能力终有伯乐能识君 来自职Q用户:刘先生

⑶ web前端怎么自学,有什么好的网站,或者资料推荐吗

随着Web前端的风行于世,有许多小伙伴加入了前端开发行业,但是有很多小伙伴想学Web前端很久了
首先,Web工程师要入门必须要了解前端、后端、后台的基本概念,同时要了解基本的html、css和javascript语法,最后根据设计师的设计图在不考虑兼容性的情况下把页面做出来。
其次,你可以把html、css和javascript分成三个阶段进行学习。
第一阶段:HTML的学习
Html是超文本标记语言,英文全称为HyperText Mark-up Language,这是一个网页的骨架。静态网页还是动态网页,最终返回到浏览器端的都是HTML代码,浏览器将HTML代码解释渲染后呈现给用户。
当然,学习html过程是比较枯燥乏味的,所以你需要更有效的学习策略。依w3cschool看来,你可以借助Dreamweaver的“拆分”视图辅助学习。在“设计”视图中看效果,在“代码”视图中学本质,将各种视图的优势发挥到极致,想必会比单纯记忆HTML标签和属性有趣、有用的多吧?
第二阶段:CSS的学习
CSS是英文Cascading Style Sheets的缩写,叫做层叠样式表,是能够真正做到网页表现与内容分离的一种样式设计语言。
学习css建议可以看相关的一些书籍,如《CSS权威指南》(很详细、很经典!)、《CSS揭秘》 《精通CSS:高级Web标准解决方案》,博客和专栏等也可以浏览。
第三阶段:JavaScript的学习
JavaScript是一种在客户端广泛使用的脚步语言,在JavaScript当中为我们提供了一些内置函数、对象和DOM操作,进而实现客户端的特效、验证、交互等。
建议可以看《javascript语言精粹》,js是一门很混乱的语言,这本书能够帮助你区分哪些是语言的精华,哪些是糟粕。如果是精华部分,我们在后续进阶部分可以深入研究,而如果是糟粕部分,那么只要大概看懂别人写的渣代码就可以,自己还是不要尝试为妙。
通过这三个阶段的学习,我们就可以往更高级的web前端工程师进阶了!
这里给你推荐5个网站供你学习

博客园
一个面向开发者的知识分享社区,一个IT技术人员想为IT技术人员们提供一个纯净的技术交流空间,博客园很长时间只有一个不能再简单的博客,近四年,博客园仅靠一个人几年工作的积蓄在维持。
芯晴素材网-网页特效代码
是一个集各种网页素材以及网页源码为一体的面向开发人员的一个网页素材网站,如果你想要学习前端页面开发,这里,将是一个很好的起点。
jquery中文网
前端所能涉及领域的干货文章,包括:Jquery、脚本编程、数据库、服务器技术、操作系统、建站教程。
菜鸟教程
网站HTML、CSS、Javascript、PHP、C、Python等基础编程教程,同一个知识点有多篇不同角度的文章可供参考学习,资源免费,会实时更新站内文章。
jquery插件库
各种前端程序员能用到的插件,喜欢研究新东西的自学者可以在这个网站里挖掘各种小插件。
以上的回答希望对你有所帮助

⑷ 作为前端开发招进公司,两个月了没接触什么开发工作,公司说是招来储备

一般应聘都是相互选择的过程,不只是公司选择你,你也可以选择公司。
当你通过公司的选择后,你就可以问清楚当前所开发的项目及你所处的岗位、职责等,如果一开始就没讲清楚,那只能怨你自己,如果一开始说明了,而现在却没给到相同的待遇,你就可以反映,不行就跳槽吧,就算你是一匹千里马,也要有好的伯乐!

⑸ 2018年3月8日在网上投的简历,到今天,网上投了很多,一点消息都没有,工作年限2.5年,应聘we

我也在西安,我销售工作,大都是3000到4000底薪,要的公司倒是不少,不过有的是人海战术,30岁的我已经搞不了扫大街的活了,正在找个伯乐收了我吧 来自职Q用户:贺先生
我跟你一样前端的,现在在西安。工作年限1年,投的简历没人看,我都开始怀疑人生了。考虑要不要换行。 来自职Q用户:王女士

⑹ 有哪个网站可以自学web前端

我也在W3Cschool学过HTML,总感觉缺了点什么,然后就去报了培训班,跟老师说我要学用HTML做出好看的EDM设计,于是老师就让我照着EDM案例模仿学习,很快我就拿到了网页设计师的认证,卖给客户$100一个,很快就赚回了培训费。这算不算最早期的知识付费,还赚了?

学习需要动力,总是停留在理论层面是没有价值的,所谓的实操也不是一场考试认证,而是做出商业化项目作品,看客户是否愿意为你付费?正好有一个机会,让你做属于自己的3D可视化项目,这里了解一下什么是3D可视化?就是带有基础数据的3D效果图,根据需求不同进行更多效果开发,天猫双十一倒数大屏也算一种!

⑺ web前端看哪些书籍好,前端开发书籍大全

1、HTML/HTML5基础:

《HTML5秘籍》
2、CSS
推荐书籍:
1、《图灵程序设计丛书:HTML5与CSS3设计模式》
2、《Web开发技术丛书:深入理解Bootstrap》
3、《高流量网站CSS开发技术》
4、《CSS设计彻底研究》 这个一定要
5、《Web开发技术丛书:深入理解Bootstrap》
6、可以找一些专门讲SASS的书,但是我没找到
7、《CSS权威指南(第3版)》
3、深入学习JS
推荐书籍:
1、《单页Web应用:JavaScript从前端到后端 》
2、《Web 2.0界面设计模式》
3、《响应式Web设计:HTML5和CSS3实战》
5、工具
学会使用grunt进行JS、CSS、HTML 压缩,特别是模块化js开发时候的压缩
会用PS进行切图、保存icon
入手sublime、webstorm
学会使用chrome调试面板,特别是:console、network、profile、element
进阶:
4、性能
推荐书籍:
1、《Web性能权威指南》
2、雅虎网站页面性能优化的34条黄金守则
5、HTTP及TCP协议族
推荐书籍:
1、《HTTP权威指南》
2、《TCP/IP详解》
3、《图解TCP/IP(第5版)》
请使用手机"扫一扫"x

⑻ 可以通过什么途径了解前端研发的最新资讯

我觉得,前端的技术动态主要有以下几个方向:

1、各种 tips,前端的思考、总结与观察,新技术的介绍和技术经验(多类似网站上的专栏,或者是会议上的一个 talk)

2、新玩具的教程,新项目的介绍(最好有 Github 链接)

3、新标准的发布与制定动态,各大浏览器团队发布动态

4、知名开发者/团队博客,或者一些零散的优秀博文



国外有很多很好的资讯网站,

前提, 英语要好!如果英语不好也没关系,现在很多浏览器都带翻译功能。

先说说国外

JS-头条-伯乐在线 :更新速度很一般,质量层次不齐,但不影响伯乐是盛产好的翻译文章的事实。

最新最热-极客头条:时间多的就看看这里吧。

Hacker News : HN很多人都清楚,基本上你的story在上面站几个小时,就可以陆续帮你带来上万流量。但是由于上面各种信息都有,如果只是前端资讯的话,你就得认真分辨了。 好在用户活跃度极高,可以帮你甄别出信息量大到爆炸的资讯。

这些信息来源质量很多是参差不齐的,不过看多了一般就会有辨别能力了。

不管是什么东西最好都抱着批判性的思维去看,不要说什么就信什么,多一些思考和质疑,被坑的几率就会低很多。



⑼ Web前端开发比较好的技术类资源网站有哪些

github 程序员的天堂

W3CPlus | css3教程-css3实例-css3动画

W3CPLUS是一个前端爱好者的家园,W3CPLUS努力打造最优秀的web 前端学习的站点。W3CPLUS力求原创,以一起学习,一起进步,共同分享为原则。W3CPLUS站提供了有关于css,css3,html,html5,jQuery,手机移动端的技术文档、DEMO、资源,与前端爱好者一起共勉。
W3Help - W3help是由国内多家关注Web标准的公司、团体、标准组织,及科研单位等共同创立的Web标准推广网站。我们创办该网站的目的是为了促进Web标准技术在国内业界的应用和推广,提供跨浏览器开发资源,推动国内Web环境与国际标准的接轨,最终实现国内Web的标准化。我们真诚欢迎国内业界同仁一起加入到推广Web标准的事业中来。
Can I use... Support tables for HTML5, CSS3, etc 查看主流浏览器对css、css3等兼容性,很强大。

奇舞周刊 领略前端技术 阅读奇舞周刊。收集每周前端精华文章,集结成册,每周五发送给您
码农周刊 码农周刊是一份专为程序员打造的IT技术周刊。我们会为你精选一周IT技术干货,每周三发送,完全免费。