我可以比较两个Perl哈希(键和值)提取差异并应用于JavaScript中的哈希吗?
hw can i compare two perl hashes (keys and values) extract difference and apply to a hash in javascript
警告,我希望我问的是正确的问题,请随时提出替代方案。
情况;我有一个主要用javascript编写的网站,可以在固定和移动设备上运行。 该网站数据量很大。 它映射移动对象和其他交互的负载。每个客户端每隔几秒钟就会从服务器接收一次数据更新,因此,我需要尽量减少发送的数据量。 目前,服务器发送一个相当大的哈希值,其中包含每次更新时所有对象的当前状态。 这是非常低效的,因为大部分数据保持不变。
我相信,对发送的数据量产生最大影响、编码和测试最少的方法是仅在每次更新时将更改发送到哈希。
所以,我想知道是否有任何经过尝试和测试的方法可以将上次发送的数据(哈希)与将要发送的数据(哈希)进行比较,提取差异,然后将差异应用于 javascript 端的哈希? 我希望这是有道理的?
当我说比较时,我指的是键和值。 目前,哈希没有以任何特定方式排序,但是如果需要,这不是问题。
我看过像 Data::Compare 这样的东西,但它似乎只是告诉我哈希值是否不同,而不是差异是什么(除非我读错了?
较高的频率从服务器发送到客户端时遇到了同样的问题。我们想出的解决方案非常简单。由于没有官方或标准的方式来表达json对象之间的差异,因此我们提出了自己的协议来定义添加哪些对象,哪些对象是更新的(即这些对象的属性被更改(添加/更新/删除)以及哪些对象被完全删除。
可能的增量有效负载之一可能是:
{
added: [
/* array of new objects */
],
removed: [
/* array of object identifiers that need to be removed */
],
updated: { /* key value pairs of object identifiers with their property maps */
obj_id_01: {
updated: { /* key-value pairs of updated properties */ },
removed: [ /* array of keys of removed properties in an object */ ]
},
obj_id_02: {
},
...
}
}
我为类似的问题开发了一个类似的解决方案。
my $bef = {
name => 'Fred',
wife => 'Wilma',
hobby => 'Breaking Rocks',
friends => [qw! Barney Wilma Betty !],
};
my $aft = {
name => 'Fred',
pet => 'Dino',
hobby => 'Bowling',
friends => [qw! Barney Betty Dino !],
kids => [qw! Bam Pebbles !],
};
my $differ = Lecstor::FeedProxy::Diff->new;
my $diff = $diff->differences($bef, $aft);
$diff: {
'pet' => 'Dino',
'wife' => undef,
'hobby' => 'Bowling',
'friends' => {
'remove' => [ 'Wilma' ],
'add' => [ 'Dino' ]
},
'kids' => {
'add' => [ 'Bam', 'Pebbles' ]
}
};
https://github.com/lecstor/Lecstor/blob/master/lib/Lecstor/FeedProxy/Diff.pm
- 将函数的上下文应用于javascript变量
- 将CSS应用于printWindow.print();在Javascript中
- Javascript非常简单:'阅读更多''显示较少'应用于Wordpress的功能
- 如何将javascript仅应用于1个表单中的2个表单提交按钮中的1个
- 将样式应用于 JavaScript 电子邮件
- 将 css 样式应用于 javascript 调用中的 :after 伪元素
- 如何将 css 规则应用于 Javascript 表达式
- 我可以比较两个Perl哈希(键和值)提取差异并应用于JavaScript中的哈希吗?
- 如何将CSS应用于Javascript添加的元素
- 将函数应用于 JavaScript 中的对象
- 将动态参数应用于 JavaScript 函数,但延迟调用
- 如何将DRY原理应用于javascript和查询
- 如何将更改应用于JavaScript数组中的数据对象
- 将 CSS 应用于 JavaScript 文档.writeln ( )
- 如何将本地化应用于javascript字符串
- 如何将字符串拆分为数组,修改数组然后应用于javascript中的字符串
- 将CSS类应用于JavaScript变量
- 类型转换 - 为什么++或 - 不能直接应用于JavaScript中的文字
- 将函数式编程原则应用于Javascript是一个切实可行的选择吗?
- 使用RegEx将比例因子应用于JavaScript字符串变量