【发布时间】:2015-05-12 06:15:39
【问题描述】:
我的应用正在使用:
- 后端的 ASP.NET Http Handler,以便从 MySql 数据库中读取数据并以 JSON 格式返回
- 用于前端的 React.js 应用程序,用于在浏览器中显示数据。该应用程序是使用 webpack 构建的。
应用程序的多个页面显示日期和数字,我想根据浏览器的首选语言对其进行格式化。我发现这个特性的前沿是 ECMAScript 国际化 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 响应中将日期和数字作为格式化字符串返回。这很容易实现,我可以看到这种方法的几个好处:
- 保持应用的小尺寸
- 可能的性能改进
但我没有看到任何明显的缺点,这很可疑。 所以,我的问题是 - 在服务器端格式化日期和数字并将它们作为格式化字符串在 Json 响应中发送有什么缺点?
【问题讨论】:
-
为什么不直接加载您真正需要的语言环境数据?例如当前语言环境,并在更改时从服务器请求新的语言环境 (json)。
-
国际文档说:“在 Node.js 中,或使用 require('intl') 时,数据会自动添加到运行时,不需要提供。”我没有找到可靠的解决方法。
-
那么你应该把这个告诉包的作者。我认为这是一个设计缺陷。
标签: javascript asp.net json reactjs ecmascript-intl