我怎样才能使google的闭包库加载得更快?
How can I make Google's closure library load faster?
我正在编写一个基于[libphonenumber]的简单电话号码解析器。不幸的是,"http://closure-library.googlecode.com/svn/trunk/closure/goog/base.js"需要永远加载,当我得到的文件,只是包括它作为src="base.js",一堆错误弹出。
我猜这是因为库还没有加载,所以google .require()语句失败了。
我能做什么?
<!DOCTYPE html>
<html>
<head>
<title>Phone Number Parser</title>
<script src="http://closure-library.googlecode.com/svn/trunk/closure/goog/base.js"></script>
<script>
goog.require('goog.dom');
goog.require('goog.json');
goog.require('goog.proto2.ObjectSerializer');
goog.require('goog.string.StringBuffer');
</script>
<script src="phonemetadata.pb.js"></script>
<script src="phonenumber.pb.js"></script>
<script src="metadata.js"></script>
<script src="phonenumberutil.js"></script>
</head>
<body>
<script>
numbers = ['6509066389', '+40723875777', '720-935-6433', '914-262-7178', '7123040634'];
for (i in numbers) {
console.log(format_for_five9(numbers[i]));
}
function format_for_five9(phoneNumber) {
var $ = goog.dom.getElement;
var regionCode = 'US';
var output = new goog.string.StringBuffer();
try {
var phoneUtil = i18n.phonenumbers.PhoneNumberUtil.getInstance();
var number = phoneUtil.parseAndKeepRawInput(phoneNumber, regionCode);
number_json_serial = goog.json.serialize(new goog.proto2.ObjectSerializer(goog.proto2.ObjectSerializer.KeyOption.NAME).serialize(number));
number_json = goog.json.parse(number_json_serial);
if(phoneUtil.isValidNumberForRegion(number, regionCode)) {
five9_format = number_json.national_number.toString();
}
else {
five9_format = number_json.country_code.toString() + number_json.national_number.toString();
}
} catch (e) {
output.append(''n' + e);
console.log(e);
}
return five9_format;
}
</script>
</body>
</html>
闭包库意味着与闭包编译器一起使用,以编译和缩小您的javascript用于生产。它不打算在生产中作为原始文件使用。即使在你的开发环境中,你也可以使用http://plovr.com/来动态编译和服务你的javascript。
闭包在原始形式下是非常冗长的,因为类型注释和类似java的结构,闭包编译器不仅会最小化脚本,还会优化和删除未使用的脚本,以使事情更快。
下面是一个使用plovr动态服务javascript代码的例子
java -Xmx256m -jar plovr.jar serve -p 9811 /path/to/your/closure/config.js
将在localhost:9811上提供编译后的javascript文件。生产:
java -jar plovr.jar build /path/to/your/closure/config.js > production.js
请查看文档http://plovr.com/docs.html,了解如何配置plovr来编译或服务您的javascript。
一开始就不应该直接链接库。
解决方案是下载整个库并将它们托管在托管上述代码的同一web服务器上。你可能应该将javascript存储在与 phonemetdata .pb.js、metadata.js等相同的目录中。这将允许您像所有其他脚本一样包含脚本:
<script src="base.js">
您可以通过git (git clone https://github.com/google/closure-library.git
)或zip文件下载Closure。
- 在npm中加载一个包的多个版本
- 你能加载一个带有JS超时的PHP包吗
- 将 package.json 用于客户端包,可以在浏览器中动态加载
- 需要.js填充程序,用于加载 JQuery UI 和其他 JQuery 包
- 来自 react-redux-universal-hot-hot 示例初学者工具包中的第三方 API 的初始数据加载
- 只能在闭包中加载jQuery
- 如何使用 ClosureCompiler.js 加载 npm 包
- 添加了 BigCommerce 模板 JS 包加载延迟
- Webpack 无法从node_modules加载包
- 在 JavaScript 闭包中加载一次 XML 文件
- 在多个Browserify或Webpack捆绑包中共享通过NPM加载的模块的简单解决方案
- React原生android无法加载js捆绑包:index.android.js中的更改可以'在apk中看不到
- 从以zip下载的捆绑包中加载UIWebview中的.js文件
- RethinkDB:在r.js方法中加载一个NodeJS包
- 闭包:在加载base.js之前更改ENABLE_DEBUG_LOADER
- 动态加载Dojo包
- 如何在加载后将媒体变量添加到数组时不改变它们.闭包
- 我如何检查/使用jQuery在闭包之前加载jQuery
- 我怎样才能使google的闭包库加载得更快?
- 不完整的可执行自加载闭包