位置: 编程技术 - 正文

优化RequireJS项目的相关技巧总结(怎么优化项目)

编辑:rootadmin

推荐整理分享优化RequireJS项目的相关技巧总结(怎么优化项目),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:项目优化要素,怎么优化项目,优化项目计划,项目优化管理工具,项目优化管理工具,优化elm,优化项目是什么,优化项目流程,内容如对您有帮助,希望把文章链接给更多的朋友!

本文将演示如何合并与压缩一个基于RequireJS的项目。本文中将用到苦干个工具,这其中就包括Node.js。 因此,如果你手头上还没有Node.js可以点击此处下载一个。动机

关于RequireJS已经有很多文章介绍过了。这个工具可以将你的JavaScript代码轻易的分割成苦干个模块(module)并且保持你的代码模块化与易维护性。这样,你将获得一些具有互相依赖关系的JavaScript文件。仅仅需要在你的HTML文档中引用一个基于RequireJS的脚本文件,所有必须的文件都将会被自动引用到这个页面上.

但是,在生产环境中将所有的JavaScript文件分离,这是一个不好的做法。这会导致很多次请求(requests),即使这个些文件都很小,也会浪费很多时间。 可以通过合并这些脚本文件,以减少请求的次数达到节省加载时间的目的。

另一种节省加载时间的技巧是缩小这些被加载文件的大小,相对小一些的文件会传输的更快一些。这个过程叫作最小化 (minification) ,它是通过小心的改变脚本文件的代码结构并且不改变代码的形为(behavior)和功能(functionality)来实现的。例如这些:去除不必要的空格,缩短(mangling,或都压缩)变量(variables)名与函数(methods,或者叫方法)名,等等。这种合并并压缩文件的过程叫做代码优化( optimization)。这种方法除了用于优化(optimization)JavaScript文件,同样适用于CSS文件的优化。

RequireJS有两个主要方法(method): define()和require()。这两个方法基本上拥有相同的定义(declaration) 并且它们都知道如何加载的依赖关系,然后执行一个回调函数(callback function)。与require()不同的是, define()用来存储代码作为一个已命名的模块。 因此define()的回调函数需要有一个返回值作为这个模块定义。这些类似被定义的模块叫作AMD (Asynchronous Module Definition,异步模块定义)。

如果你不大熟悉RequireJS或者不太明白我写的东西 - 不要担心。下面有一个关于这些的例子。 JavaScript应用程序的优化

在本小节中我将向大家展示如何优化Addy Osmani的TodoMVC Backbone.js + RequireJS 项目。 由于TodoMVC项目在不同的框架下包含许多TodoMVC实现,我下载了1.1.0版并提取出Backbone.js + RequireJS应用程序。点击这里下载该应用程序并解压下载到的zip文件。todo-mvc的解压目录将是我们这个例子的根目录(root path),从现在起我将把这个目录引用为<root>。

查看<root>/index.html的源代码,你会发现它仅仅包含了一个script标签(另外一个是当你使用Internet Explorer时引用的):index.html引用脚本文件的代码

其实,整个项目只需要引用require.js这个脚本文件。如果你在浏览器中运行这个项目,并且在你喜欢的(擅长的)调试工具的network标签中, 你就会发现浏览器同时也加载了其它的JavaScript文件:

所有在红线边框里面的脚本文件都是由RequireJS自动加载的。

我们将用RequireJS Optimizer(RequireJS优化器)来优化这个项目。根据已下载的说明文件,找到r.js并将其复制到<root>目录。 jrburke的r.js是一个能运行基于AMD的项目的命令行工具,但更重要的是,它包含RequireJS Optimizer允许我们对脚本文件(scripts)合并与压缩。

RequireJS Optimizer有很多用处。它不仅能够优化单个JavaScript或单个CSS文件,它还可以优化整个项目或只是其中的一部分,甚至多页应用程序(multi-page application)。它还可以使用不同的缩小引擎(minification engines)或者干脆什么都不用(no minification at all),等等。本文无意于涵盖RequireJS Optimizer的所有可能性,在此仅演示它的一种用法。

正如我之前所提到的,我们将用到Node.js来运行优化器(optimizer)。用如下的命令运行它(optimizer):运行RequireJS Optimizer

优化RequireJS项目的相关技巧总结(怎么优化项目)

有两种方式可以将参数传递给optimizer。一种是在命令行上指定参数:在命令行上指定参数

另一种方式是构建一个配置文件(相对于执行文件夹)并包含指定的参数 :

build.js的内容:配置文件中的参数

我认为构建一个配置文件比在命令行中使用参数的可读性更高,因此我将采用这种方式。接下来我们就为项目创建一个<root>/build.js文件,并且包括以下的参数: <root>/build.j

弄明白RequireJS Optimizer的所有配置项并不是本文的目的所在,但我想解释(描述)一下本文中我所采用的参数:

了解RequireJS Optimizer的更多介绍以及更多高级应用,除了其网页早先提供的资料,你可以点击此处查阅所有可用配置选项的详细的信息。

既然现在已经有了构建文件(build file),那么就可以运行优化器(optimizer)了。进入<root> 目录并执行如下命令:运行优化器(optimizer) $ node r.js -o build.js一个新的文件夹会被生成:<root>/dist。重要的是要注意到,现在<root>/dist/js/main.js包含了所有已合并与压缩的具有依赖关系的文件。 此外,<root>/dist/css/base.css也被优化了。

运行优化后的项目,它看起来与未优化之前的项目完全一样。再检查一下该页面的网络传输(network traffic)信息,会发现仅有两个JavaScript文件被加载。

RequireJs Optimizer将服务器上的脚本文件从个减少到2个并且将文件的总大小从KB减少到.6KB(require.js与main.js)。

开销

显然,在优化之后,我们再也没有必要引用require.js文件了。因为已经没有被分离的脚本文件了并且所有具有依赖关系的文件也已被加载。

尽管如此,优化过程将我们所有的脚本合并生成了一个优化后的脚本文件,其中包含了很多次define() 和require()调用。 因此,为了保证应用程序能够正常运行,define()和require()必须指定并实施到应用程序的某处(即包含这些文件)。

这会导致一个众所周知的开销:我们总是会有一些代码实现define()和require()。这些代码并不是应用程序的一部分,它们的存在仅仅是为我们的基础建设考虑(infrastructure considerations)。 当我们开发一个JavaScript库(JavaScript library)时,这个问题变得尤为巨大。相比RequireJS,这些库通常都很小,因此在库中包含它会造成一笔巨大的开销。

在我写这篇文章的时候,对于这方面的开销还没有一个完整的解决方案,但是我们可以使用almond来缓解这个问题。Almond是一个极简单的AMD加载器,它实现了RequireJS接口(API)。因此,可以用来在已优化过的代码中替代RequireJS实现,我们可以在项目中包含almond。如令,我正致力于开发一个优化器(optimizer),它将能够优化RequireJS应用程序,而无需开销,但它仍然是一个新的项目(处于开发的初期阶段)因此这里没有任何关于它的展示。下载与总结

下载 未经优化的TodoMVC Backbone.js + RequireJS 项目或者查看它。 下载 优化后的TodoMVC Backbone.js + RequireJS 项目(位于dist文件夹下)或查看它。

在JavaScript应用中使用RequireJS来实现延迟加载 无论简单还是复杂的Web应用,都由一些HTML、JavaScript、CSS文件组成。通常开发者会通过JQuery、Knockout、Underscore等等这样的第三方JavaScript框架来提高开发

使用RequireJS优化JavaScript引用代码的方法 RequireJS是一个提高你的javascript代码速度和质量的有效方法,同时它还让你的代码更容易阅读和维护。在本文中,我会为你介绍RequireJS和应该如何使用它

超级给力的JavaScript的React框架入门教程 React是Facebook里一群牛X的码农折腾出的牛X的框架。实现了一个虚拟DOM,用DOM的方式将需要的组件秒加,用不着的秒删。React扮演着MVC结构中V的角色,不

标签: 怎么优化项目

本文链接地址:https://www.jiuchutong.com/biancheng/379074.html 转载请保留说明!

上一篇:javascript处理a标签超链接默认事件的方法(js的a标签)

下一篇:在JavaScript应用中使用RequireJS来实现延迟加载(javascript的相关应用)

  • 增值税发票认证在哪里
  • 增值税发票平台怎么下载已认证发票
  • 以前年度出口退税申报
  • 发票可不可以盖财务专用章
  • 理财产品分红和不分红的区别
  • 销售使用过的汽车如何缴纳增值税
  • 提供教育服务免征增值税文件
  • 国资委无偿划拨资产不上税吗
  • 小规模纳税申报时间
  • 固定资产处置净损益计入什么科目
  • 隔月发票红冲操作流程
  • 应交增值税进项税额转出借贷方向表示什么
  • 工业企业用电是收入的几倍
  • 营改增后房产土地作价入股该如何做税务处理?
  • 通过无偿取得的成果
  • 企业债务的利息允许从税前利润扣除是什么意思
  • 问答技巧例子
  • 增值税专用发票怎么开
  • 文化事业建设费征收对象
  • 电费冲销是什么意思
  • 转口贸易是否缴增值税
  • 房地产企业什么时候交企业所得税
  • 资产负债表是一年一次吗
  • 补领以前月份的工资如何计算个人所得税?
  • 社保打的生育保险怎么做账
  • mac怎么打印文件内容
  • 在卸载程序里找不到软件怎么卸载
  • bios中如何关闭cd/dvd
  • winds10企业版
  • 网页游戏无法打开
  • 企业向银行申请办理非原路的服务贸易退汇,银行应当
  • php .htaccess
  • win10开机强制进入修复模式
  • 苹果手机热点打不开是灰色的
  • 收到员工罚款分录
  • 白 犀牛
  • php bool
  • mksquashfs命令
  • set_ccopt_property
  • 季节性用工法律规定
  • 关于英语的25个单词
  • dedecms配置
  • 物流行业的会计有前途吗
  • 交通费用怎么报销
  • 新旧会计准则对比
  • 椅子能放进后备箱吗
  • 员工探亲路费报销入哪个科目
  • 增值税红字发票怎么填开
  • 工业企业成本一般占收入的比例
  • 机会成本的特点有()
  • 管理费用应该如何分摊 dcf
  • 残疾人个人所得税扣除
  • 调整以前年度费用如何做分录
  • 购买固定资产的增值税计入成本吗
  • 公司给员工转公司
  • 小规模纳税人购入固定资产怎么做账
  • 自产自销免税农产品需要缴纳印花税吗
  • 预收账款是否要交说
  • 金税盘抄报税这是怎么个流程
  • 高效的sql语句
  • ubuntu怎么修改网络配置
  • redhat常用命令总结
  • macbook桌面2
  • linux的io
  • win10官方要钱吗
  • win7系统的磁盘管理在哪里,怎么打开
  • win10 20h2 04累积更新
  • mac登录apple id一直转圈
  • win10系统开机后任务栏无响应怎么解决
  • unity3ds
  • 人物移动素材
  • js模拟touch
  • jquery 文本框
  • python神奇的小海龟
  • 企业自建自用房产税如何缴纳
  • 矿山占用荒山是什么意思
  • 内蒙古包头税务局客服电话
  • 甘肃税务政策
  • 经营网络订单可以退款吗
  • 开票盘是什么意思
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设