Как ускорить загрузку библиотеки закрытия Google?

Я пишу простой анализатор телефонных номеров на основе [libphonenumber]. К сожалению, "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>

person Zack Burt    schedule 02.08.2011    source источник


Ответы (2)


Во-первых, вы не должны напрямую связывать библиотеку.

Решение состоит в том, чтобы загрузить всю библиотеку и разместить ее на том же веб-сервере, на котором размещен приведенный выше код. Вероятно, вам следует хранить javascript в том же каталоге, что и phonemetadata.pb.js, metadata.js и т. д. Это позволит вам включить скрипт так же, как и все остальные. :

<script src="base.js">

Вы можете скачать Closure через git (git clone https://github.com/google/closure-library.git) или в виде zip-файла. .

person Rob    schedule 02.08.2011
comment
Случайно проголосовали против - это ответ, который я ищу. По какой-то причине я не знал, что могу загрузить библиотеку закрытия Google. Если вы внесете изменения в свой ответ, я тоже могу проголосовать за вас. - person Zack Burt; 02.08.2011

Библиотека закрытия предназначена для использования в сочетании с компилятором закрытия для компиляции и минимизации вашего javascript для производства. Он не предназначен для использования в качестве необработанного файла в производстве. Даже в среде разработки вы можете использовать http://plovr.com/ для динамической компиляции и обслуживания вашего javascript.

Замыкание очень многословно в необработанном виде из-за аннотаций типов и структуры, подобной java, компилятор замыкания не только минимизирует скрипт, но также оптимизирует и удаляет неиспользуемые скрипты, чтобы ускорить работу.

Вот пример использования plovr для динамического обслуживания вашего кода javascript.

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

Это будет обслуживать скомпилированные файлы javascript на локальном хосте: 9811. Для производства:

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

Ознакомьтесь с документацией http://plovr.com/docs.html о том, как настроить plovr для компилировать или обслуживать ваш javascript.

person Charles Ma    schedule 02.08.2011