Javascript 我怎样才能让谷歌';s闭包库加载更快?

Javascript 我怎样才能让谷歌';s闭包库加载更快?,javascript,google-closure,google-closure-library,Javascript,Google Closure,Google Closure Library,我正在基于[]编写一个简单的电话号码解析器。不幸的是,”http://closure-library.googlecode.com/svn/trunk/closure/goog/base.js“加载要花很长时间,当我创建文件并将其作为src=“base.js”包含时,会弹出一堆错误 我猜这是因为库尚未加载,所以goog.require()语句失败了 我能做什么 <!DOCTYPE html> <html> <head> <title>Phone N

我正在基于[]编写一个简单的电话号码解析器。不幸的是,”http://closure-library.googlecode.com/svn/trunk/closure/goog/base.js“加载要花很长时间,当我创建文件并将其作为src=“base.js”包含时,会弹出一堆错误

我猜这是因为库尚未加载,所以goog.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>

电话号码分析器
goog.require('goog.dom');
goog.require('goog.json');
require('goog.proto2.ObjectSerializer');
require('goog.string.StringBuffer');
数字=['6509066389'、'+4072387577'、'720-935-6433'、'914-262-7178'、'7123040634'];
用于(i个数字){
console.log(格式为第5页(编号[i]);
}
函数格式_用于_five9(电话号码){
var$=goog.dom.getElement;
var regionCode=‘US’;
var output=new goog.string.StringBuffer();
试一试{
var phoneUtil=i18n.phonenumbers.PhoneNumberUtil.getInstance();
var number=phoneUtil.parseAndKeepRawInput(phoneNumber,regionCode);
number_json_serial=goog.json.serialize(新的goog.proto2.ObjectSerializer(goog.proto2.ObjectSerializer.KeyOption.NAME)).serialize(number));
number\u json=goog.json.parse(number\u json\u serial);
if(phoneUtil.isValidNumberForRegion(number,regionCode)){
five9_format=number_json.national_number.toString();
}
否则{
five9_format=number_json.country_code.toString()+number_json.national_number.toString();
}
}捕获(e){
output.append('\n'+e);
控制台日志(e);
}
返回五个9_格式;
}

首先不应该直接链接库

解决方案是下载整个库并将其托管在托管上述代码的同一web服务器上。您可能应该将javascript存储在与phonemetadata.pb.js、metadata.js等相同的目录中,这样您就可以像其他所有脚本一样包含该脚本:


您可以通过git(
git-clone)下载Closurehttps://github.com/google/closure-library.git
),或

闭包库旨在与闭包编译器结合使用,以编译和缩小javascript以用于生产。它不打算在生产中用作原始文件。即使在您的开发环境中,您也可以使用它来动态编译和服务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

请看一看关于如何配置plovr来编译或提供javascript的文档。

意外被否决-这就是我要寻找的答案。出于某种原因,我没有意识到我可以下载谷歌的闭包库。如果你修改你的答案,我也可以投你一票。