iframe引入的网站不能全屏宽度有滚动条_程序猿进阶不能错过的最全前端性能优化秘籍(一)!...

news/2024/5/20 14:52:35/文章来源:https://blog.csdn.net/weixin_28890941/article/details/112089604

很多人通常在完成了产品之后才会去考虑性能。把与性能相关的事情拖到项目的最后来做,所做的也不过是对服务器上的config文件进行一些微调、串联、优化以及部分特别小的调整。而现在,技术已经有了翻天覆地的变化。一个项目的性能是非常重要的,除了要在技术层面上注意,更要在项目的设计之初就开始考虑,这样才可以使性能的各种隐形需求完美的整合到项目中,随着项目一起推进。

在性能方面,前端的优化是大家很容易忽视却又十分重要的一点。

前端是庞大的,包括 HTML、 CSS、 Javascript、Image 、Flash 等等各种各样的资源。前端优化是复杂的,针对方方面面的资源都有不同的方式。那么,前端优化的目的是什么 ?

▪ 从用户角度而言,优化能够让页面加载得更快、对用户的操作响应得更及时,能够给用户提供更为友好的体验。
▪ 从服务商角度而言,优化能够减少页面请求数、或者减小请求所占带宽,能够节省可观的资源。

前端优化的途径有很多,按粒度大致可以分为三类:

第一类是页面级别的优化,例如 HTTP请求数、脚本的无阻塞加载、内联脚本的位置优化等 ;

第二类是服务器端优化,如:添加Expires 或Cache-Control报文头等;

第三类则是代码级别的优化,例如 Javascript 中的DOM 操作优化、CSS选择符优化、图片优化以及 HTML结构优化等等。

首先,我把雅虎14条优化原则,《高性能网站建设指南》以及《高性能网站建设进阶指南》中提到的优化点做一次梳理,按照优化方向分类,可以得到这样一张表格:

a95937c7ad939be4beabc5f5ea2707d5.png

【页面级优化】

一、减少 HTTP请求数
80%的响应时间花在下载网页内容(images, stylesheets, javascripts, scripts, flash等)。减少请求次数是缩短响应时间的关键!可以通过简化页面设计来减少请求次数,但页面内容较多可以采用以下技巧。


1)捆绑文件
现在有很多现成的库可以帮你将多个脚本文件捆绑成一个文件,将多个样式表文件捆绑成一个文件,以此来减少文件的下载次数。


2)CSS Sprites
就是把多个图片拼成一副图片,然后通过CSS来控制在什么地方具体显示这整张图片的什么位置。
咱们来看一个真实的应用案例,如图1:

b2a444dcb78f85060e5b7684f0793cee.png

从图1可以看到这个应用的所有css和js都没有没有合并压缩,我算了一下,总共引入了50个css和js,咱们再开看看图2:

e8f455fbffb233490d8a95d02e4e1b8a.png

685c6a8af01dcdf08024ba57a4b0dda6.png

从图2可以看出,一个页面加载最少要4秒,每个css资源http请求就用了两百多毫秒,50个资源就占了一秒多。如果把所有js和css分别合并压缩成一个文件,页面的加载速度就会提高很多。


现在压缩合并js和css的工具很多,但是考虑到现在好多项目都是maven工程,所以推荐大家使用雅虎的yuicompressor工具进行压缩合并,还可以打出API文档(jresui的API文档就是用这个来打的), yuicompressor除了支持maven方式,也支持后台java代码方式进行合并压缩,具体配置如下:

▲将外部脚本置底,将CSS放在head中
浏览器是可以并发请求的,这一特点使得其能够更快的加载资源,然而外链脚本在加载时却会阻塞其他资源。如果将脚本放在比较靠前的位置,则会影响整个页面的加载速度从而影响用户体验。解决这一问题的方法有很多,而最简单可依赖的方法就是将脚本尽可能的往后挪,减少对并发下载的影响。


如果将 CSS放在其他地方比如 BODY中,则浏览器有可能还未下载和解析到 CSS就已经开始渲染页面了,这就导致页面由无 CSS状态跳转到 CSS状态,用户体验比较糟糕。除此之外,有些浏览器会在 CSS下载完成后才开始渲染页面,如果 CSS放在靠下的位置则会导致浏览器将渲染时间推迟。

二、静态资源缓存
我们知道,缓存对于前端性能的优化是十分重要的,在正式发布系统的时候,对于那些不经常变动的静态资源比如各种JS、CSS文件、背景图片等等我们会设置一个比较大的缓存过期时间(max-age),当用户再次访问这个页面的时候就可以直接利用缓存而不是重新从服务器获取,这样不仅可以减轻服务端的压力,还可以节约网络传输的流量,同时用户体验也更好(用户打开页面更快了)。


一般的公司对于静态资源以及缓存的处理方式无非就这么几种:
1、 在静态资源后面加一个版本号 v=1.111

17b848dd31e7ac4606b21da51cd97484.png

2 、 为了准确的确定文件是否修改,将后面的版本号修改为文件摘要(主要根据文件内容生成的一个值)

9cf3350bde13ef109757102bc7e5477a.png

以上两种处理方式,都会存在一些问题。

第一种方式,需要维护版本号,如果在一个文件中,存在多个资源,那么没有被修改过的资源文件也会被修改版本号,导致不必要的资源加载。

第二种方式,可以精确的发现哪一个文件被修改过。从而要求客户端进行重新加载。但是同样会存在一些问题。


如果先发 html文件:
那么会导致重新加载资源,但一样还是无法访问到最新的特性。(毕竟资源文件还没有真正的更新。),如是Html页面的结构有更新,但加载了旧的资源,很有可能导致页面结构的错乱。并且会缓存资源,直到资源过期,否则除非强制刷新,会一直是错误页面。(这里要注意到,由于第一次加载了旧的资源,版本号又是新的版本号,所以即使在这之后上了资源,这里依旧会读取旧的资源。


如果先发资源文件:
如果之前访问过页面,那就会有保存有本地缓存,那么由于访问的还是缓存文件,不会出现问题。但如果是新用户,那么就会访问到新的资源文件,很有可能导致页面错乱。而等到页面html也发布之后,页面又恢复了正常。
所以还是建议大家通过nginx来配置静态资源缓存过期时间来处理,大概配置如下:
location ~ .*.(js|css)$ {
expires 30d;
}

三、异步执行 (inline)内部脚本
inline脚本对性能的影响与外部脚本相比,是有过之而无不及。首先,与外部脚本一样, inline脚本在执行的时候一样会阻塞并发请求,除此之外,由于浏览器在页面处理方面是单线程的,当 inline脚本在页面渲染之前执行时,页面的渲染工作则会被推迟。简而言之, inline脚本在执行的时候,页面处于空白状态。鉴于以上两点原因,建议将执行时间较长的 inline脚本异步执行,异步的方式有很多种,例如使用 script元素的defer 属性(存在兼容性问题和其他一些问题,例如不能使用 document.write)、使用setTimeout ,此外,在HTML5中引入了 Web Workers的机制,恰恰可以解决此类问题。

四、(Lazy Load)异步加载 Javascript
随着 Javascript框架的流行,越来越多的站点也使用起了框架。不过,一个框架往往包括了很多的功能实现,这些功能并不是每一个页面都需要的,如果下载了不需要的脚本则算得上是一种资源浪费 -既浪费了带宽又浪费了执行花费的时间。目前的做法大概有两种,一种是为那些流量特别大的页面专门定制一个专用的 mini版框架,另一种则是 Lazy Load。YUI 则使用了第二种方式,在 YUI的实现中,最初只加载核心模块,其他模块可以等到需要使用的时候才加载。

五、异步请求 Callback
异步请求 Callback(就是将一些行为样式提取出来,慢慢的加载信息的内容)在某些页面中可能存在这样一种需求,需要使用 script标签来异步的请求数据。类似:

8efc455dd85c09812df9185e099848fe.png

像以上这种方式直接在页面上写 <script>对页面的性能也是有影响的,即增加了页面首次加载的负担,推迟了 DOMLoaded和window.onload 事件的触发时机。如果时效性允许的话,可以考虑在 DOMLoaded事件触发的时候加载,或者使用 setTimeout方式来灵活的控制加载的时机。

六、减少不必要的 HTTP跳转
对于以目录形式访问的 HTTP链接,很多人都会忽略链接最后是否带 ’/',假如你的服务器对此是区别对待的话,那么你也需要注意,这其中很可能隐藏了 301跳转,增加了多余请求。
避免重复的资源请求
这种情况主要是由于疏忽或页面由多个模块拼接而成,然后每个模块中请求了同样的资源时,会导致资源的重复请求七、减少cookie传输
一方面,cookie包含在每次请求和响应中,太大的cookie会严重影响数据传输,因此哪些数据需要写入cookie需要慎重考虑,尽量减少cookie中传输的数据量。另一方面,对于某些静态资源的访问,如CSS、script等,发送cookie没有意义,可以考虑静态资源使用独立域名访问,避免请求静态资源时发送cookie,减少cookie传输次数。

八、减少iframe数量
使用iframe要注意理解iframe的优缺点:
▲优点
▪ 可以用来加载速度较慢的内容,例如广告。
▪ 安全沙箱保护。浏览器会对iframe中的内容进行安全控制。
▪ 脚本可以并行下载


▲缺点
▪ 即使iframe内容为空也消耗加载时间
▪ 会阻止页面加载

本章节我们用页面级来介绍如何进行性能优化,下个章节会从服务器和代码级来详细介绍前端优化的实践和案例。请持续关注!

推荐阅读:

终极扫盲!网站必备的HTTPS协议和SSL证书,你真的了解透彻吗? - 信息安全 - 恒生研究院​rdc.hundsun.com前端性能提升秘笈! - 开发专栏 - 恒生研究院​rdc.hundsun.com
4e7750595531c82cec772a1e38fd1178.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_846780.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux网络方面命令大全,网络操作命令 - Linux常用命令大全_Linux教程_Linux公社-Linux系统门户网站...

网络操作命令命令功能命令功能ftp传送文件telnet远端登陆bye结束连线并结束程序rlogin远端登入ping检测主机netstat显示网络状态8.1 ftp命令ftp命令用来传输文件&#xff0c;非常重要。如果在网络上看到一个很重要的文件&#xff0c;就可以用这个命令把那个文件传到自己的机器上…

如何将静态网站挂在github上

github.page是一个免费的静态托管服务&#xff0c;我们可以将静态网站托管在github上。具体的方法如下&#xff1a; 在github中新建一个username.github.io的公开仓库。&#xff08;username必须和你的github账户名完全一致。&#xff09;如果有静态网站的制作经验&#xff0c…

利用Lucene.net搭建站内搜索(4)---数据检索

前面的文章&#xff0c;我们已经对要检索的数据创建了索引&#xff0c;现在要做的就是为用户提供全文搜索的功能。通过Lucene我们还可以简单而高效地对搜索结果进行访问。此文和大家简单的说说利用Lucene.net进行数据的搜索。当我们查询Lucene的一个索引时&#xff0c;Lucene会…

50佳精美的单页网站设计作品欣赏(上篇)

单页网站是指只有一个页面的网站&#xff0c;这种形式的网站曾经非常流行&#xff0c;现在依然有很多人喜欢。不过&#xff0c;并不是每个网站都适合做成单页&#xff0c;一般都是内容比较少而且将来内容也不怎么增加的情况才适合这样做。如果你打算做一个这样的网站&#xff0…

Web 应用程序项目与网站项目比较分析

在 Visual Studio 中&#xff0c;我们可以创建“Web 应用程序项目”或“网站项目”。每种项目类型各有优缺点&#xff0c;所以我们要选择可以满足需要的最佳项目类型&#xff0c;应了解各项目类型之间的差异。今天将深入的学习这两种项目之间的异同。 项目文件结构 Web 应用…

旅游类建站要求

旅游建站要求&#xff0c; 第一大类&#xff1a;系统的建设&#xff0c;竟然你是技术员&#xff0c;我就不多说 1、系统采用松散构架&#xff0c;方便后期处理&#xff0c;管理员可自动修改、调整模版的设计或者模版中的图片文字等 2、后期修改模版网站要便于操作&#xff0c;…

php修改根目录,phpStudy如何修改端口或WWW目录(网站根目录)

方法1&#xff1a;phpStudy修改端口或WWW目录(网站根目录)非常简单&#xff1a;点击『其他选项菜单』-『phpStudy设置』-『端口常规设置』。打开Apache的配置文件httpd-conf文件&#xff1a;打开phpstudy界面 ->点击“其他选项菜单” -> 点击“打开配置文件” -> …

某网站安全检测之数据库手工注入

某网站安全检测之数据库手工注入 一、引子 长夜慢慢&#xff0c;无心睡眠…… 无意中翻到几年前听的一首名为《祖先的阴影》的摇滚&#xff0c;这么长久的历史&#xff0c;混合着许多的罪恶与功绩&#xff1b;这么“灿烂的文化”&#xff0c;夹杂着太多的愚昧与文明。美…

网站检测工具

2019独角兽企业重金招聘Python工程师标准>>> 15个在线网站检测工具 1. HTML Validator validator.w3.org/ 网页结构检测工具&#xff0c;支持HTML, XHTML, SMIL, MathML……. 2. CSS Validator jigsaw.w3.org/css-validator/ CSS验证。 3. Links Validator …

java写代码难吗_为什么这么多Java开发者会觉得用Java写网站很难?

原标题&#xff1a;为什么这么多Java开发者会觉得用Java写网站很难&#xff1f;用Java写个网站&#xff1f;这对于不少初学者来说&#xff0c;感觉难于上青天&#xff0c;许多的工作要做&#xff0c;许多知识没掌握......感觉所有东西都无从下手&#xff0c;是不是&#xff1f;…

关于建站和域名的杂谈

来谈谈关于建站的事&#xff0c;网上的教程很多&#xff0c;而且也都很详细&#xff0c;本人也是通过网上别人分享的经验一步一步走过来的&#xff0c;所以本着开源的思想&#xff0c;分享我建站以来遇到的各种问题&#xff08;本来不想写的&#xff0c;因为双休&#xff0c;想…

nodejs 使用express开发获取其他网站引用本站点js文件的参数

nodejs进行站点的开发其性能是很好的&#xff0c;在js 大行其道的天下&#xff0c;使用js基本上可以干好多只要我们能想到的东西&#xff0c;我们可以使用js文件进行用户验证等等。 这次我们就使用express 进行获取其他站点引用我们js 文件的处理&#xff08;其中js文件是带参数…

最好最牛的网站

2019独角兽企业重金招聘Python工程师标准>>> 1&#xff0c; 煎蛋网http://jandan.net/ 各种奇怪资讯&#xff0c;让你看到不一样的新闻    2&#xff0c;几分钟 http://www.jifenzhong.com/ 好看的生活百科。“几分钟”用视频帮助您搞定所感兴趣的事情。 4&a…

【Machine Learning in Action --2】K-近邻算法改进约会网站的配对效果

摘自&#xff1a;《机器学习实战》&#xff0c;用python编写的&#xff08;需要matplotlib和numpy库&#xff09; 海伦一直使用在线约会网站寻找合适自己的约会对象。尽管约会网站会推荐不同的人选&#xff0c;但她没有从中找到喜欢的人。经过一番总结&#xff0c;她发现曾交往…

微信每日早安推送,快来给你女友做爱心提醒吧,自定义推送名称,企业号通知非订阅号测试号,后台python,精简无第三方网站注册、无第三方接口,无基础快速上不了手

每日定时推送给女友&#xff0c;微信消息推送后&#xff0c;锁屏可提醒&#xff0c;聊天界面可顶置&#xff0c;可自定义聊天框名称&#xff0c;聊天头像可修改&#xff0c;内容可增加图片~每日推送python源码自取 手把手教你微信每日推送早安&#xff0c;目前为止效果最好版本…

seo后缀html的影响,网站修改css影响seo吗?

改动不大的话&#xff0c;不会影响&#xff1b;慢慢改&#xff0c;别一下子改动太大了&#xff0c;大幅度的修改。CSS样式在SEO中最重要的作用&#xff0c;就是平衡链接在内容页面与HTML的展示位置&#xff0c;它严重影响蜘蛛抓取的频率&#xff0c;以及传递的权重。css对seo影…

运维网站用户系统的那些风雨

这篇文章要记录的是南工在线的用户系统上线过程中经历过的风风雨雨&#xff0c;在这个工大几乎人尽皆知的网站的背后有深藏功与名的Mars工作室&#xff0c;而我现在是Mars的管理人。 本网站仅支持内网访问这样一个网站&#xff0c;经历过几代人的努力&#xff0c;多次的重构&am…

python+django环境搭建一个简易的hello world网站

pythondjango环境搭建一个简易的hello world网站 实验环境&#xff1a;python2.7django1.11.27 打开pycharm&#xff0c;新建项目&#xff0c;选择django 然后pycharm会自动下载与django相关的模块&#xff0c;等待即可。 在pycharm下面的terminal中&#xff0c;新建一个项…

windows系统下(win10),使用IIS搭建自己的专属网站

windows系统下&#xff08;win10&#xff09;&#xff0c;使用IIS搭建自己的专属网站 IIS全名是&#xff1a;Internet Information Services&#xff0c;是指互联网信息服务。它是由微软公司提供的基于运行Microsoft Windows的互联网基本服务。 IIS是一种Web&#xff08;网页…

python调用sqlmapapi实现批量扫描网站

python调用sqlmapapi实现批量扫描网站 1、介绍 众所周知&#xff0c;sqlmap是一个非常强大的注入扫描工具。利用它可以自动化检测和利用SQL注入缺陷以达到接管控制网站后台数据库的目的。 但是再强大的工具总会存在一些缺陷的地方——比如每进行一个扫描任务&#xff0c;都需…