格式化数字和日期的困境
Formatting Number and dates dilemma
我的应用正在使用:
- ASP.NET 后端的 Http 处理程序,以便从 MySql 数据库和 return 中以 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 folder(https://github.com/andyearnshaw/Intl.js/tree/master/locale-data) 在运行时自动添加并且确实需要它,但我仍然不能接受应用程序脚本的大小增加 3 倍只是因为它需要的事实显示格式化的日期和数字...
因此,我正在考虑将格式委托给服务器端,以便它 returns 日期和数字作为 Json 响应中的格式化字符串。这很容易实现,我可以看到这种方法的一些好处:
- 保持应用程序的小尺寸
- 可能的性能改进
但我没有看到任何明显的缺点,这很可疑。
所以,我的问题是 - 在服务器端格式化日期和数字并将它们作为 Json 响应中的格式化字符串发送有什么缺点?
问题是您需要往返服务器进行格式化,这确实是一个视图问题而不是服务器问题(除非您在服务器上呈现,而您似乎并没有这样做).
不是在所有语言环境(甚至是与用户无关的语言环境)中捆绑,而是使您的捆绑增长。您不应将所有这些都包含在捆绑包中,而应将其分成一个单独的捆绑包。您可以查看服务器上的 Accept-Language
HTTP header 并提供正确的语言,或者使用 Javascript 检查语言环境并请求该特定语言。
我的应用正在使用:
- ASP.NET 后端的 Http 处理程序,以便从 MySql 数据库和 return 中以 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 folder(https://github.com/andyearnshaw/Intl.js/tree/master/locale-data) 在运行时自动添加并且确实需要它,但我仍然不能接受应用程序脚本的大小增加 3 倍只是因为它需要的事实显示格式化的日期和数字... 因此,我正在考虑将格式委托给服务器端,以便它 returns 日期和数字作为 Json 响应中的格式化字符串。这很容易实现,我可以看到这种方法的一些好处:
- 保持应用程序的小尺寸
- 可能的性能改进
但我没有看到任何明显的缺点,这很可疑。 所以,我的问题是 - 在服务器端格式化日期和数字并将它们作为 Json 响应中的格式化字符串发送有什么缺点?
问题是您需要往返服务器进行格式化,这确实是一个视图问题而不是服务器问题(除非您在服务器上呈现,而您似乎并没有这样做).
不是在所有语言环境(甚至是与用户无关的语言环境)中捆绑,而是使您的捆绑增长。您不应将所有这些都包含在捆绑包中,而应将其分成一个单独的捆绑包。您可以查看服务器上的 Accept-Language
HTTP header 并提供正确的语言,或者使用 Javascript 检查语言环境并请求该特定语言。