如何使Google的闭包库加载更快?

4
我正在基于[libphonenumber]编写一个简单的电话号码解析器。不幸的是,“http://closure-library.googlecode.com/svn/trunk/closure/goog/base.js”需要很长时间才能加载,当我使用wget下载文件并将其作为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>
2个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
11

闭包库旨在与Closure编译器一起使用,以便对JavaScript进行编译和缩小以用于生产环境。它不适合作为生产环境中的原始文件使用。即使在开发环境中,您也可以使用http://plovr.com/来动态编译和提供JavaScript。

由于类型注释和类似Java的结构,原始形式的Closure非常冗长,Closure编译器不仅会缩小脚本,还会优化和删除未使用的脚本,以提高速度。

以下是使用Plovr动态提供JavaScript代码的示例

java -Xmx256m -jar plovr.jar serve -p 9811 /path/to/your/closure/config.js

这将在本地主机上的端口9811上提供编译后的JavaScript文件。对于生产环境:

java -jar plovr.jar build /path/to/your/closure/config.js > production.js

请查看文档http://plovr.com/docs.html,了解如何配置 Plovr 来编译或服务您的 JavaScript。


8

您不应该直接链接库。

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

<script src="base.js">

您可以通过git(git clone https://github.com/google/closure-library.git)或zip文件下载Closure。


不小心点了踩 - 这就是我要找的答案。由于某种原因,我没有意识到我可以下载谷歌的闭包库。如果你对你的回答进行编辑,我也可以给你点赞。 - Zack Burt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,