清理大量的Javascript代码

时间:2012-10-07 19:04:31

标签: javascript android optimization titanium

我正在使用Titanium for Android编写应用程序。我在一个JS文件中有很多代码。我想知道是否有像php的include这样的函数将代码分解成多个文件然后只包含它们。

由于

2 个答案:

答案 0 :(得分:2)

使用CommonJS / RequireJS方法,特别是require命令。这是用于处理Titanium中大型系统的(强烈)推荐方式,并且在其网站上有详细记录,以及处理特定于Titanium的JavaScript模块化的许多最佳实践。 Here is the documentation from Titanium on this.

例如,要创建一个封装某种“视图”的模块,请将其放在名为MyCustomView.js的文件中,并带有以下内容:

// MyCustomView.js
function MyCustomView(message) {
    var self = Ti.UI.createView({
        backgroundColor : 'red'
    });
    var label = Ti.UI.createLabel({
        text : message,
        top : 15,
        .... // Other initialization
    });

    // ... Other initialization for your custom view, event listeners etc.
    return self;
}

module.exports = MyCustomView;

现在您可以在另一个类中轻松使用此模块,假设您将其放在/Resources文件夹中,让我们在app.js中加载模块并将其添加到主窗口。

// app.js
var MyCustomView = require('MyCustomView');
var myView = new MyCustomView('A message!');
Titanium.UI.currentWindow.add(myView);

您可以使用此方法制作自定义视图,可重用代码库以及您想要的任何其他内容。另一个常见的事情是拥有一个具有许多不同辅助函数的Utility类:

// Utility.js
exports.cleanString = function(string) {
    // Replace evil characters
    var ret = string.replace(/[|&;$%@"<>()+,]/g, "");
    // replace double single quotes
    return ret.replace(/"/g, "''");
}

这种方法可以很容易地使用:

// app.js
var Utility = require('Utility.js');
Ti.API.info(Utility.cleanString('He##o W&orld$'));

我使用它的另一个常用方法是实现Singleton pattern,因为每个加载的模块都是它自己的功能上下文,所以如果你愿意,你可以拥有持久的值:

// ManagerSingleton.js
var SpriteManager = {
   count : 0
};

exports.addSprite = function() {
    SpriteManager.count++;
}

exports.removeSprite = function() {
    SpriteManager.count--;
}

您可以像实用程序一样加载和使用它:

// app.js
var ManagerSingleton = require('ManagerSingleton');
ManagerSingleton.addSprite();

这是一种更优雅的解决方案,而不是使用全局变量。这些方法绝不是完美的,但它们为我节省了大量时间和挫折,并为我的Titanium代码增加了各种尺寸和类型的应用程序的深度,优雅和可读性。

答案 1 :(得分:1)

Javascript世界中有两个主要的模块系统。 一个是CommonJS,第二个是AMD。关于哪一个最好以及出于何种目的,有很多讨论。 CommonJS更广泛地用于服务器端JS,而AMD主要用于浏览器JS。

RequireJS(requirejs.org)似乎是最受欢迎的AMD系统。

有关JS模块系统的信息,请阅读:http://addyosmani.com/writing-modular-js/