我的应用正在使用:
该应用的几个页面显示日期和数字,我想根据浏览器的首选语言对其进行格式化。我发现此功能的最前沿是ECMAScript Internationalization API及其polyfill Intl.js:https://github.com/andyearnshaw/Intl.js。我在应用程序的依赖项中添加了它并用于格式化,例如:
'use strict';
var React = require('react');
var Intl = require('intl');
var formatter = new Intl.DateTimeFormat();
module.exports = React.createClass({
render : function(){
if(this.props.value) {
var formattedValue = formatter.format(new Date(this.props.value));
return (
<span>
{formattedValue}
</span>
);
}
else{
return false;
}
}
});
到目前为止一直很好,但后来我发现在依赖项中添加Intl.js后,缩小的bundle.js的大小会显着增加:300Kb提升到900kb!我知道这是因为locale-data文件夹(https://github.com/andyearnshaw/Intl.js/tree/master/locale-data)是在运行时自动添加的,而且确实需要它,但我仍然无法接受应用程序脚本大小提升的事实3次只是因为它需要显示格式化的日期和数字... 所以,我正在考虑将格式化委托给服务器端,以便它在Json响应中将Dates和Numbers作为格式化字符串返回。这很容易实现,我可以看到这种方法的一些好处:
但我没有看到任何明显的缺点,这是可疑的。 所以,我的问题是 - 在服务器端格式化日期和数字并在Json响应中将它们作为格式化字符串发送有什么缺点?
答案 0 :(得分:1)
问题是您需要往返服务器进行格式化,这实际上是一个视图问题,而不是服务器问题(除非您在服务器上呈现,您似乎并不是这样)正在做。)
而不是在所有语言环境中捆绑(即使是与用户无关的语言环境)也是使您的捆绑包增长的原因。您不应将所有这些内容都包含在捆绑包中,而是将其分成单独的捆绑包。您可以查看服务器上的Accept-Language
HTTP标头并提供正确的语言,也可以使用Javascript检查区域设置并请求该特定语言。