【正文】
orm. 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, network 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.iii第一章 緒論 隨著網(wǎng)絡(luò)技術(shù)的發(fā)展和網(wǎng)絡(luò)平臺的推廣,越來越多的應(yīng)用是基于網(wǎng)頁形式來提供。基于對不同平臺現(xiàn)有框架分析提取出本框架的功能點。目前 web 應(yīng)用中,普遍使用了MVC模式(即ModelViewController,模型,視圖,控制器)。使得javascript也能實現(xiàn)了諸如文件系統(tǒng)、操作系統(tǒng)、網(wǎng)絡(luò)通信等功能。Node運行在Chorme的V8引擎上,采用異步I/O與事件驅(qū)動的架構(gòu)設(shè)計和單線程模型,并且內(nèi)置了HTTP服務(wù)器,主要用于構(gòu)建高性能,高并發(fā),高擴展的服務(wù)器。如基于 JAVA EE 的Struts2 + Spring3 + jsp MVC模式等 。這些功能點包括 路由轉(zhuǎn)發(fā)與映射,屬性注入,Cookie實現(xiàn),Sesison實現(xiàn)等。其中javascript是網(wǎng)頁應(yīng)用技術(shù)中不可缺少的一部分。它的特殊性決定了它不僅可以作為一門開發(fā)編程語言,也可以像Ruby、Pythond等語言一樣作為一個開發(fā)者平臺。而在Node中,后臺容器 用C++語言設(shè)計把服務(wù)器和容器本身融合在一起,采用 瀏覽器 后臺容器 模式進行請求應(yīng)答,大大提高了通信的效率。 自身融合入HTTP 服務(wù)器,這對于組合網(wǎng)站和服務(wù)器是非常簡單方便的。使用 平臺好處之一在于不用額外搭建 HTTP 服務(wù)器, 本身融合的Http服務(wù)器既可以作為開發(fā)階段的調(diào)試環(huán)境也可以直接作為產(chǎn)品提供給客戶使用。事件驅(qū)動與異步式I/O模型。不斷地循環(huán)執(zhí)行事件然后等待下一個事件的觸發(fā)。 進程在進行事件處理時具有時間的唯一性,它不會同時處理多個事件請求,在處理完一個事件后就進程就進入下一個事件循環(huán),檢查并繼續(xù)處理后面的事件。 除了使用Google的Chrome V8 作為JavaScript引擎,它還使用了高效的 libeio和庫libev支持事件驅(qū)動和異步式 I/O。(1)大規(guī)模的社交網(wǎng)絡(luò) Web 應(yīng)用,如微博,F(xiàn)aceBook等。與大多數(shù)新語言平臺本質(zhì)一樣, 也是舊瓶裝新酒。于是另一個問題出現(xiàn)了,盡管是單用戶,卻不一定是執(zhí)行單任務(wù)。(2)編碼與國際化 不支持完整的UTF8字符編碼,很多字符無法用string 表示。因此無法表示某些生僻漢字,以及一些較為罕見語言的文字。原有的定長編碼的UCS2系統(tǒng)為了變長的UTF16編碼進行了升級處理,所以只有它向下兼容UCS2。這個缺陷存在于現(xiàn)有的所有JavaScript 引擎。舉個例子,如要實現(xiàn)以下邏輯:從銀行取錢,用錢去購買一個虛擬商品,買完以后加入庫存數(shù)據(jù)庫,這中間的任何一步都會涉及數(shù)十次甚至更多的的I/O操作,而且任何一次操作失敗以后都需要進行回滾操作。但實際上多線程通過較大的開銷也能達到同樣的吞吐量,而且不必為多核環(huán)境進行特殊的配置。一般的處理辦法是后臺處理完成后給前臺客戶端異同處理完成的通知。直接使用底層接口做開發(fā)需要分析大量的協(xié)議內(nèi)容。如基于 JAVA EE 的Struts2 + Spring3 + jsp MVC模式等 。這些功能點包括 路由轉(zhuǎn)發(fā)與映射,屬性注入,Cookie實現(xiàn),Sesison實現(xiàn)等。由于平臺的新穎性,多數(shù)API 還處在變化之中,因此設(shè)計開發(fā)該框架主要存在以下一些問題。主要表現(xiàn)在兩個方面,一是新平臺國內(nèi)研究使用的人暫時不多,遇到問題無法立馬得到咨詢有效的解決。缺乏良好的桌面開發(fā)環(huán)境,對于類Unix系統(tǒng)的使用,如Linux的發(fā)行版Ubuntu有生疏性,無法得心應(yīng)手。(6),對于一些常用操作,如Cookie,Seesion等都需要根據(jù)Http頭信息重新實現(xiàn),難度較大。第二章 開發(fā)工具及技術(shù)綜述本章主要是介紹框架設(shè)計與實現(xiàn)過程中主要使用到的設(shè)計工具、開發(fā)工具、開發(fā)平臺以及javascript的一些高級語言特性。具有代碼補全、終端編譯及錯誤跳轉(zhuǎn)等提供編程效率的功能。命令組合: Vim強大的編輯能力中很大部分是來自于其普通模式命令。vim針對程序語言代碼編寫者。其中插入模式和命令模式之間無法直接轉(zhuǎn)換。能夠大大加強對代碼的掌握程度。版本控制系統(tǒng)的好處在于它可以將一個或者多個代碼文件恢復到以前的某個狀態(tài),不僅如此它還可以將整個工程都回溯到過去的某個時間點。 Git介紹Git也是眾多版本控制系統(tǒng)中的一員。每一個文件都只有存在三種狀態(tài):已提交,已修改和已暫存。 Git與其他版本控制系統(tǒng)Git 和其他版本控制系統(tǒng)的主要差別在于,其他版本控制系統(tǒng)只關(guān)心文件內(nèi)容發(fā)生的差異變化。下面介紹javascript的相關(guān)語言特性變量的作用域結(jié)構(gòu)化編程語言中的一個重要概念是作用域,變量的可見范圍和生命周期就是由作用域所決定。這個特性被大多數(shù)人忽視并誤解,從而導致了非常多的莫名其妙的錯誤。 // 輸出 value這是因為 JavaScript 的作用域完全是由函數(shù)來決定的,if、for 語句中的花括號不是獨立的作用域。全局作用域中的變量不論在什么函數(shù)中都可以被直接引用,而不必通過全局對象。函數(shù)作用域不同于大多數(shù)類 C 的語言,由一對花括號封閉的代碼塊就是一個作用域,JavaScript 的作用域是通過函數(shù)來定義的,在一個函數(shù)中定義的變量只對這個函數(shù)內(nèi)部可見,我們稱為函數(shù)作用域??梢哉J為無論在函數(shù)內(nèi)什么地方定義的變量,在一進入函數(shù)時就被定義了,但直到 var 所在的那一行它才被初始化,所以在這之前引用到的都是 undefined 值?!?閉包有兩個主要用途,一是實現(xiàn)嵌套的回調(diào)函數(shù),二是隱藏對象的細節(jié)。JavaScript 只有對象,對象就是對象,不是類的實例。創(chuàng)建和訪問JavaScript 中的對象實際上就是一個由屬性組成的關(guān)聯(lián)數(shù)組,屬性由名稱和值組成,值的類型可以是任何數(shù)據(jù)類型,或者函數(shù)和其他對象。如:以下定義都是有效的 var obj = {}。prop_239。 = function() {()。然后就可以通過 someuser 來訪問這個對象的屬性和方法了??梢酝ㄟ^函數(shù)的任何一個引用調(diào)用這個函數(shù),不同之處僅僅在于上下文。原型原型是 JavaScript 面向?qū)ο筇匦灾兄匾母拍?。,包括函?shù)在內(nèi)都會被重復創(chuàng)建,同一個構(gòu)造函數(shù)產(chǎn)生的兩個對象不共享實例。 是所有對象的祖先, 是所有函數(shù)的原型,包括構(gòu)造函數(shù)。原型對象特指構(gòu)造函數(shù) prototype 屬性指向的對象。在 JavaScript 中,繼承是依靠一套叫做原型鏈(prototype chain)的機制實現(xiàn)的。GitHub同時提供付費賬戶和為開源項目提供的免費賬戶?! ?GitHub可以托管各種git庫,并提供統(tǒng)一web界面。Ubuntu的目標在于為一般用戶提供一個穩(wěn)定的安全的主要由自由軟件構(gòu)建而成的操作系統(tǒng),讓用戶可以擺