Я делал сравнение Angular и React и решил попробовать тест производительности, чтобы увидеть, как быстро большой (ish) список будет отображаться в обеих фреймах.
Когда я закончил свой прототип React с некоторым базовым формированием валюты, на мой быстрый ноутбук потребовалось ~ 2 секунды. С Angular это было едва заметно - только когда я переключился на свой телефон, у него было заметное отставание.
Это было очень удивительно, потому что мне сказали, что React должен был отбить штаны Angular для производительности, но кажется, что в этом случае верно.
Я протолкнул прототип до очень простого приложения, чтобы попытаться изолировать проблему: https://github.com/pselden/react-render-test
В этом примере он занимает почти 200 мс, чтобы отобразить этот простой список после смены языка, и я ничего не делаю.
Я делаю что-то не так здесь?
/** @jsx React.DOM */
'use strict';
var React = require('react'),
Numbers = require('./Numbers');
var numbers = []
for(var i = 0; i < 2000; ++i){
numbers.push(i);
}
var App = React.createClass({
getInitialState: function() {
return { locale: 'en-US' };
},
_onChangeLocale: function(event) {
this.setState({locale: event.target.value});
},
render: function() {
var currentLocale = this.state.locale;
return (
<div>
<select
onChange={this._onChangeLocale}>
<option value="en-US">English</option>
<option value="fr-FR">French</option>
</select>
<Numbers numbers={numbers} locales={[currentLocale]} />
</div>
);
}
});
module.exports = App;
/** @jsx React.DOM */
'use strict';
var React = require('react'),
ReactIntlMixin = require('react-intl');
var Numbers = React.createClass({
mixins: [ReactIntlMixin],
getInitialState: function() {
return {
numbers: this.props.numbers
};
},
render: function() {
var self = this;
var list = this.state.numbers.map(function(number){
return <li key={number}>{number} - {self.formatNumber(number, {style: 'currency', currency: 'USD'})}</li>
});
return <ul>{list}</ul>;
}
});
module.exports = Numbers;
PS: Добавлена версия Angular: https://github.com/pselden/angular-render-test
Изменить: я открыл проблему с помощью реакции-intl, и мы исследовали и обнаружили, что с помощью https://github.com/yahoo/react-intl/issues/27 не было слишком много накладных расходов - это просто Реагирует на себя что здесь медленнее.