Skip to content

Commit

Permalink
第三章 编译小节 译完
Browse files Browse the repository at this point in the history
basecss committed Jun 13, 2013
1 parent 93388dd commit c00e6e0
Showing 1 changed file with 54 additions and 1 deletion.
55 changes: 54 additions & 1 deletion Chapter3.markdown
Original file line number Diff line number Diff line change
@@ -301,4 +301,57 @@ Angular意识也意味着Angular直到所有的XHR何时向服务器放出, 从

**调试功能**

探究JavaScript, 如果你查看你的代码不是很好; 当你希望暂停和恢复测试时, 所有的这些都运行场景测试吗? 然而所有的这一切通过Angular场景运行器都是可行的, 等等.
探究JavaScript, 如果你查看你的代码不是很好; 当你希望暂停和恢复测试时, 所有的这些都运行场景测试吗? 然而所有的这一切通过Angular场景运行器都是可行的, 等等.

##编译

在JavaScript世界里, 编译通常意味着压缩代码, 虽然一些实际的编译可能使用的时Google的Closure库. 但是为么你会希望将所有漂亮的, 写的很好, 很容易理解代码变得不可读呢?

原因之一是我们的目标是是应用程序更快的响应用户. 这是为什么客户端应用程序几年前不想现在腾飞得这么快的主要原因. 能够越早获取应用程序并运行, 响应得也越早.

这种快速响应是压缩JS代码的动机. 代码越小, 越能有效的减小负载, 同时能够更快的将相关文件发送给用户. 这在移动应用程序中显得尤为重要, 因为其规模为成为瓶颈.

这里有集中方法可以压缩你给应用程序所编写的AngularJS代码, 每种方法都具有不同的效果.

**基本的和简单的优化**

这包括压缩所有在你的代码中使用的变量, 但是不会压缩属性. 这就是所谓的传递给Closure Compiler的简单优化.

者不会给你带来多大的文件大小的节省, 但是你仍然可以获得一个可观的最小开销.

这项工作的原因是编译器(Closure或者UglifyJS)并不会重命名你从模板中引用的属性. 因此, 你的模板会继续工作, 仅仅重命名局部变量和参数.

对于Google Closure, 只需简单的调用下面的命令:

java -jar closure_compiler.js --compilation_level | SIMPLE_OPTIMIZATIONS --js path/to/files.js

**高级优化**

高级优化有一点棘手, 它会试图重名几乎任何东西和每个函数. 得到这个级别的优化工作, 你将需要通过显示的告诉它哪些函数, 变量和属性需要重命名(通过使用一个externsfile). 者通常是通过模板访问函数和属性.

编译将会使用这个`externs`文件, 然后重命名所有的东西. 如果处理好, 这可能会导致的你的JavaScript文件大幅度的减小, 但是它的确需要相当大的工作像, 包括每次改变代码都要更急externs文件.

要记住一件事: 当你想要压缩代码时, 你要使用依赖注入的形式(在控制器上指定`$inject`属性).

下面的代码不会工作

function MyController($scope, $resource){
//Stuff here
}

你需要像下面这样做:

function MyController($scope, $resource){
//Some Stuff here
}
MyController.$inject = ['$scope', '$resource'];

或者是使用模块, 像这样:

myAppModule('MyController', ['$scope', '$resource', function($scope, $resource){
//Some stuff here
}]);

一旦所有的变量都混肴或者压缩只有, 这是使用Angular找出那些你最初使用的服务和变量的方式.

> 每次都是数组的方式注入是比较好的处理发方式, 以避免开始编译代码时的错误. 挠头并视图找出为什么提供的$e变量丢失了(一些任务的混肴版本压缩了它)是不值得的.

0 comments on commit c00e6e0

Please sign in to comment.