【问题标题】:Formatting Number and dates dilemma格式化数字和日期的困境
【发布时间】: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


【解决方案1】:

问题是您需要往返服务器进行格式化,这确实是视图问题而不是服务器问题(除非您在服务器上进行渲染,但您似乎没有这样做)。

不是在所有语言环境中捆绑(即使是与用户无关的语言环境)才是让您的捆绑软件增长的原因。您不应该将它们全部包含在捆绑包中,而应将它们分成单独的捆绑包。您可以查看服务器上的 Accept-Language HTTP 标头并提供正确的语言,或者使用 Javascript 检查语言环境并请求该特定语言。

【讨论】:

  • 谢谢。我将 Intl 用法从 require 替换为主页代码,如下所示: 0) { %> 对我来说没问题
猜你喜欢
  • 2023-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-13
  • 2012-04-12
  • 1970-01-01
相关资源
最近更新 更多