优化网站设计(十二):删除重复脚本

news/2024/5/20 6:03:07/文章来源:https://blog.csdn.net/weixin_30294709/article/details/96326342

前言

网站设计的优化是一个很大的话题,有一些通用的原则,也有针对不同开发平台的一些建议。这方面的研究一直没有停止过,我在不同的场合也分享过这样的话题。

作为通用的原则,雅虎的工程师团队曾经给出过35个最佳实践。这个列表请参考  Best Practices for Speeding Up Your Web Site http://developer.yahoo.com/performance/rules.html,同时,他们还发布了一个相应的测试工具Yslowhttp://developer.yahoo.com/yslow/

我强烈推荐所有的网站开发人员都应该学习这些最佳实践,并结合自己的实际项目情况进行应用。 接下来的一段时间,我将结合ASP.NET这个开发平台,针对这些原则,通过一个系列文章的形式,做些讲解和演绎,以帮助大家更好地理解这些原则,并且更好地使用他们。

准备工作

为了跟随我进行后续的学习,你需要准备如下的开发环境和工具

  1. Google Chrome 或者firefox ,并且安装 Yslow这个扩展组件.请注意,这个组件是雅虎提供的,但目前没有针对IE的版本。
    1. https://chrome.google.com/webstore/detail/yslow/ninejjcohidippngpapiilnmkgllmakh
    2. https://addons.mozilla.org/en-US/firefox/addon/yslow/
    3. 你应该对这些浏览器的开发人员工具有所了解,你可以通过按下F12键调出这个工具。
  2. Visaul Studio 2010 SP1 或更高版本,推荐使用Visual Studio 2012
    1. http://www.microsoft.com/visualstudio/eng/downloads
  3. 你需要对ASP.NET的开发基本流程和核心技术有相当的了解,本系列文章很难对基础知识做普及。

本文要讨论的话题

这一篇我和大家讨论的是第十二条原则:Remove Duplicate Scripts (删除重复脚本)。

这条原则的意思是说,不要在一个页面中,重复引用同一个脚本文件。乍一看起来,似乎没有单独拿出来谈的必要:谁会这么做呢?你会吗?我会吗?

当然,你最好没有这么做,而且希望你没有这么做并不完全是出于一个好的习惯,而是因为你真的了解了重复引用同一个脚本文件所带来的问题。

重复引用一个脚本可能存在的问题

我们可以用一个简单的例子来看看,如果你在一个页面中重复引用同一个脚本文件,可能存在的问题:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1.Default" %><!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server"><title></title></head>
<body><form id="form1" runat="server"><div><script>var count = 0;</script>            <script src="JavaScript1.js"></script><script src="JavaScript1.js"></script><script>document.write("<h1>访问计数:" + count + "</h1>");</script></div></form>
</body>
</html>

 

页面中,我们首先定义了一个全局的变量(count),然后重复引用了同一个脚本文件(javascript1.js),这个脚本文件内的脚本其实很简单

count++;

这个页面如果运行起来的话,大家可以想象一下count最后的值会是多少呢?对javascript比较熟悉的朋友一定猜出来了,由于有两次脚本引用,所以,count的最终值应该是2。如下图所示

image

所以后果是显而易见的:我们可能认为,如果是同一个文件,引用多次的话,浏览器会不会聪明地只下载一次,并且也只执行一次呢?

从上图中,我们几乎可以觉得这就是对的,因为看起来并没有两个脚本请求,不是吗?

这是一个假象!通过上面的实例,你应该会知道,实际上脚本文件肯定被下载过两次,而且执行过两次,否则为什么count会等于2呢?

如果你重复引用10次,那么毫无意外的,count会等于10。

好吧,我凭什么会犯这么低级的错误呢?你是这样想到吗?

This isn't as unusual as you might think. A review of the ten top U.S. web sites shows that two of them contain a duplicated script. Two main factors increase the odds of a script being duplicated in a single web page: team size and number of scripts

经研究发现,即便是美国排名前10位的网站,都可以犯这个错。你有什么理由说你就一定不会呢?是的,有时候可能不是你一个人的错,在一些较大的团队和较大的项目,尤其是有大量脚本的时候,可能就要特别小心地对这些脚本进行管理了。

 

删除重复脚本及最佳实践

其实要删除重复脚本,最重要的是要对脚本进行有效的管理,并且在编写页面的时候,仔细地进行引用。在ASP.NET中,善于利用一些框架,可以最大可能性地避免这个问题。

ASP.NET 从2.0开始引入了母版页(master page)的技术,利用这个技术,我们可以将一些公用的脚本引用定义在母版页中,而在内容页中引入的脚本相对就少了很多了,既然很少,那么重复添加的概率就大大减小了。

下面有一个简单范例(ASP.NET Web Forms)

<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Site.master.cs" Inherits="WebApplication2.SiteMaster" %><!DOCTYPE html>
<html lang="en">
<head runat="server"><meta charset="utf-8" /><title><%: Page.Title %> - My ASP.NET Application</title><asp:PlaceHolder runat="server">     <%: Scripts.Render("~/bundles/modernizr") %></asp:PlaceHolder>  <webopt:BundleReference runat="server" Path="~/Content/css" /> <link href="~/favicon.ico" rel="shortcut icon" type="image/x-icon" /><meta name="viewport" content="width=device-width" /><asp:ContentPlaceHolder runat="server" ID="HeadContent" />
</head>
<body><form runat="server"><asp:ScriptManager runat="server"><Scripts><%--To learn more about bundling scripts in ScriptManager see http://go.microsoft.com/fwlink/?LinkID=272931&clcid=0x409 --%><%--Framework Scripts--%><asp:ScriptReference Name="MsAjaxBundle" /><asp:ScriptReference Name="jquery" /><asp:ScriptReference Name="jquery.ui.combined" /><asp:ScriptReference Name="WebForms.js" Assembly="System.Web" Path="~/Scripts/WebForms/WebForms.js" /><asp:ScriptReference Name="WebUIValidation.js" Assembly="System.Web" Path="~/Scripts/WebForms/WebUIValidation.js" /><asp:ScriptReference Name="MenuStandards.js" Assembly="System.Web" Path="~/Scripts/WebForms/MenuStandards.js" /><asp:ScriptReference Name="GridView.js" Assembly="System.Web" Path="~/Scripts/WebForms/GridView.js" /><asp:ScriptReference Name="DetailsView.js" Assembly="System.Web" Path="~/Scripts/WebForms/DetailsView.js" /><asp:ScriptReference Name="TreeView.js" Assembly="System.Web" Path="~/Scripts/WebForms/TreeView.js" /><asp:ScriptReference Name="WebParts.js" Assembly="System.Web" Path="~/Scripts/WebForms/WebParts.js" /><asp:ScriptReference Name="Focus.js" Assembly="System.Web" Path="~/Scripts/WebForms/Focus.js" /><asp:ScriptReference Name="WebFormsBundle" /><%--Site Scripts--%></Scripts></asp:ScriptManager><header><div class="content-wrapper"><div class="float-left"><p class="site-title"><a runat="server" href="~/">your logo here</a></p></div><div class="float-right"><section id="login"><asp:LoginView runat="server" ViewStateMode="Disabled"><AnonymousTemplate><ul><li><a id="registerLink" runat="server" href="~/Account/Register">Register</a></li><li><a id="loginLink" runat="server" href="~/Account/Login">Log in</a></li></ul></AnonymousTemplate><LoggedInTemplate><p>Hello, <a runat="server" class="username" href="~/Account/Manage" title="Manage your account"><asp:LoginName runat="server" CssClass="username" /></a>!<asp:LoginStatus runat="server" LogoutAction="Redirect" LogoutText="Log off" LogoutPageUrl="~/" /></p></LoggedInTemplate></asp:LoginView></section><nav><ul id="menu"><li><a runat="server" href="~/">Home</a></li><li><a runat="server" href="~/About">About</a></li><li><a runat="server" href="~/Contact">Contact</a></li></ul></nav></div></div></header><div id="body"><asp:ContentPlaceHolder runat="server" ID="FeaturedContent" /><section class="content-wrapper main-content clear-fix"><asp:ContentPlaceHolder runat="server" ID="MainContent" /></section></div><footer><div class="content-wrapper"><div class="float-left"><p>&copy; <%: DateTime.Now.Year %> - My ASP.NET Application</p></div></div></footer></form>
</body>
</html>

下面还有一个ASP.NET MVC中的示例

<!DOCTYPE html>
<html lang="en"><head><meta charset="utf-8" /><title>@ViewBag.Title - My ASP.NET MVC Application</title><link href="~/favicon.ico" rel="shortcut icon" type="image/x-icon" /><meta name="viewport" content="width=device-width" />@Styles.Render("~/Content/css")@Scripts.Render("~/bundles/modernizr")</head><body><header><div class="content-wrapper"><div class="float-left"><p class="site-title">@Html.ActionLink("your logo here", "Index", "Home")</p></div><div class="float-right"><section id="login">@Html.Partial("_LoginPartial")</section><nav><ul id="menu"><li>@Html.ActionLink("Home", "Index", "Home")</li><li>@Html.ActionLink("About", "About", "Home")</li><li>@Html.ActionLink("Contact", "Contact", "Home")</li></ul></nav></div></div></header><div id="body">@RenderSection("featured", required: false)<section class="content-wrapper main-content clear-fix">@RenderBody()</section></div><footer><div class="content-wrapper"><div class="float-left"><p>&copy; @DateTime.Now.Year - My ASP.NET MVC Application</p></div></div></footer>@Scripts.Render("~/bundles/jquery")@RenderSection("scripts", required: false)</body>
</html>

 

转载于:https://www.cnblogs.com/haiyabtx/p/3622743.html

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

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

相关文章

网站数据库从access升级到sql server 2005

我不知道自己会什么&#xff0c;也不知道自己不会什么&#xff0c;但一段时间苦苦的思索&#xff0c;希望能记录这段时间的探索&#xff0c;以便于以后提高效益。 一、所遇情况环境&#xff1b; 二、初期分析阶段&#xff1b; 三、中期摸索阶段&#xff1b; 四、后期解决阶段&a…

企业网站建设方法论

麦肯锡并不神秘&#xff0c;方法论铸就神奇&#xff01;这是出现在麦肯锡系列丛书封面上非常醒目的一句广告语。博文标题的想法正来源于此&#xff0c;感谢麦肯锡。今天我们要谈论的主角并非麦肯锡&#xff0c;而是方法论&#xff0c;是建设企业网站的方法论。正如标题说言&…

MySQL盈利_个人网站如何盈利

个人网站如何盈利&#xff1f;大多数人第一时间会想到打广告盈利&#xff0c;网站被迫加上一些没有营养或低俗的内容干扰读者阅读&#xff0c;体验十分糟糕&#x1f630;。最近发现有两个个人网站的运营模式很有意思&#xff1a;网站自己不做宣传&#xff0c;如果用户觉得内容优…

seo原创工具_网站seo需要用到哪些工具,seo工具大全

我们在做seo优化的时候&#xff0c;如果有一款合适便捷工具能够辅助到自己&#xff0c;就会事半功倍&#xff0c;对新手来言更是需要这些工具来帮助自己优化自己的网站&#xff0c;小编也准备了相关工具&#xff0c;希望能帮助到大家。seo工具-站长平台首先在seo工作的时候&…

WebMatrixRazor建站系列之WebMatrix介绍

WebMatrix介绍 WebMatrix是微软开发的一个免费的&#xff0c;轻量级Web开发工具。提供了一种简单的方式让我们创建一个站点。它包括IIS Express&#xff08;Web服务器&#xff09;&#xff0c;ASP.NET&#xff08;Web框架&#xff09;&#xff0c;和SQL Server Compact&#xf…

php 怎么添加字体_WP菜鸟建站22:怎样给wordpress主题添加友情连接功能模块?

为了给我们的wordpress网站提升流量&#xff0c;作为站长的我们&#xff0c;往往会通过互换友情链接来方式来为自己的wordpress网站增加外来入口。另外&#xff0c;如果对方的网站对于搜索引擎的权重比较高时&#xff0c;对我们wordpress网站权重会有相应的提升&#xff0c;就好…

网站代码用什么打开_网站打开速度对企业有什么影响?

网站制作一年350元&#xff0c;五站合一&#xff0c;快速建站 &#xff0c;www.sxjcwzjs.com,只需进入网站右上角注册快速建站即可(需要电脑登录注册)&#xff0c;需要联系我吧&#xff01;电话&#xff1a;13752214574&#xff0c;微信号&#xff1a;m1078582894网站打开慢了&…

网站极限优化之php优化

这段时间忙死了&#xff0c;早上一大清早就要起来学计算机英语&#xff0c;听商务英语&#xff0c;前些日子搞数据库优化研究已经有了结果&#xff0c;现在就剩下php优化了&#xff0c;当然了&#xff0c;人各有志&#xff0c;只是发表下个人的看法&#xff0c;大家可以踊跃发表…

设备能力指数cmk计算公式_网站运营数据分析指标及计算公式

做互联网运营的人&#xff0c;不管是网站运营、产品设计或是交互设计等&#xff0c;都需要对网站的一些运营数据做分析&#xff0c;通过数据分析结果做出相应调整&#xff0c;进而达到最优的投资回报。本期&#xff0c;我们给大家整理的是常用的网站运营数据分析指标及计算公式…

js怎么判断点击了哪个li标签的下标_你要知道的企业网站怎么优化?

随着互联网时代的兴起&#xff0c;很多公司都建立了自己的官方网站&#xff0c;但很多公司认为建立官方网站&#xff0c;会有很多用户来到我们的网站&#xff0c;其实这是错误的观点&#xff0c;如果你的公司没有品牌实力如何有人搜索您的网站并点击进入官方网站&#xff1f;建…

php后台html模板_织梦后台一键更新网站、更新文档HTML卡死的解决方法

如果你正在用的是最新版的织梦程序(2018-01-09)&#xff0c;你可能会遇到后台一键更新网站、更新文档HTML卡死的情况&#xff0c;织梦后台一键更新网站、更新文档HTML卡死的解决方法那是因为织梦官方的德得广告服务器挂了&#xff0c;后台生成文档时会加载德得广告库文件与官方…

birt中文手册在线_强烈推荐几个SQL在线刷题的网站

↑ 关注 星标 &#xff0c;后台回复【大礼包】送你Python自学大礼包SQLZOO (⭐⭐) https://sqlzoo.net/上面的网址是一个免费的SQL学习网站——SQLZOO&#xff01;它支持语言&#xff1a;English • 日本語 • 中文(繁体)&#xff0c;不过选择繁体中文后会发现翻译的也一般&a…

搭建 Nginx 静态网站

示例代码&#xff1a;/etc/nginx/nginx.conf user nginx;worker_processes auto;error_log /var/log/nginx/error.log;pid /run/nginx.pid;include /usr/share/nginx/modules/*.conf;events { worker_connections 1024;}http { log_format main $remote_addr - $remote…

插入网站连接_第八组 网站开发

DW简介Adobe Dreamweaver&#xff0c;简称“DW”&#xff0c;中文名称 "梦想编织者"&#xff0c;最初为美国MACROMEDIA公司开发&#xff0c;2005年被Adobe公司收购。DW是集网页制作和管理网站于一身的所见即所得网页代码编辑器。利用对 HTML、CSS、JavaScript等内容的…

网站如何记录访客的个人信息?

大多数网站都会带有留言或者评论功能&#xff0c;那么访客在留言或者评论时肯定要记录访客的个人信息&#xff01;这样访客在下一次访问网站时不需要再次填写个人信息&#xff0c;直接评论就ok啦&#xff01;那么怎么记录访客的个人信息呢&#xff1f; 一、利用cookie来记录访客…

linux下yii框架,YII框架网站开发流程

Yii 是什么Yii 是一个基于组件的高性能 PHP 框架&#xff0c;用于快速开发大型 Web 应用。它使Web开发中的 可复用度最大化&#xff0c;可以显著提高你的Web应用开发速度。Yii 这个名字(读作易(Yee) 或 [ji:])代表 简单(easy), 高效(efficient) 和 可扩展(extensible).安装Yii …

网站服务器怎么启动父路径,windows 2000服务器IIS开启父路径的步骤

WebjxCom提示&#xff1a;Windows 2003 IIS启动父路径.“开启父路径”是在Windows 2003开始有这个概念的&#xff0c;之前的windows xp&#xff0c;windows 2000自带的iis是没有“Windows 2003”这个说法的。Windows 2003自带的IIS6.0安装后默认设置是不开启父路径的。“开启父…

使用jenkins配置.net mvc网站进行持续集成一

最近好久没有更新文章了&#xff0c;因为好久没有写代码了&#xff0c;以至于我不知道同大家分享些什么&#xff0c;刚好&#xff0c;今天突然叫我学习下jenkins每日构建&#xff0c;我就把今天的学习笔记记录下来&#xff0c;这其中很多东西都是公司同事之前调研总结的&#x…

iis没有windows身份验证_从本机IIS中管理 远程服务器 IIS及远程管理IIS网站与功能委派...

有时候&#xff0c;一般情况下&#xff0c;我们对服务器上 IIS 上的管理局限于 使用远程桌面&#xff1b;现在介绍一种&#xff0c;通过 本机 管理管理远程IIS 的方法&#xff01;1. 服务器端设置&#xff1a; 服务器管理器 》增加角色和功能向导》勾选 管理服务 安装。1)如图所…

怎么爬before after之间的内容_方法教程 | 如何避开网站的反爬检测

“ 有些网站的反爬机制是很强的&#xff0c;不仅网络请求中的参数经过 JS 加密&#xff0c;甚至还针对一些常用的爬虫工具&#xff0c;如 Selenium 作了屏蔽。本文教你如何设置 Pyppeteer 来完美地避开这些反爬机制的检测。”【解决方法】方法一&#xff1a;在导入 launch 之前…