NODE.JS之我見前端
先說說爲何有這篇文章,關注NODE.JS 也有一段時間了,不敢說大徹大悟,可是對於NODE.JS能幹什麼,仍是有必定的瞭解,筆者多年之前就研究過JavaScript引擎V8,能夠說是國內最先編譯並研究V8代碼的人之一,這一點有博客爲證。雖然NODE.JS的成功是有目共睹的,在社區的火爆程度也是路人皆知的,可是從筆者的角度來看,NODE.JS並無給計算機科學帶來任何的新東西,對於我來講它也並無任何的新意,對於這一點,筆者並不肯意挑起任何的爭論,可是歡迎討論,也歡迎不一樣的意見。雖然NODE.JS可讓前端開發人員可使用JavaScript寫後端的代碼,可是這並不能表明什麼,也沒什麼意義。c++
下面是簡單的從網上找到的NODE.JS存在的意義web
1. Nodejs基於Javascript語言,不用再單獨新學一門陌生的語言,從而減低了學習的門檻。express
我之見:這根本不是理由,每種工具的存在天然有他存在的意義,彈弓是不適合打飛機的, NODE.JS是能夠作到這一點,可是他卻沒有其餘的技術成熟,NODE.JS最多也就是作了其餘工具早已經能夠完成的事情。編程
2. Nodejs並無從新開發運行時環境,而是選擇了目前最快的瀏覽器內核V8作爲執行引擎,保證了Nodejs的性能和穩定性。後端
我之見:V8是c\c++寫的,難道c\c++作不到NODE.JS在服務器端能夠作到的事情麼?瀏覽器
3.Nodejs的開發很是高效,並且代碼簡單,得益於Nodejs的單線程機制。而Nodejs的另外一個特色異步編程,讓Nodejs處理IO密集型應用有了明顯的優點。用Nodejs比Java作Web開發要高效10倍,比PHP的代碼還要簡單。服務器
我之見:你是從哪知道效率快10倍的?NODE.JS的這種異步編程模型早就存在了,好多的web服務器早已經將其應用到生產環境中了,C#, JAVA,C++ 也早就存在這方面的支持,從哪來的優越感呢?網絡
4. Nodejs的社區在壯大,不只包的數量在快速增長,並且包的質量也要明顯好於其餘語言的。不少明星級的包,都是簡單而靈巧的,爲了開發者的使用習慣而設計。我最經常使用到的工具包,如socket.io, moment.js, underscore.js, async.js, express.js, bower.js, grunt.js, forever.js…,確實在改變我之前的編程習慣。框架
我之見:NODE.JS社區比JAVA社區還大麼?框架比JAVA社區還成熟麼?不見得吧。
綜上來看,筆者認爲NODE.JS是個好東西,它裏面的好多的理念是好的,確實值得你們去學習一番,可是NODE.JS並無好多人認爲的那麼牛,由於這裏面對計算機科學來講沒有任何的新東西。我認爲,對於任何東西你們都不要盲從,不要人云亦云,不傳謠,不信謠,真刀真槍的代碼才最有說服力。
可能不少人不太瞭解,由於被吹蒙了,NODE.JS真正強大的是對於網絡協議的封裝,包括對於http的封裝,下面咱們簡單的看一個例子。
下面的代碼用NODE.JS實現了一個簡單的http服務器,運行起來會在13333端口監聽http請求,當有http請求來的時候會返回Hi There! 僅此而已,就這個功能,隨便寫幾句C++代碼也能夠完成一樣的功能。
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end(Hi There!\n');
}).listen(13333, '127.0.0.1');
console.log('Server running at http://127.0.0.1: 13333/');
再來看一個例子,這個例子在13334端口監聽TCP請求,來什麼返回什麼,僅此而已,一樣也就是幾行C++代碼的事。
var net = require('net');
var server = net.createServer(function (socket) {
socket.write('Echo server\r\n');
socket.pipe(socket);
});
server.listen(13334, '127.0.0.1');
總結
本人無心和你們就NODE.JS進行任何的爭論,可是歡迎正面的討論,共同進步,NODE.JS自己是個好東西,可是你們不要將其神化,認爲全部的現有技術都一無可取了,JavaScript統一全棧恐怕只能是一個笑話。