我的应用正在使用:
- ASP.NET HTTP处理程序,用于读取MySQL数据库的数据并以JSON格式返回
- React.js应用程序用于前端,以在浏览器中显示数据。该应用是通过使用WebPack构建的。
应用程序的几页显示日期和数字,我想根据浏览器的首选语言将它们格式化。我发现此功能的最前沿是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后,js的大小显着增加:将300kb提高到900kb!我知道这是因为locale-data文件夹(https://github.com/andyearnshaw/intl.js/tree/master/master/locale/locale-data)自动在运行时添加接受这个事实,即App脚本的大小增加了3次,只是因为它需要显示格式的日期和数字...因此,我正在考虑将格式委派给服务器端,以便它返回日期和数字作为JSON响应中格式的字符串。这很容易实现,我可以看到这种方法的几个好处:
- 保留较小的应用程序
- 可能的绩效改进
但我看不到任何明显的缺点,这很可疑。因此,我的问题是 - 服务器端格式日期和数字的缺点是什么,并将其作为JSON响应中的格式字符串发送给它们?
问题是您需要往返服务器进行格式化,这确实是视图关注的问题,而不是服务器的关注点(除非您在服务器上渲染,否则您会不会't似乎在做)。
而不是在所有地区(甚至与用户无关的地方)捆绑,这是使您的捆绑成长的原因。您不应该将它们全部包括在捆绑包中,而应将其分为单独的捆绑包。您可以在服务器上查看Accept-Language
HTTP标头,并使用正确的语言,或使用JavaScript检查语言环境并要求该特定语言。