格式化数字和日期的困境

Formatting Number and dates dilemma

我的应用正在使用:

应用程序的多个页面显示日期和数字,我想根据浏览器的首选语言对它们进行格式化。我发现此功能的前沿技术是 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 folder(https://github.com/andyearnshaw/Intl.js/tree/master/locale-data) 在运行时自动添加并且确实需要它,但我仍然不能接受应用程序脚本的大小增加 3 倍只是因为它需要的事实显示格式化的日期和数字... 因此,我正在考虑将格式委托给服务器端,以便它 returns 日期和数字作为 Json 响应中的格式化字符串。这很容易实现,我可以看到这种方法的一些好处:

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

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

不是在所有语言环境(甚至是与用户无关的语言环境)中捆绑,而是使您的捆绑增长。您不应将所有这些都包含在捆绑包中,而应将其分成一个单独的捆绑包。您可以查看服务器上的 Accept-Language HTTP header 并提供正确的语言,或者使用 Javascript 检查语言环境并请求该特定语言。