为优化requirejs项目总结相关技术

本文将演示如何合并和压缩requirejs基础工程。本文将使用一个努力工作的工具,包括node.js.so,如果没有Node.js在手,你可以点击这里下载一个。

动机

很多文章介绍了关于requirejs。这个工具可以很容易地把你的Javascript代码放进一个硬干燥模块(模块)和保持代码的模块化和可维护性。这样,你会得到一些相互依存的Javascript文件,你只需要引用一个requirejs HTML文档中的脚本文件,并所有要求的文件将被自动引用到这个页面。

然而,在生产环境中分离所有Javascript文件是不好的做法。这会导致许多请求(请求),即使文件很小,也会浪费很多时间。这些脚本文件可以合并以减少请求的数量,以节省加载时间。

节约时间的另一种方法是减少加载的文件的大小,和较小的文件会更快。这一过程称为缩小,这是通过改变脚本文件的编码结构和改变代码的形式实现(行为)和功能(功能)。例如,它们是:去除不必要的空间,缩短(损坏,或压缩)变量(变量名称和函数(方法),或者称为方法)的名字,等等。这种合并和压缩文件称为代码优化过程(优化)。除了优化(优化)的Javascript文件,这种方法也适用于CSS文件的优化。

RequireJS有两个主要方法(方法):定义()和()的要求。两方法基本上有相同的定义(声明),他们都知道如何加载依赖项,然后执行一个回调函数(回调函数)。不同的要求,定义()()是用来存储代码作为命名模块。因此,回调函数的定义()需要有一个返回值为模块定义。这些类似的模块被称为AMD(异步模块定义,异步模块定义)。

如果你不熟悉requirejs或不明白我所写的东西,别担心,这是其中的一个例子。



javascript应用程序的优化

在这一节中我将向你展示如何优化todomvc backbone.js + requirejs项目阿迪奥斯马尼。作为todomvc项目包含许多todomvc实现不同框架下,我下载了1.1.0版本和提取backbone.js + requirejs应用。点击这里下载应用程序,解压下载的压缩文件,解压缩,MVC目录将我们的例子的根目录(路径),我会把这个目录从现在开始。

看/文件的源代码,你会发现,它只包含一个脚本标签(其他参考当您使用Internet Explorer):

文件引用的脚本文件的代码













事实上,整个项目只需要参照require.js脚本文件。如果你运行在浏览器中的项目,并在你最喜欢的调试工具的网络标签,你会发现,浏览器可以加载其他Javascript文件。





在红色的线边界的所有脚本文件会自动加载的requirejs。



我们将使用requirejs优化器(requirejs优化器)来优化这个项目。根据下载的描述文件,找到r.js并复制到目录。Jrburke的r.js是一个命令行工具,可以运行基于AMD的项目,但更重要的是,它包含requirejs优化器,它允许我们合并并压缩脚本文件(脚本)。

requirejs优化器有许多用途,它不仅可以优化单Javascript或单一的CSS文件,还可以优化整个项目或只是它的一部分,甚至多页面应用(多页面应用程序),也可以用不同的压缩引擎或根本没有(不压缩),等等本文不打算覆盖requirejs优化所有的可能性,这是一个演示唯一的用途。

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

运行requirejs优化器






节点r.js美元啊



将参数传递给优化器有两种方法:一种是在命令行中指定参数:

在命令行中指定参数






美元r.js O节点URL地址=。名称=主= main-built.js



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






r.js O build.js美元结



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






({
URL地址:,。
名称:主
输出:主编译
})



我认为一个配置文件的建设比参数在命令行中使用更具可读性,所以我会采取这种做法。接下来我们为项目创建一个 / build.js文件,并包括以下参数: /建设{J}.




({
appdir:'。,
URL地址: / JS的,
目录: /距离的,
模块:{
{
名称:主
}
},
fileexclusionregexp: / ^(R |建立)。JS $ /,
OptimizeCss:'standard,
removecombined:真,
路径:{
jQuery:'lib / jQuery,
强调:'lib /下划线',
主干:'lib / /骨干的中坚力量,
backbonelocalstorage:'lib / /骨干localStorage的骨干,
正文:'lib / /文本的要求
},
Shim:{
强调:{
出口:'_
},
主干:{
型号:{
下划线,
jQuery
},
出口:'backbone
},
backbonelocalstorage:{
该'backbone:{ },
出口:存储
}
}
})





这不是本文的目的,了解所有的requirejs优化配置项,但我想解释(描述)我这篇文章中使用的参数:





想知道更多关于RequireJS Optimizer和更先进的应用程序,你可以点击所有除了信息可用的配置选项的细节之前提供的网页。

现在您拥有了构建文件,您就可以运行优化(优化器):

运行优化器(优化器)



r.js O build.js美元结

新文件夹将产生: / dist.it是注意 / / / main.js区JS现在包含所有可靠的文件已被合并和压缩的重要。此外, / / /触发区的CSS进行了优化。

运行优化的项目,它与优化前的项目完全相同。检查页面的网络传输(网络流量)信息,发现只有两个Javascript文件被加载。





requirejs优化器会减少服务器上的脚本文件,从13到2,降低了文件的总大小从164kb到58.6kb(require.js主要js)。

费用

显然,经过优化,我们不需要参照require.js文件了。因为没有剧本,已经分离和可靠的文件被载入。

然而,优化过程将我们所有的脚本结合起来生成一个优化的脚本文件,它包含许多次定义()和要求()调用。因此,为了确保应用程序能够正常运行,定义()和要求()必须在应用程序(即这些文件)中指定和实现某个地方。

这会导致一个著名的开销:我们总有一些代码来实现定义的()和()的要求。这些代码是不是应用程序的一部分,它们的存在仅仅是为我们的基础设施(基础设施的考虑)。当我们开发一个Javascript库(Javascript库),这个问题变得尤为巨大。相比requirejs,这些库通常很小,所以含在图书馆可以造成巨大的开销。

我写这篇文章的时候,没有完整的解决方案的成本,但我们可以用杏仁来缓解这个问题。杏仁是一个很简单的AMD的装载机,实现了requirejs接口(API)。因此,它可以用于优化的代码替换requirejs实现,我们可以在项目杏仁。

我致力于发展一个优化器(optimizer),这将能够优化requirejs应用无需成本,但它仍然是一个新的项目(开发初期),所以没有展示一下。

下载并总结

下载未经优化的todomvc backbone.js + requirejs项目或看它。
优化todomvc backbone.js + requirejs项目下载(dist文件夹下)或看它。