• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            Fork me on GitHub
            隨筆 - 215  文章 - 13  trackbacks - 0
            <2016年11月>
            303112345
            6789101112
            13141516171819
            20212223242526
            27282930123
            45678910


            專注即時(shí)通訊及網(wǎng)游服務(wù)端編程
            ------------------------------------
            Openresty 官方模塊
            Openresty 標(biāo)準(zhǔn)模塊(Opm)
            Openresty 三方模塊
            ------------------------------------
            本博收藏大部分文章為轉(zhuǎn)載,并在文章開頭給出了原文出處,如有再轉(zhuǎn),敬請保留相關(guān)信息,這是大家對原創(chuàng)作者勞動(dòng)成果的自覺尊重!!如為您帶來不便,請于本博下留言,謝謝配合。

            常用鏈接

            留言簿(1)

            隨筆分類

            隨筆檔案

            相冊

            Awesome

            Blog

            Book

            GitHub

            Link

            搜索

            •  

            積分與排名

            • 積分 - 216979
            • 排名 - 118

            最新評論

            閱讀排行榜

            http://blog.csdn.net/cedricliang/article/details/48437437
            對于那些需要web服務(wù)的初創(chuàng)公司里的大型新項(xiàng)目,我會選擇何種后端編程語言呢?在客戶端側(cè)有CSS、html和JavaScript(包括CoffeeScript和TypeScript這類衍生語言)可供選擇。而對于存儲,我曾經(jīng)用過MySQLRedis,這也基本夠用了。但是選擇服務(wù)器端的語言卻沒那么容易。我曾經(jīng)使用了好長時(shí)間的PHP,因?yàn)樵谖覄傞_始編程時(shí)候,它最簡單,成本也最低。但是時(shí)過境遷,現(xiàn)在的我不用再擔(dān)心昂貴的服務(wù)器托管費(fèi)用了。盡管我對web項(xiàng)目的經(jīng)驗(yàn)沒那么多,但我還是想分享自己的一些看法。

            定義:后端與安全性

            事先聲明一下:我只討論后端。所謂的后端,指的是處理服務(wù)器請求的數(shù)據(jù)接入層。它需要肩負(fù)著處理很多請求(大于100請求每秒)和快速處理請求(平均處理時(shí)間小于300ms)的職責(zé)。而那些可以被提前計(jì)算,或者是不需要直接展示給客戶端的繁重計(jì)算的工作,則并不適合用后端進(jìn)行處理。這些工作可以通過其他的語言通過另外的方式實(shí)現(xiàn)。后端也并不直接處理對用戶的展現(xiàn),這是前端應(yīng)該做的。但是后端開發(fā)者,應(yīng)該對如何給前端提供數(shù)據(jù)有著清晰的認(rèn)知。我所見過最清晰的方式就是在前后端之間使用純Restful API進(jìn)行交互。

            后端語言也應(yīng)該很容易校驗(yàn)前端發(fā)來的數(shù)據(jù),方便的連接數(shù)據(jù)庫,以及從文件系統(tǒng)保存或是獲取文件。

            在接下來的篇幅中,我會描述語言的安全性。但這并不意味著你不能用不安全的語言寫出安全的代碼,而是不同語言編譯器能夠保證你的代碼不出現(xiàn)某些特定的bug。舉例而言,C的編譯器并不進(jìn)行邊界檢查,因此它是一種非常不安全的語言。而那些可以被自動(dòng)工具檢查出來的錯(cuò)誤包括:

            • 語法錯(cuò)誤
            • 讀越界
            • 內(nèi)存溢出(C/C++并不檢查,但在java中幾乎不可能)
            • 未被使用的變量
            • 類型問題:這個(gè)問題略微有些模棱兩可,因?yàn)樵诿糠N語言你都能寫出強(qiáng)類型的代碼。但是在一些語言中,類型更為常見。有些語言同樣也使用類型系統(tǒng)來發(fā)現(xiàn)錯(cuò)誤。舉例而言,php從這個(gè)意義上來說十分不安全。連123=="123ab"都可以為true。 Python稍微安全一點(diǎn),但你卻可以隨意的返回值。Java相比之下安全多了。Haskel從這個(gè)層面來說更加安全,因?yàn)樗膹?qiáng)類型系統(tǒng)會拒絕執(zhí)行任何無意義的表達(dá)式,同時(shí)也不會進(jìn)行任何形式的強(qiáng)制轉(zhuǎn)換。

            在程序的運(yùn)行時(shí),也有一些錯(cuò)誤會被發(fā)現(xiàn)。而在不同的語言中,對這種運(yùn)行時(shí)錯(cuò)誤的處理完全不同。舉例來說,C和C++會默默的失敗。(就像這個(gè)鏈接里說的) 這當(dāng)然是很不好的。相比C/C++對越界錯(cuò)誤的忽略,Rust則會發(fā)出明顯的提示。(之前的heartbleed是一個(gè)典型的例子,可以看看這篇文章

            當(dāng)然了,所有這些問題都可以通過良好的測試來發(fā)現(xiàn)。但是,能夠被自動(dòng)化的過程越多,當(dāng)你測試不那么充分的時(shí)候,可能發(fā)生的意外也就越少。

            Java

            Java是跑在Java虛擬機(jī)的面向?qū)ο蟮恼Z言。對于商業(yè)網(wǎng)站而言,java是使用最廣泛的語言。為什么呢?

            上述是Java的優(yōu)點(diǎn),那么它的缺點(diǎn)呢:

            • 非常笨拙的語法。為了完成一個(gè)功能,你可能要打很多字。。當(dāng)然自動(dòng)補(bǔ)全是必不可少的,但是要打的東西還是不少。代碼越多,維護(hù)起來成本越高。
            • 要把一個(gè)工具跑起來難度很高
            • 那些被設(shè)計(jì)用來擴(kuò)展的super-abstract結(jié)構(gòu),事實(shí)上可能永遠(yuǎn)不會被用到。
            • 因?yàn)闆]有指針的存在,Java不能訪問越界的數(shù)組,所以比C/C++安全一些。那些煩惱你的內(nèi)存溢出也幾乎不存在了。但是付出的代價(jià)就是,語法更加的復(fù)雜,而且你如果一不小心,就會掉入Java中得不安全的陷阱。
            • 速度和內(nèi)存使用量:Java在速度上并不突出,而在內(nèi)存使用上則是相當(dāng)?shù)亩唷5沁@并沒給它的大范圍使用帶來太多的問題。感興趣的可以看看這篇文章

            對于Java還可以參考以下文章:

            Javascript: Node.js

            Node.js自從2009年發(fā)布一下,使用十分廣泛。Node.js具有異步,事件驅(qū)動(dòng)以及可擴(kuò)展的特性。Node.js應(yīng)用是由JavaScript開發(fā)的,因此它具有JavaScript的所有優(yōu)點(diǎn):

            • 享受到了JavaScript V8引擎的好處
            • 靈活而輕量級的語法
            • 跟Java一樣,JavaScript出現(xiàn)在1995年。所以語言本身發(fā)展歷史很長,相對穩(wěn)定。 

            還有什么要補(bǔ)充的?

            • Node很快,而且可擴(kuò)展。(參考 Performance Comparison Between Node.js and Java EE
            • JavaScript不太安全。即使很小的語法錯(cuò)誤也只會在執(zhí)行的時(shí)候暴露出來。因此單元測試十分重要。
            • Node.js被LinkedIn,Yahoo!, Uber, Paypal使用
            • 有很多人從Node.js轉(zhuǎn)向了Go 1 2 3

            參考:

            Go

            Go是由Google開發(fā)的,靜態(tài)類型的編譯語言。它直到2009年才出現(xiàn),十分短暫。

            • Go提供了那些你進(jìn)行web開發(fā)需要的基本工具 
            • 有不錯(cuò)的教程和一些web開發(fā)的材料
            • 有一些任務(wù)在Go語言中超過預(yù)期的復(fù)雜,比如排序,詳見link
            • Go有一些跟其他語言完全不同的diffuser,比如如果你想聲明一個(gè)public方法,那這個(gè)方法的第一個(gè)字母一定要是大寫的。還有未被使用的變量會導(dǎo)致編譯錯(cuò)誤。

            參考:

            C

            C#是由微軟開發(fā)的具有靜態(tài)類型的編譯語言。但是它卻有很多動(dòng)態(tài)特性。 它出現(xiàn)在2000年。而針對web開發(fā)的框架ASP.NET直到2002年才發(fā)布。

            C#的生態(tài)系統(tǒng)包括:

            我對C#/ASP.NET的理解并不深入,因此無法更詳盡的分析它的優(yōu)略。

            Python

            python是現(xiàn)在在用的最古老的語言之一。它最早出現(xiàn)于1991年。Python是具有動(dòng)態(tài)的類型,面向?qū)ο蟮慕忉屝哉Z言。而且它具有函數(shù)編程的特性。 
            盡管我曾經(jīng)在很多項(xiàng)目中使用過Python,但并不包括web項(xiàng)目。因此那些重要的工具和框架可能會被遺漏:

            我認(rèn)為Python最主要的優(yōu)勢在于代碼容易撰寫,而且可讀性很高。我對Python顯然是有偏愛的,而且我堅(jiān)信很多人和我有著同樣的觀點(diǎn)。

            PHP

            PHP是動(dòng)態(tài)類型的服務(wù)器端語言,它在1995年被推出。

            PHP最大的優(yōu)勢是學(xué)習(xí)門檻低。它基本可以在任何地方被執(zhí)行,托管和非常簡單。Wikipedia使用的就是PHP,所以很明顯使用PHP來創(chuàng)建可用的大型網(wǎng)站是可行的。 
            這里寫圖片描述

            Hack

            Hack是由Facebook在2014年開發(fā)的編程語言。它是PHP的變體。它與PHP最主要的不同在于:

            • 函數(shù)參數(shù)和返回值是指定類型的
            • Hack并不完全支持PHP的一些特性source,比如goto、可變變量、字符串自增,這有時(shí)候也挺好的。

            參考:

            Rust

            Rust是很安全的語言,但是對于它在生產(chǎn)環(huán)境的使用,仍有疑慮。

            參考:

            其他

            Ruby with Rails: 我知道它應(yīng)用廣泛,但是我對Ruby的了解并不充分。Ruby的語法與Python類似。

            參考

            結(jié)論

            仔細(xì)想來,對我來說以下的語言更適合我做后端:

            • Go:很快,而且是編譯型的
            • node.js: 很好的可擴(kuò)展性
            • Python: 這是我最了解的語言。除此之外,它有非常清晰的語法,很好的社區(qū)開發(fā)的變法風(fēng)格,以及易讀性。

            對我來說不適合的語言:

            • PHP: 因?yàn)檎Z言的不一致,導(dǎo)致建立穩(wěn)定的后端沒那么簡單。
            • C#: 這個(gè)語言太以微軟為中心了
            • Java:語法有點(diǎn)拖沓,成本高。

            其他語言可能也是很好的選擇,只是我知之甚少。我對rust在后端使用的可行性非常好奇。Hack語言非常年輕,讓我們對它未來的發(fā)展拭目以待。

            原文鏈接:http://martin-thoma.com/languages-for-back-ends/#tocAnchor-1-11

            posted on 2016-12-28 10:03 思月行云 閱讀(1187) 評論(0)  編輯 收藏 引用 所屬分類: C\C++
            精品国产VA久久久久久久冰| 久久久久噜噜噜亚洲熟女综合| 久久午夜无码鲁丝片秋霞| 久久久久久综合网天天| 久久天天躁狠狠躁夜夜网站| 曰曰摸天天摸人人看久久久| 欧美午夜精品久久久久久浪潮| 中文字幕热久久久久久久| 色偷偷888欧美精品久久久| 99久久综合国产精品免费| 精品永久久福利一区二区| 久久精品国产WWW456C0M| 97久久国产综合精品女不卡| 欧美久久精品一级c片片| 久久婷婷五月综合97色直播| 品成人欧美大片久久国产欧美...| 伊人久久综合精品无码AV专区| 夜夜亚洲天天久久| 久久亚洲国产成人精品性色 | 日韩精品无码久久一区二区三| 18禁黄久久久AAA片| Xx性欧美肥妇精品久久久久久| 7777精品久久久大香线蕉| 色播久久人人爽人人爽人人片aV| 中文字幕乱码久久午夜| 伊人情人综合成人久久网小说 | 亚洲午夜无码AV毛片久久| 亚洲国产精品久久久久婷婷老年| 亚洲日韩中文无码久久| 日本WV一本一道久久香蕉| 久久亚洲2019中文字幕| 国产成人精品久久亚洲高清不卡| 久久精品成人免费看| 久久er99热精品一区二区| 久久水蜜桃亚洲av无码精品麻豆 | 青青国产成人久久91网| 国产精品久久国产精品99盘| 久久综合噜噜激激的五月天| 国产成人精品综合久久久久| 精品无码久久久久国产动漫3d| 欧美久久一区二区三区|