Comments (5)
I think that's a good idea for migrate to es6, I'm planning to do it after nacl version is stable enough (actually I want to rewrite the whole app after nacl is stable).
On the other hand, use Promise instead of callback seems not a good idea, although the promise is more clearly than callback hell and has a native implementation in modern browser, it still slower than callback, especially when the chrome socket api is using the callback and you need convert it to promise manually.
from shadowsocks-chromeapp.
The speed doesn't differ much (tested on Windows 10 x64/Opera 36 (Chromium 48)), if promise is not faster, https://jsperf.com/promise-vs-callback (I do find promise is much slower in Microsoft Edge)
I would suggest keep shadowsocks-nacl
as a separate project, while keep this one as a pure JS implementation of shadowsocks.
from shadowsocks-chromeapp.
Well. I still believe introduce promise into shadowsocks is not a good idea.
I think promise should be used in the place which suffered from callback hell (current we have no callback hell), have complex logic need to clarify, or not performance-sensitive.
Since window.Promise
is an object, new
a Promise will cost much than directly call a callback. You may noticed the JS implementation will eat a great number of memory when downloading big files, I believe it's caused by GC cannot recycle the used Uint8Array
and forge binary string object when engine is still busy, the situation will become worse if we create more Promise
object in it.
In short: I don't think the logic in shadowsocks is too complex or we had fell into callback hell, and since the network application is too damn performance-sensitive, there is no need to add something may / also may not cause performance issue into our code.
As I noticed above, the JS implementation has it's congenital defects which cannot be fixed in JS code level, not only about the GC, but also includes the single thread, crypto performance and some others, use the native client technology can fix these to a certain extent. The JS implementation will not be deprecated, instead it will be treated as the fallback when native client module is not available. Provides two types of chrome apps will confused people, makes them hard to choice, and since native client module could be crashed / lack of interpreter in chrome, the JS fallback must be existed, so I want to put these two implementation together into this project, the NaCl project will only provides pure NaCl module for any other web developers who wants to use it in their web apps.
Feel free to let me know if you have any questions or advice, thanks :)
from shadowsocks-chromeapp.
PS: The NaCl module will be imported in binary form, I will not include any C++ code into this project
from shadowsocks-chromeapp.
Cool, that's a good solution, JS as a fallback backend.
from shadowsocks-chromeapp.
Related Issues (20)
- 如何解决? HOT 4
- 如果我不知道 local port 的话该怎么办 HOT 1
- 能否支持随浏览器自启动并且上次随上次配置启动一个配置文件 HOT 3
- ubuntu 16.04 下没法保存 HOT 3
- 求增加chacha20的支持 HOT 1
- Would you please implement salsa20 cipher? HOT 1
- 这个项目弃坑了么 HOT 2
- 请求支持ChaCha20的加密方式 HOT 2
- OTA已经停止支持了,请尽快支持AES-256-GCM等新的加密方式 HOT 2
- 可以增加导出导入配置功能么?
- Could not load background script 'lib/logging.js HOT 2
- 请问能加上chacha20 , auth_sha1_v4_compatible 这类的加密协议吗? HOT 3
- about pac HOT 1
- 期待更新为ssr HOT 6
- 请问怎么执行cake build?
- (Update Requested) Chrome OS
- 期待更新shadowsocks libev和obfs
- Encryption AES 256 GCM HOT 1
- Chrome Apps Officially Discontinued by Google
- /lib Directory is not there
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from shadowsocks-chromeapp.