格式化数字和日期困境

时间:2015-05-12 06:15:39

标签: javascript asp.net json reactjs ecmascript-intl

我的应用正在使用:

  • 用于后端的ASP.NET Http Handler,用于从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后,缩小的bundle.js的大小会显着增加:300Kb提升到900kb!我知道这是因为locale-data文件夹(https://github.com/andyearnshaw/Intl.js/tree/master/locale-data)是在运行时自动添加的,而且确实需要它,但我仍然无法接受应用程序脚本大小提升的事实3次只是因为它需要显示格式化的日期和数字... 所以,我正在考虑将格式化委托给服务器端,以便它在Json响应中将Dates和Numbers作为格式化字符串返回。这很容易实现,我可以看到这种方法的一些好处:

  • 保留小尺寸的应用
  • 可能的性能改进

但我没有看到任何明显的缺点,这是可疑的。 所以,我的问题是 - 在服务器端格式化日期和数字并在Json响应中将它们作为格式化字符串发送有什么缺点?

1 个答案:

答案 0 :(得分:1)

问题是您需要往返服务器进行格式化,这实际上是一个视图问题,而不是服务器问题(除非您在服务器上呈现,您似乎并不是这样)正在做。)

而不是在所有语言环境中捆绑(即使是与用户无关的语言环境)也是使您的捆绑包增长的原因。您不应将所有这些内容都包含在捆绑包中,而是将其分成单独的捆绑包。您可以查看服务器上的Accept-Language HTTP标头并提供正确的语言,也可以使用Javascript检查区域设置并请求该特定语言。