【热点推荐】在JavaScript中使用C程序


JavaScript 是个灵活的脚本语言,能方便的处理业务逻辑。当需要传输通信时,我们大多选择 JSON 或 XML 格式。


但在数据长度非常苛刻的情况下,文本协议的效率就非常低了,这时不得不使用二进制格式。


去年的今天,在折腾一个 前后端结合的 WAF 时,就遇到了这个麻烦。


因为前端脚本需要采集不少数据,而最终是隐写在某个 cookie 里的,因此可用的长度非常有限,只有几十个字节。


如果不假思索就用 JSON 的话,光一个标记字段 {"enableXX": true} 就占去了一半长度。然而在二进制里,标记 true 或 false 不过是 1 个比特的事,可以节省上百倍的空间。


同时,数据还要经过校验、加密等环节,只有使用二进制格式,才能方便的调用这些算法。


优雅实现


不过,JavaScript 并不支持二进制。


这里的「不支持」不是说「无法实现」,而是无法「优雅实现」。语言的发明,就是用来优雅解决问题的。即使没有语言,人类也可以用机器指令来编写程序。


如果非要用 JavaScript 操作二进制,最终就类似这样:


var flags = +enableXX1 << 16 | +enableXX2 << 15 | ...


虽然能实现,但很丑陋。各种硬编码、各种位运算。


然而,对于先天支持二进制的语言,看起来就十分优雅:


 
 
  1. union{
  2. struct{
  3. intenableXX1:1;
  4. intenableXX2:1;
  5. ...
  6. };
  7. int16_tvalue;
  8. }flags;
  9. flags.enableXX1=enableXX1;
  10. flags.enableXX2=enableXX2;

开发者只需定义一个描述即可。使用时,字段偏移多少、如何读写,这些细节完全不用关心。


为了能达到类似效果,起先封装了一个 JS 版的结构体:


 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值