【网站性能指南】(四)前端性能-压爆你的文件

news/2024/5/12 5:35:17/文章来源:https://blog.csdn.net/byrsongQQ/article/details/7917477

【概述】

  在这一章,我们会聚焦在前端性能:

  • 外部的Css 和 Javascript
  • Css 和 Javascript 的 迷你化 与 合并
  • 图片的最佳化
  • Css 图片拼合器

 

【外部的CSS和Javascript】

  几乎所有的CSS和Javascript 都应该放在外部文件

  • 减少页面的尺寸
  • 允许重用
  • 允许使其过期 
  • 可读性更高 

 把css 和 js 文件放到外部文件的确可以让页面看的更加清爽,同时减小了页面本身的尺寸。

 在外部的文件可重用性更高,例如你可以在一个css文件中定义整体布局。并且让每个页面的元素都遵从它。

 在上一节中,我们提到了浏览器过期的重要性,所以在外部引用css和js文件也是非常重要的。

 最后是可读性,有超过50%的人遇到过混乱的页面。里边夹杂着html、js、css 甚至还有c#code。这样的代码的可读性和维护性都差到极点了。

【Css和Javascript的迷你化与合并】

  Css 和 javascript 的迷你化与合并是一种减少 httprequest 和传输数据量 的行之有效的方式。

  •   迷你化 
    • 移除白空格、注释和多余的分号等
    • 同样可以看到这样的文件名中包含".min" (如果你经常使用jquery的插件,你会看到很多min文件)
    • 我们看一下jquery官网,开发版本大小是247KB,min版只有32KB。整整压缩了88%。

  • 迷你化的工具合并
      • JSMin
      • Packer
      • YUI Compressor
      • CSS MinMicrosoft Ajax Minifier (特别推荐
    http://ajaxmin.codeplex.com/
    • )
      • javascript 和 css
      • 命令行、dll和build 任务 

    • 合并文件以减少httprequest次数
    • msbuild
  • 策略实践
    • 使用外部文件
    • 迷你化css和js文件
    • 把所有js文件合并成一个文件(jquery、jquery插件等)
    • 合并所有css文件成一个文件
    • 添加一个唯一的版本号到合并的文件中,日后我们可以控制浏览器缓存
    • 避免当我们在运行时迷你化和合并文件时发生的冲突
    • 引用新的合并过的文件 

         1.找到Visual studio Project File(.csporj)

         2.修改一个.cs文件,确保项目文件可以重新编译(如果我们只是修改js和css文件,项目不会重新编译)

         3.使用msbuild Extension Pack(http://msbuildextensionpackcodeplex.com)

         4.通过bin目录下webform程序集得到版本号。

         5.使用Msbuild ajaxmodifier 去迷你化js和css文件。

         6.使用Msbuild 去合并迷你化之后的文件。

         7.注意文件以前的引用顺序。保持以前的顺序。

         8.使用debug symbol vaule去确定是否在release 模式,为新的release build 引用新的合并过的文件。

  •    结果

         主页快了46%

  •    代码:

           为了贴切描述这一过程,一下是proj文件的关键code。为了便于大家理解,我在本章的结尾放了一个完整的代码示例。我们需要安装msbuild 和 它的扩展 ajaxmodifier 

          

复制代码
<!-- To modify your build process, add your task inside one of the targets below and uncomment it. Other similar extension points exist, see Microsoft.Common.targets.--><Import Project="$(MSBuildExtensionsPath)\Microsoft\MicrosoftAjax\ajaxmin.tasks" /><Import Project="$(MSBuildExtensionsPath)\ExtensionPack\4.0\MSBuild.ExtensionPack.tasks" /><Target Name="BeforeBuild"><ItemGroup><GeneratedCSSJS Include="client/combined.*.css" /><GeneratedCSSJS Include="client/combined.*.js" /></ItemGroup><Delete Files="@(GeneratedCSSJS)" /></Target><Target Name="AfterBuild"><!--"Touch" a .cs file to force a rebuild so get a new version number even when only change .css or js files--><Exec Command="ATTRIB -R code/forceRebuild.cs" /><Touch Files="code/forceRebuild.cs" /><Exec Command="ATTRIB +R code/forceRebuild.cs" /><MSBuild.ExtensionPack.Framework.Assembly TaskAction="GetInfo" NetAssembly="$(OutputPath)\MsBuildUsage.dll"><Output TaskParameter="OutputItems" ItemName="Info" /></MSBuild.ExtensionPack.Framework.Assembly><Message Text="Version:%(Info.AssemblyVersion)" Importance="high" /><!--css file that need minimizing--><ItemGroup><CSSMin Include="content\Site.css" /></ItemGroup><!--css file to combine--><ItemGroup><CSSCat Include="content\site.min.css" /></ItemGroup><!--js file that need minimizing--><ItemGroup><JSMin Include="Scripts\jquery-1.5.1.js"/><JSMin Include="Scripts\MicrosoftMvcAjax.js"/></ItemGroup><!--js file to combine--><ItemGroup><JSCat Include="Scripts\jquery-1.5.1.min.js"/><JSCat Include="Scripts\MicrosoftMvcAjax.min.js"/></ItemGroup><!--Actual minimization and combine tasks--><Message Text="minimization and combine js and css files..." Importance="high" /><AjaxMin JsSourceFiles="@(JSMin)" JsSourceExtensionPattern="\.js$" JsTargetExtension=".min.js" CssSourceFiles="@(CssMin)" CssSourceExtensionPattern="\.css$" CssTargetExtension=".min.css" /><Message Text="Concatinating js and css files..." Importance="high" /><ReadLinesFromFile File="%(JSCat.Identity)"><Output TaskParameter="Lines" ItemName="JSLines" /></ReadLinesFromFile><WriteLinesToFile File="client/combined.%(Info.AssemblyVersion).min.js" Lines="@(JSLines)" OverWrite="true" /><ReadLinesFromFile File="%(CSSCat.Identity)"><Output TaskParameter="Lines" ItemName="CSSLines" /></ReadLinesFromFile><WriteLinesToFile File="client/combined.%(Info.AssemblyVersion).min.css" Lines="@(CSSLines)" OverWrite="true" /><!--Include the combined files temporarily in project so publish moves them--><ItemGroup><Content Include="client/combined.%(Info.AssemblyVersion).min.js" /><Content Include="client/combined.%(Info.AssemblyVersion).min.css" /></ItemGroup></Target>
复制代码

 

    看看结果,我的proj里多了2个文件。我们在引用这两个文件时候只需要拼接出版本号即可。

       

 

【图片最佳化】

  我们平时接触到的图片大概分以下几种:

  •    JPEG JPEG 图片以 24 位颜色存储单个光栅图像。JPEG 是与平台无关的格式,支持最高级别的压缩,不过,这种压缩是有损耗的。
  •    PNG  流式网络图形格式(Portable Network Graphic Format,PNG)名称来源于非官方的“PNG’s Not GIF”,其目的是企图替代GIF和TIFF文件格式
  •    GIF  GIF 是用于压缩具有单调颜色和清晰细节的图像(如线状图、徽标或带文字的插图)的标准格式。

   如果我们不能确定用哪种格式的图片,我们需要提供3种不同格式的相同图片,并且比较它们的质量和图片占用空间。

   在这里我主要讲一下JEPG的压缩。我的想法是缩小50%的占用空间,看看它的质量如何?

  【图片优化器】

  •   Jpegtran 用特定的图像格式从图像文件中删除不必要的元数据,无损
  •   PNGcrush PNG优化器
  •   Smushit http://www.smushit.com/ysmush.it/ (同Jpegtran,支持多种格式,雅虎提供)
  •   Paint.Net 按比例压缩

下图是我使用了 PaintNet 和Smushit优化过的图片。原图是右边的,大小32K。PaintNet压缩50%后为左上图。下图是使用Smushit去掉无用的元数据。大小30K。

 

【CSS 图片拼合器】

 

  Css拼合器是一种合并图片的工具。说它是一种,就是有很多工具可以实现这个功能。

  •   它的主要功能是可以把很多小图片合并成一张图片,这样有效减少了httprequest的次数。
  •   使用小图片时,只需要根据位置在那张图片上定位。

  我们可以访问:http://spritegen.website-performance.org/ 去使用它。

  【try it】

  1.    访问 css 拼合器站点。
  2.    把需要拼接的图片打包成zip格式。
  3.    上传
  4.    勾选一些自定义的选项
  5.    生成

    我去人人网主页选择了3张图片,使用压缩工具把它们打包,并且上传。

     

    点击了最下边生成拼合图片之后。可以看到上方多了3行css 规则:

    

.sprite-rrdesk{ background-position: 0 0; width: 75px; height: 75px; } 
.sprite-rrgame{ background-position: 0 -125px; width: 75px; height: 75px; } 
.sprite-rrmusic{ background-position: 0 -250px; width: 75px; height: 75px; } 

 

    让我们看看合并之后的图片:

 

 

   

     在项目中使用的时候我们先引用css,在html里只需要这样就可以啦:

 

<span class = "sprite-rrgame"> <span>

 

        

   msbuild demo的源代码:

   http://files.cnblogs.com/techborther/MsBuildUsage.7z

  【msbuild 参考】  :http://msdn.microsoft.com/zh-cn/library/0k6kkbsd.aspx


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

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

相关文章

unity使用mixamo网站所有动作

//如果模型已经绑定了骨骼可以直接导入网站 //如果会C4D需要看下IMAX插件如何使用的&#xff08;B站有&#xff09;---非常简单&#xff0c;基本就是点点点就好了&#xff0c;真的不难&#xff08;插件可以在魔顿网免费下载&#xff09;。

Texture贴图材质资源网站分享

话不多说直接贴&#xff1a; https://www.textures.com/libraryhttps://www.textures.com/library进入之后可以选择 搜索查找你要的东西&#xff0c;只能英文 免费下载&#xff0c;低清晰度的&#xff0c;512X512&#xff0c;学习使用完全足够 说明&#xff1a;如需商用请购…

大型网站后台架构的Web Server与缓存 (转)

1.1 Web server Web server 用来解析HTTP协议。当web服务器接收到一个HTTP请求时&#xff0c;会返回一个HTTP响应&#xff0c;例如送回一个HTML页面。为了处理一个请求&#xff0c;web服务器可以响应一个静态页面或者图片。进行页面跳转&#xff0c;或者把动态响应的产生委托给…

Java批量检测网站链接是否正常,并生成检测日志文档

Java批量检测网站链接是否正常&#xff0c;并生成检测日志文档 1.Java代码块 &#xff08;生成检测日志文档文档为md格式&#xff0c;最好下载typora或markdown进行查看&#xff0c;也可根据自己所需改成txt文档&#xff09; 文件名&#xff1a;ceshi.java import java.io.B…

加上快捷键,让你的网站酷起来

伟大的程序员都懒。 这话是我从《PHP 与 MySQL 程序设计》中看来的&#xff0c;来自于 Larry Wall 的一句话&#xff1a; Most of you are familiar with the virtues of a programmer. There are three, of course: laziness, impatience, and hubris. 懒的程序员的特征是&…

使用GitLab Pages托管静态网站

文章目录 前言一、GitLab Pages是什么&#xff1f;二、使用步骤1.开通账号&#xff0c;创建Git仓库同步项目2.添加.gitlab-ci.yml文件&#xff0c;开启GitLab Pages3.部署成功之后访问项目 总结 前言 在我们日常的程序员养成过程中&#xff0c;会产生一些产物&#xff0c;自己…

在12306网站上如何可以选择上中下铺

众所周知&#xff0c;在12306官方购票时无法自己选择上中下铺的&#xff0c;那么如何在12306上买到上中下铺呢&#xff0c;相信大家都会感兴趣&#xff0c;这是一个利用12306的一个web代码来实现的&#xff0c;然后结浏览器的web调式功能&#xff0c;如果你是一个web美工&#…

pc网站qq互联登录授权php版

首先看下工具类 <?php /*** QQ互联pc网页授权类*/ namespace App\Lib\QQconnect;use App\Lib\Util\Curl;class QQconnect{const err [0 >成功,100000 > 缺少参数response_type或response_type非法,100001 > 缺少参数client_id,100002 > 缺少参数client…

虚拟机内的homestead环境下的网站项目让局域网内的同事访问

# 登录进虚拟机 $ vagrant ssh # 共享本地域名 $ share apitest.cn如图红框圈住的地址就可以访问了&#xff0c;6666

怎样在织梦dedecms网站上添加漂浮广告

在织梦 dedecms的网站上添加漂浮广告其实很简单&#xff0c;这篇文章主要讲的是在织梦网站首页添加漂浮广告。 我们用本地搭建的织梦默认模板演示。 1、准备一个广告图片 准备一个广告图片&#xff0c;命名为漂浮.gif &#xff0c;设置好图片大小150*150 &#xff0c;之后把图片…

dedecms教程:多款精美分页网站模板pagelist样式

使用dedecms&#xff0c;有时需要自定义分页样式。怎么办呢&#xff1f; 不急&#xff0c;20几款精美分页样式&#xff0c;总有一款你最喜欢。使用很简单&#xff1a; 步骤&#xff1a;三步即可解决 多款精美dede分页样式.zip 1、直接覆盖include/arc.listview.class页 2、把演…

dedecms教程:网站模板自定义表单制作在线订单详细解说

一步首先你要知道自定义表单的后台界面在哪里截图 第二步添加自定义表单 我选择完全公开就是说访客提交的时候他们也是可以看到我们的自定义信息的 数据表 模板根据你的模板自定义即可 我们先look下 下面就是自定义的内容了 我随便举例给大家演示下 首先返回界面 点击红圈来添加…

dedecms教程:织梦做中英文(多语言)网站详解

对于多语言网站&#xff0c;可能许多人都想进行制作&#xff0c;可又不明白其中的道理&#xff1b;因为多语言网站不仅仅只是一个网站站点&#xff0c;具有多个而且是不同语言&#xff1b;它也不是站群&#xff0c;就是一个网站的一部分&#xff01; 首先实现多语言站点提供两种…

[原创]DEDE 织梦建站,仿站(包含5套正版建站软件)

教程包括&#xff1a; 3、dedecms仿站进门教程 本教程适用于&#xff1a; 网易博客安全提醒&#xff1a;系统检测到您当前密码的安全性较低&#xff0c;为了您的账号安全&#xff0c;建议您适时修改密码 立即修改 | 封闭 5、dedecms综合学习资料汇编&#xff1b; 重要提醒&…

简单解释网站是如何进行访问的

今天学习的时候看到一个值得记录的面试题&#xff1a; 一个网站是如何进行访问的 首先输入网址域名&#xff0c;回车&#xff1a; 1.检查本机的C:\Windows\System32\drivers\etc\hosts配置文件里有没有这个网址的域名映射 如果有&#xff0c;则直接返回对应的ip地址&#xf…

Javaweb Listener监听器的简单应用:统计网站在线人数

Listener监听器实现统计网站在线人数 开发环境&#xff1a; IntelliJ IDEA 一、什么是监听器 是指专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象&#xff0c;当被监视的对象发生变化时&#xff0c;立即采取相应的行动。 具体参考下文&#xff1a; J…

SEOER都在为网站的“流量增长优化”而迷茫

SEO优化不得不说现在做SEO的工作是非常困难的&#xff0c;而在这个行业里从业多年的SEO经理们&#xff0c;不仅仅要扛着很大的压力、还要面对下属对自己传经授教的一些期盼&#xff0c;对外更不知道搜索引擎&#xff0c;特别是百度又要干什么来剥削你的流量了&#xff01; 但其…

构建自己的网站(一)——uWSGI+Django实现显示图片点击更新

文章目录 目的说明前提遇到的问题及解决通过ip地址端口也访问不到服务器&#xff1f;域名不可用&#xff1f;域名解析后还是不可用&#xff1f;80端口没开放&#xff1f;本地实现点击切换图片djangohtml图片显示不出来&#xff1f;django服务器实现显示图片创建django项目&…

小程序打开网站小程序

呵呵&#xff0c;昨天晚上&#xff0c;快停电了&#xff0c;打开csdn &#xff0c;打开了好多的网页&#xff0c;可是 快停电&#xff0c;关网了&#xff0c;唉 &#xff01;有好多想看的网页&#xff0c;舍不得 不看&#xff0c;于是把网址 保存到一个txt文件里面&#xff0c;…

怎么使用PHP和MySQL创建个性的网站分页

分页起着重要的作用&#xff0c;在任何Web应用程序&#xff0c;具有足够大的数据被分成页。它不仅外观整洁&#xff0c;但也提高了一个网页的加载时间。所以&#xff0c;分页是很重要的一个改进的用户界面&#xff0c;并节省服务器资源。在本教程中&#xff0c;我会告诉你一个简…