到目前为止,有没有把 js 完全加密的方法

JavaScript085

到目前为止,有没有把 js 完全加密的方法,第1张

其实可以仿照vmprotect写一个js版本的,vmprotect思想来源于门电路 。

原理是,把加减乘除都用nor指令实现,nor = not not and

于是原来很容易看出逻辑的 and xor not or 都加密成了整齐划一的单一操作字符nor

再从nor还原回去变的极为困难 。

目前为止vmp虚拟机加密只能半自动甚至手工还原,还原vmp至今是仍然有很大难度(爆破是另一回事) 。

javascript也可以这么做,也就是在js虚拟机上再搞vmp虚拟机 。

但是似乎js界和搞加密解密的交集太少,没有人去做这个事情 。

也可能是js并没有那么高的价值值得如此保护。

文章阅读,来自 前端之巅 去哪儿网 部分摘录

1.项目分离,页面分离

第一种是项目分离,承载页面分离。他的特点是简单,快速,前端只关注浏览器方面,除浏览器端之外都是后端负责。

缺点 :

沟通成本高,前期,前端需要使用 ng 或者代理工具调试,后期,还要把页面给到后端,并且新建一个对应的路由。

2.项目分离,只是后端的页面,放到了前端项目里

后端只需要配置路由,最终上线时,由发布系统负责把前端中的页面,自动同步到后端相应的目录中。其中相应的目录需要前后端提前约定,不然后端在渲染页面的时候,就会找不到相应的文件。相比第一种方案,稍微有点进步。沟通成本会有一定的降低。

缺点 :

不过如果需要在页面里做一些业务逻辑处理,还需要前端同学掌握和学习 velocity 语法,对于新同学而言看似掌握的了一门新语法,但实际操作起来并非想象中的流畅。

3.第三种方案是使用 Nodejs 作为页面渲染层,后端只负责数据的生产工作

这也是目前阶段主要的使用方式。它的优点是前端同学对于整个页面的生命周期有完全的控制权,包括开发,调试,部署,上线以及后期的性能监控,应用监控等等。可做的事情也更多,比如使用 React SSR 做同构渲染。

缺点 :

对于前端同学的要求也会很高,除学习前端知识外,还要学习后端知识。

整个应用都是由前端统一负责,所以还需要接收报警电话或者短信,7*24 小时,都在待命状态。

1.一些前端开发,只关注浏览器端,服务器端开发关注很少,或者根本就不关注

2.认为 Node.js 只适合开发一些工具类的功能,相对于后端开发来看它只是个玩具

3.Node.js 的生态不如其他后端语言生态健全

4.涉及到后端开发的知识面比较广,在没有这些基础知识或者经验积累的基础上,考虑问题比较片面,最终做出的系统问题比较多,容易被后端鄙视

看似问题很多,但实质上只有两个原因,

1,自身知识储备不够。

2,对 Node.js 了解不深,不敢应用在生成环境中,即使应用到生产环境,一旦出现问题,不能快速及时的处理,导致高层认为还不如其他后端语言稳定,降低了我们的话语权。 (很中肯,不摸底,不敢用于项目)

1,提高开发效率,因为有了 Node 之后就不需要配置 Nginx 了,也不需要配置一些代理工具了,所有的页面生命周期都是由前端统一去管理的,这时候不需要其他人进行合作。

2,降低沟通成本,除了接口格式外,不需要和后端进行交互了;

3,前后端职责也更为清晰,因为这时候,界限更为清晰了,后端只负责生产数据,它只提供数据就可以了,至于数据怎么消费,以及怎么用,都由前端去做;

4,可以同时使用 React SSR 技术,做到首屏渲染,提高用户体验,除了首屏之外,还可以做异步的加载、SEO 等操作。

5,Node.js 可提供一些服务,不仅能让我们使用,还可以对外使用,如 RESTful API,这样就不用有求于后端了。

/---------------------------------------------文章摘录结束-------------------------------------------------/

除了号称nodejs界jQuery的express,

另外两个比较不错的

一个是 360 团队的 Thinkjs ,

一个是阿里的 Eggjs

原因比较多,我个人分析认为主要有以下两大方面的原因

历史遗留原因

javascript在当时设计之初,是带着商业竞争目的的,js前身为livescript,主要是使得浏览器初步具备客户端能力,因此并不是特别完善。

网页端js开发在相当一段时间内,由于浏览器的js解释引擎性能并不高,而且网络带宽也比较小,因此绝大多数站点的代码规模并不大,主要针对页面内容一些简单交互逻辑,在此前提下,浏览器厂商以及工业界都没有强大的动力去实现面向对象版本的js。

技术实现原因

考虑到到网页环境的特殊性,使用原型继承而不是类继承的方式,更节约内存空间,而且解释器的实现更为简单。

js开源界在不断的技术积累中,开发者已经逐渐适应了没有类的js开发模式,在js中实现真正的类反而显得有些鸡肋。

最后:虽然现在ES6标准中已经有class关键字了,但是归根到底类还是一个语法糖,其底层还是基于原型继承的。