学习前端,当然是和浏览器打交道打的最深了,可以看看前端发展的历史,最早期的网页,是纯静态的网页,是1994年网景推出了第一版Navigator作为标志,纯静态网页是个什么概念呢?作为一个90后的青年,相信大多数的人都和我一样,在那个年代的时候家里可能都没有计算机,而我们在真正开始了解计算机内部原理的时候,相信已经过了十多年了吧,这十多年间技术肯定是突飞猛进,而我们也在为我们的学业奋斗,初中到高中,我们对计算机的理解我相信绝大多数人都只是理解一些皮毛的东西(除了特别感兴趣的同学),我们现在也只是在学习技术最前沿的东西,因为我们知道我们要靠这个养家,找工作,但当我们回过头来看看前端发展的过程,会发现还是很有趣的哈哈,说到纯静态页面,我觉得就是拿来帮助我们阅读一些文档,就相当于换个方式看书,在电脑上看文字信息,你想象一下,你输入一个url,等了很久,页面渲染成功了,这时候你需要登陆,你输入用户名密码并提交,然后唰的一下页面变白,什么东西都没了,过了很久,页面重新加载,并返回一个样式和以前一样的页面,但是你发现页面上多出来6个红色大字:您的密码错误!,你的心态肯定已经崩了,不过随着技术的发展,ajax的诞生,这标志着前端技术的一次飞跃,实现了异步加载,这意味着你输入用户名密码后,马上就会显示出您的密码错误。后来node的诞生意味着你可以用js写一个后台了,这标志着前端开始走向全栈。
个人觉得前端着重点在于三个:网站性能、开发效率、安全
在谈上面三个点之前先了解一下浏览器: 浏览器大家都不陌生吧,其主要的功能就是向服务器端发送请求,在浏览器窗口展示想要访问的网络资源(html文档、img等等资源)
浏览器解释和展示html文件的方式是w3c规定的,w3c即万维网联盟,这个联盟是现在国际上最权威的标准制定机构,意思就是w3c制定并维护html和css的规范,这些规范告诉浏览器如何解释并显示html文件。
浏览器的组件:1.用户界面
2.浏览器引擎
3.渲染引擎(浏览器核心、也叫浏览器内核)
4.网络
5.用户界面后端
6.js解释器
7.内数据库
我着重写下我对渲染引擎的一些浅淡的理解:
渲染引擎:在浏览器窗口显示所请求的内容,通过网络层获取请求文档的内容,得到内容后便开始了他的表演
我们先输入我们的url,比如我想访问百度,我输入www.baidu.com,接下来就是发起请求,dns解析,解析这个域名,建立网络连接,服务器相应请求,返回数据
最后便是渲染界面,我们便看到我们现在百度的样子。
渲染的过程其实就是先解析得到的html文件,将里面的标签转化为dom节点,形成一个节点树,同时解析css,也就是样式(包括你的内联和外联样式),生成css规则树,
这两棵树一个是你的内容,一个是内容的样式(包括布局,颜色,样式),最后整合到一起形成渲染树,渲染树便是最后我们看到的样子。
如果还要再往下钻的话,就要涉及到编译原理了,这里暂时不写往下钻的内容了。
再来谈三个点:性能优化、开发效率、安全。
性能优化:就是提高页面的加载速度,你如果进去一个页面,然后一个圆圈一直转啊转,转了5分钟后,内容展示出来了,我相信可能1分钟后你就已经关闭这个网页并骂道:垃圾!
我之前写过公司的官网,是一个相应式的网页,我引了大概5个js文件,自己写了3个原生js文件,一共8个js文件,css则是更多了,图片一共20多张,其中三张首页轮播图选的高清图片
一个图3兆,里面的图都没有压缩过,js和css也没有压缩,js里面还有很多重复的脚本,这是我的一个亲身经历,我写了一周,完成后我把我网页挂到我们这边服务器上,我现在还记得,我和那个后台就一直站在那等网页加载,他过一会儿看我一下,我自己也是尴尬的一匹,大概4分钟后,加载出来了,呵呵我一看我文件夹,53.2M,哈哈哈哈。
性能优化主要有:1.cdn加速,举个例子,如果全中国就是一个车票购买的站点,在新疆,你每次买票都要坐车到新疆然后再回来,现在在每个市区都一个分布的车票站点,你只用在你们市区就能买到票,要你选你怎么选?
2 .减少dns查询:就是在你网页上少去请求其他的域名
3.减少http请求:图片合并,js合并和css合并,js分别放在四个文件下面,相当于需要4次http请求,放在一个文件下,便只要一次http请求,这个道理都懂把
4.css在最上面引入,js在最下面引入,因为渲染是从上向下的,如果你一个js文件稍微有点大,那页面便会先加载这个js文件再渲染,会造成一个阻塞
5.移除重复的文本 压缩文件,服务器对文件压缩,浏览器拿到压缩文件再解压,这也是一个很好的办法,其余还有很多的办法我不一一列举了
安全方面:https协议,这是经过ssl加密的http协议,你可以把它理解成一把钥匙,对你的信息进行加密。ssl本身也是一个协议,是一个安全协议
效率方面:现在前端的各种框架和库,以及工具,我那天光看工具都有80个,吓我一跳,其实都是为了效率考虑的话,为了更简洁,更方便,更简洁更方便的同时效率也增加了
其实这么多的框架和工具,我觉得只用掌握一个你觉得好的就可以了,比如我就喜欢用vue,我react用的很少,数据库我喜欢mongodb,服务器的话我喜欢node.js写,还有很多比如less、sass、stylus,css预编译器,webpack包管理工具,git版本管理工具,gulp自动化构建工具,其实这一套学下来我觉得就差不多了,主要还是看个人的喜欢和习惯把。本文只是我的一些个人看法,有很多不足。