【正文】
separate language,but a new software development platform. Just like the Python and the Ruby, they are both language and transplant the javascript from your browser to a mon server. That makes JavaScript can achieve as file systems, operating systems, work munications, and other is always running in Chorme V8 engine, with asynchronous I / O and eventdriven architecture design and singlethreaded model, and builtin HTTP server, mainly for building highperformance, highconcurrency, highly scalable really get a high performance ,while the package of bottom part is low example, the mon data requested need analysis of HTTP and analyze the required data from the request data stream,without providing a rich java web style offered an advantage and a disadvantage. The advantage is that it provided the developers with a lot of freedom so that the developers can use the lowlevel interface to plete a variety of functions, while the disadvantage is that the direct use of the lowlevel interface for system application development got very low efficiency, because of the analyzing and processing for the various kinds of data need a lot of is just carried our, in our country, the framework used the in doing application development is still lacking. A directly use of the underlying to work on an application development may be much more difficult. In order to deal with this kind of situation, this article will describe a design of a simple and small MVC framework to simplified the use of , and to improve the development efficiency at the same time. Nowadays, Web applications get a wide use of the MVC pattern (ModelViewController, Model, View, Controller). Such as the Struts2 + Spring3 + jsp MVC model based JAVA EE . Learning from the structure and function of these existing framework, this article try to describe the design and development of FastJsonWeb framework. This framework will pack the underlying interface, and provide a unified and concise manner to the request data, which will improve the development efficiency a lot. This article will extract the framework function points according to the analysis of the existing framework of different platforms. These function points include the route forwarding and mapping, property injection, cookie achievement and Sesison achievement and something more. 第 3 頁 共 62 頁 第一章 緒論 介紹 隨著網(wǎng)絡(luò)技術(shù)的發(fā)展和網(wǎng)絡(luò)平臺的推廣,越來越多的應(yīng)用是基于網(wǎng)頁形式來提供。由于javascript 在瀏覽器端具有極高的執(zhí)行效率,并且兼容多種流浪器,這促使其中一部分人思考是否可以把 javascript 放在服務(wù)端運行,能夠像其他 web 語言一樣提供業(yè)務(wù)邏輯處理。 目前 web 應(yīng)用普遍采用 Tomcat,Apache Server,IIS等做 HTTP 服務(wù)器, HTML,CSS javascript 做前端展示,以 瀏覽器 服務(wù)器 后臺 容器 模式來進行請求應(yīng)答。因此,采用 web應(yīng)用或者企業(yè)應(yīng)用能夠較大程度的降低硬件成本和提高應(yīng)用處理業(yè)務(wù)的效率。比如,在使用 PHP 進行業(yè)務(wù)系統(tǒng)開發(fā),首先必須搭建一個 HTTP 服務(wù)器如 Apache, IIS 之類。 既可以在網(wǎng)絡(luò)環(huán)境下運行也可以非網(wǎng)絡(luò)的環(huán)境下運行,如即時編譯終端。傳統(tǒng)架構(gòu)對于高并發(fā)的解決方案是采用多線程模型,也就是一個系統(tǒng)線程處理一個業(yè)務(wù)邏輯,通過系統(tǒng)線 程切方式彌補同步式 I/O 的時間開銷?;谑录漠惒教幚頇C制的 對于所有的網(wǎng)絡(luò)通信、磁盤讀寫、數(shù)據(jù)庫操作等都以異步請求的方式實現(xiàn),最后將執(zhí)行得到的結(jié)果交給事件循環(huán)進行處理。在應(yīng)對惡意訪問方面, 對于低速的 DOS 攻擊, 只增加事件堆棧中的請求請求樹立,而不會馬上給出請求應(yīng)答,這樣有效的減少了線程資源的開銷,很大程度上提高了 Web 應(yīng)用的健壯性和安全性。在 Windows 下, libuv 使用了 Windows 的 IOCP( Input/Output Completion Port,輸入輸出完成端口)機制,實現(xiàn)高性能,而對于 Linux、 UNIX,Mac OS X 等操作系統(tǒng), 的 libuv 庫通過使用 libeio 和 libev 的封裝來利用 kqueue 或 epoll。 (2)具有復(fù)雜邏輯的網(wǎng)站;如一般的 MIS系統(tǒng)。 平臺的非擅長領(lǐng)域 一個優(yōu)秀的平臺能夠吸引大量開發(fā)者的關(guān)注。與大多數(shù)新語言平臺本質(zhì) 一樣, 也是舊瓶裝新酒。但如果面對的是單用戶,譬如本地的命令行工具或者圖形界面,那么就不存在所謂的大量并發(fā)請求。多進程的 往往是在執(zhí)行同一任務(wù),通過多進程利用多處理器的資源,但遇到多進程相互協(xié)作時, 的短板就出現(xiàn)了。明顯,漢字就不止這個數(shù)目。隨后 Unicode 意識到用 2 個字節(jié)表示所有字符是遠遠不夠的,隨后推出了 UCS4 編碼,即用 4 個字節(jié)來表示一個 Unicode 字符。 JavaScript 當(dāng)下支持的仍是定長的 UCS2 編碼 而不是 UTF16,因此對于處理使用 UCS4 進行編碼 的字符無能為力。 ( 3)復(fù)雜邏輯的事務(wù) 的控制流是非線性的,它由一個個事件響應(yīng)組成,但人的思維卻是線性的,當(dāng)試圖轉(zhuǎn)換思維來適應(yīng)語言或編譯器時,就得付出性能或者編碼方面的代價。 ( 4)需要大量計算的程序 (在 版本以前)不支持多線程。如果應(yīng)用是需要進行大量的 第 8 頁 共 62 頁 計算除非人為地分開計算,否則將會有相當(dāng)大的請求響應(yīng)延遲。 只提供底層的 接口?;诖它c,本論文開發(fā)設(shè)計一個簡單小型的 MVC 框架,簡化 的使用難度的同時提高開發(fā)效率。本框架將封裝 的底層接口,對請求數(shù)據(jù)等提供統(tǒng)一簡潔的方式,從而較大幅度的提升開發(fā)效率。在現(xiàn)有的已存在的 Node 的 MVC 框架中,如 Express,已經(jīng)能夠滿足大多數(shù)業(yè)務(wù)邏輯 ,但是因為是 國外開發(fā),其文檔資料大多數(shù)是英文編寫,需要高昂的學(xué)習(xí)成本,而且大多數(shù)功能對于一般的應(yīng)用是冗余的,加之配置復(fù)雜,遇到問題無法得到有效快速的解決途徑,貿(mào)然采用存在大的風(fēng)險。如果跟隨版本變化則框架的穩(wěn)定性無法保證。問題的交流只能在 Stack Overflow 等國外論壇但是是英文環(huán)境,交流存在一定的困難。如今不管哪個系統(tǒng)平臺下, javascript 開發(fā) IDE 都很少,或者難以使用,缺乏有效的調(diào)試工具,編碼效率得不到提高。 以上七點主要是分析了 平臺存在 的不足和一些設(shè)計實現(xiàn)的困難之處。除此以外,還將介紹在 Ubutun 下如何搭建 開發(fā)平臺。 設(shè)計理念 vim 的設(shè)計理念是組合。例如普通模式命令 dd刪除當(dāng)前行, dj代表刪除下一行 ,因為是第一個 d含義是刪除 ,j鍵代表移動到下一行 ,組合后 dj刪除當(dāng)前行和下一行。但對普通用戶而言 ,順序?qū)?、設(shè)置字體格式、翻頁讀多于隨機寫刪除操作 , 且每個動作之間本身就有很多的停頓 ,用其他 UI 編輯器(word,notePad++等 )效率反而比 VIM 高效 ,使用 vim 進行操作只會徒增代碼編寫的難度。 運用各種插件幾乎能提供所有 IDE 所具備的功能。程序員經(jīng)常需要保存系統(tǒng)代碼的所有修訂版本用來查找 bug。一旦使用版本控制系統(tǒng)關(guān)于工程,那么不管整個項目中的 文件如何改動刪除,最后也可以完整的恢復(fù)原來的某個版本。它不同于其他的版本控制器,如 svn, cvs 等之類的,它具有速度快、設(shè)計簡單、對非線性開發(fā)模式支持強(允許上千個并行開發(fā)的分支)、完全分布式、能高效管理超大規(guī)模工程項目(速度和數(shù)據(jù)量)等。因此用 Git 管理項目工程時時,代碼文件在三個工作區(qū)域內(nèi)循環(huán)存在,它們分別是: Git 的工作目錄,暫存區(qū)域,以及本地倉庫。 Git實際上可以看做一個文件系統(tǒng),不過對比普通文件系統(tǒng)它顯得非常小巧而已。作用域可以減少命名沖突,而且作用域是垃圾回收的基本單元。value39。這個對象在 對應(yīng)的是 global 對象,在瀏覽器中對應(yīng)的是 window 對象。 需要格外注意的是第三點,在任何地方隱式定義的變量都會定義在全局作用域中,即不 通過 var 聲明直接賦值的變量。 JavaScript 的函數(shù)定義是可以嵌套的,每一層是一個作用域,變量搜索順序是從內(nèi)到外。之后閉包特性被其他語言廣泛吸納。而說到 JavaScript,很少能讓人想到它面向?qū)ο蟮奶匦裕驗樗鼪]有類。對象就是類的實例,這在大多數(shù)語言中都沒錯,但在 JavaScript 中卻不適用。在 JavaScript 中,使用句點運算符和關(guān)聯(lián)數(shù)組引用是等價的,也就是說任何對象(包括 this 指針)都可以使用這兩種模式。bar39。如: function User(name, uri) { = name。byvoid39。上下文對象的作用是在一個函數(shù)內(nèi)部引用調(diào)用它的對象本身, JavaScript 的任何函數(shù)都是被某個對象調(diào)用的,包括全局對象,所以 this 指針是一個非常重要的東西。簡而言之,就是允許一個對象去調(diào)用另一個對象的成員函數(shù)。而在JavaScript 語言中,沒有類的概念。 JavaScript 中有兩個特殊的對象: Object 與 Function。用戶創(chuàng)建的對象,即用 new 語句顯式構(gòu)造的對象。構(gòu)造函數(shù)對象有 prototype 屬性,指向一個原型對象,通過該構(gòu)造函數(shù)創(chuàng)建對象時,被創(chuàng)建對象的 __proto__ 屬性將會指向構(gòu)造函數(shù)的 prototype 屬性。 GitHub 簡介 GitHub 是一個用于使用 Git 版本控制系統(tǒng)項目的共享虛擬主機服務(wù)。 GitHub 提供個人信息庫和 Wiki 網(wǎng)頁,通過一個 git 版本庫即可對這些頁面進行編輯。如果需要為一個項目貢獻代碼也是一件容易的事情︰首先點擊項目站點的“ fork”的按 鈕,然後將代碼檢出并將修改加入到剛才分出的代碼庫中,最後通過內(nèi)建的“ pull request”機制向項目負責(zé)人申請代碼合并即可。常見的 OSI 批準(zhǔn)的開源協(xié)議有 BSD, GPL, LGPL,。 BSD 開源協(xié)議 BSD 開源協(xié)議是一個自由非常大的協(xié)議。這表現(xiàn)在兩個方面,第一 BSD 運行使用對其修改后重新發(fā)布,第二,可以在 BSD 代碼的基礎(chǔ)上進行商業(yè)軟件開發(fā) 并且進行銷售。使用者也可以在需要的時候修改代碼來滿足需要并作為開源或商業(yè)產(chǎn)品發(fā)布 /銷售。采用 GPL 協(xié)議的產(chǎn)品既可