莊表偉 說:
JSVM,我覺得有一個方向可以嘗試去發(fā)展,就是瀏覽器中的對象管理,起到一個VM的作用
dlee 說:
問題就是你敢不敢去做小白鼠,或者叫做生活在剃刀邊上。對于一個嚴(yán)肅的項(xiàng)目,我做項(xiàng)目經(jīng)理,是不會采用jsvm的。
莊表偉 說:
那為什么你就會采用prototype呢?
dlee 說:
prototype背后有強(qiáng)大的支持,而不是像jsvm那樣只有萬春華同志等很少的幾個鐵桿。
莊表偉 說:
為什么?你是看著哪邊人多去哪邊的嗎?
dlee 說:
你看那些叫喊"頂"、"支持"、"牛"的人會不會貢獻(xiàn)一行代碼。你太容易非黑即白了。當(dāng)然不完全是這樣,不過支持能力是一個非常重要的考慮因素。
莊表偉 說:
我的意思是,JSVM,該不該用他,只能由我們看過他的代碼以后,來決定?
dlee 說:
你有能力維護(hù)所有的代碼嗎?
莊表偉 說:
我只是用他呀,又不是要改他
dlee 說:
我的意思是說,如果你在項(xiàng)目中使用了Spring,Rod Johnson玩累了,明天就宣布解散這個項(xiàng)目。你自己獨(dú)立去維護(hù)Spring的代碼。你去用什么啊,它只有很少的UI組件,其中還有問題。 你不要夸口這些自己都能開發(fā)好,我兩年前開發(fā)了一個比較好用的Grid,花費(fèi)了一周多的時間。你自己去實(shí)現(xiàn)這樣一個組件后再說話。
莊表偉 說:
我不是用他的UI呀,而是用他的這個框架,來組織自己的代碼。
dlee 說:
你不用它的UI,有什么必要使用這個框架呢?dojo/prototype一樣可以做到啊,我是認(rèn)為你這樣做引入了不必要的成本。況且你如何判定使用的UI庫在設(shè)計(jì)理念上與jsvm完全沒有沖突?
莊表偉 說:
OK,你現(xiàn)在已經(jīng)有結(jié)論了,但是我還沒有仔細(xì)看過他的代碼呢,所以我現(xiàn)在還沒有結(jié)論,等我看過以后,自然會有一個結(jié)論的。
dlee 說:
在Ajax庫這方面,大部分人都跟我希望的一樣,需要一個全面的解決方案。你說的jsvm專精于做某個領(lǐng)域,我認(rèn)為是行不通的。任何運(yùn)行于瀏覽器的js框架都應(yīng)該是為UI服務(wù)的。沒有實(shí)現(xiàn)過很多UI組件,如何檢驗(yàn)它的這個架構(gòu)設(shè)計(jì)的合理性?
莊表偉 說:
目前看來,prototype,也只是專精于基礎(chǔ)領(lǐng)域的,在它之上,另有script.aculo.us、Rico、Behaviour這樣的lib
dlee 說:
你喜歡擺擂臺,那么就擺個擂臺,大家都實(shí)現(xiàn)Grid組件,看看誰做得好。
莊表偉 說:
呵呵,這倒是個好辦法
dlee 說:
你可以跟醒來來詳細(xì)討論,問題不是你想想得那么簡單。做小白鼠也有好處,曉鋼就經(jīng)常偷偷練習(xí)一些自己的獨(dú)門絕技。
莊表偉 說:
呵呵
dlee 說:
你可以將我跟他的沖突理解為主要在一個領(lǐng)域,就是我不認(rèn)為解決他所說的兩個問題,需要這么重的方案。而且他的解決方案從JS開發(fā)者的角度看來也不是很優(yōu)雅。
莊表偉 說:
嗯,這兩點(diǎn),我基本上是同意的
dlee 說:
萬春華同志的興趣不在UI組件方面,這使得他偏離了瀏覽器JS誕生的使命。今天我跟醒來說過類似的意思。 我們的分歧不完全在技術(shù)本身上面。因?yàn)槲覀兯伎紗栴}的思路差別很大,所以沒有出現(xiàn)很大的交集
莊表偉 說:
嗯,我比較理解你的意思了,但是,我不是很同意...
dlee 說:
你看過他們的代碼了嗎?
莊表偉 說:
看了一些
dlee 說:
代碼的模塊程度如何?有沒有可能將醒來說的一些部分完全去掉?
莊表偉 說:
哪些部分?
dlee 說:
我覺得他們?nèi)绻鲆恍└忧逦膭澐郑瑒澐殖鲆粋€最小的core部分,而且像Spring那樣劃分成很多不同的jar,這樣會更好一些。最糟的情況是要么全有要么全無
醒來 已經(jīng)添加到此對話中。
dlee 說:
你既然對jsvm非常感興趣,就和醒來先詳細(xì)談?wù)?。我作為旁聽好了?/SPAN>
莊表偉 說:
呵呵,好的呀
醒來 說:
好啊,我 最近剛看了jsvm的源碼
莊,你覺得jsvm怎么樣
莊表偉 說:
我剛開始看他的代碼。說實(shí)話,我覺得他的js代碼寫得非常好,也很干凈、清楚。因此,這樣的一個人,寫出這樣水平的代碼的人,對于js的理解,肯定是相當(dāng)深入的。
醒來 說:
代碼寫的是真不錯
莊表偉 說:
我以前曾經(jīng)想當(dāng)然的認(rèn)為,他不了解js,只喜歡java,所以才會把js,扭曲成java的樣子這樣的想法,肯定是偏見。那么,在承認(rèn)對方有足夠的智力與經(jīng)驗(yàn)的前提下,再來看他的代碼,我覺得更不該"斷然否定",說他"一無是處"。
醒來 說:
我在javaeye 上提出了我的意見,我也認(rèn)為他的代碼寫得很不錯,但是側(cè)重點(diǎn)有點(diǎn)不合時宜?,F(xiàn)在真是有些像java虛擬機(jī)了,基本是一個classloader + class cache 的實(shí)現(xiàn)
莊表偉 說:
還有這個:
a) 獨(dú)立模式:standalone, 該模式下,當(dāng)前頁面的jsvm獨(dú)立加載,不和系統(tǒng)中其他頁面的JSVM發(fā)生關(guān)聯(lián)。
b) 應(yīng)用程序模式:application, 應(yīng)用程序模式下的頁面會除了加載jsvm以外,還將構(gòu)造一個Application的環(huán)境。其他模塊模式的頁面會共享Application的資源。
c) 模塊模式:module, 模塊模式的頁面必須運(yùn)行在一個Application模式的頁面下。該頁面可以通過application框架共享資源以及訪問全局變量。
d) 自動模式:auto, 頁面根據(jù)環(huán)境自動選擇是獨(dú)立模式還是模塊模式。
我覺得很有點(diǎn)意思
醒來 說:
從名字上來講,jsvm倒是符合本意。但是java的成功不是只靠一個jvm的,我覺得 jdk 更關(guān)鍵
莊表偉 說:
現(xiàn)在的js庫,除了jsvm,都是以一個Page為單位運(yùn)行的,鮮有"Application"的概念。而VM的提出,我認(rèn)為,為將來合理的Browser Object Cache Layer,提供了可能
醒來 說:
我有點(diǎn)懷疑,這樣帶來的復(fù)雜性有沒有必要
莊表偉 說:
而且我還希望將來JSVM,能夠更好的支持請求任務(wù)隊(duì)列的管理,這樣的機(jī)制,JS的語法本身提供得并不夠好。還有多線程的管理,JS也沒有像Java那樣的,語法級的支持。
dlee 說:
我不大相信瀏覽器中的JS將來會被用在這樣的目的
醒來 說:
其實(shí)我覺得,這些應(yīng)該是瀏覽器提供的功能,在瀏覽器未發(fā)展到這個程度之前,強(qiáng)迫javascript畸形的實(shí)現(xiàn),不一定值得
莊表偉 說:
嗯,這是問題的關(guān)鍵...我前面的暢想,的確是我希望將來的JS,能夠支持的一部分
dlee 說:
是的,我們希望將來的JS引擎來提供這些基礎(chǔ)設(shè)施
莊表偉 說:
現(xiàn)在JSVM,也許能夠支持一部分,也許還不能夠,所以,說不定哪天JS 2.0出來,JSVM就沒有意義了
醒來 說:
所以對于jsvm的模式,應(yīng)用程序模式還可以理解,模塊模式很難讓人明白有什么用
莊表偉 說:
這是一個思考模式的問題
假設(shè)你對于js本身不熟悉,要讓你合理、自然的劃分多個js文件,合理、自然的在該load的時候才去load,這就相當(dāng)?shù)馁M(fèi)力
醒來 說:
所以我的意見就是,jsvm 希望吸引人來開發(fā),應(yīng)該要給出jsdk 差不多,一個jsvm 吸引不了人
莊表偉 說:
當(dāng)然,更加正確的道路,當(dāng)然是按照js的本性來做,提出某種"js loading design pattener"。但是,在經(jīng)驗(yàn)還沒有被總結(jié)成模式之前,模仿java式的代碼組織,不失為一種方案
醒來 說:
load js 的模式其實(shí)現(xiàn)在都是 用一個同步的xmlhttprequest 去加載js,然后eval。這個 dojo 和 prototype 都有提供基礎(chǔ)支持
莊表偉 說:
不是如何loading。而是,我現(xiàn)在有幾百K的js文件,如何切分成合理的大小,然后在需要的時候去調(diào)用他們
醒來 說:
這個想法是對的,也是jsvm值得肯定的地方
我的主要意見是說它提供的 jsc 的形式有點(diǎn)雞肋,同時缺乏簡單高效的工具類,所以吸引不了開發(fā)人員。jsvm2 的代碼里有 1/3 就是為了支持這個自創(chuàng)的jsc語法
莊表偉 說:
這是...敗筆...。jsc我也不喜歡,混雜了部分js語法和部分java語法...還不如僅僅規(guī)定一個必須的頭部,其他的完全采用js語法呢。還有一點(diǎn)我覺得是這個萬兄在那里暢想,就是JSVM打算支持多種語法的設(shè)想,工作量太大了。
dlee 說:
不過萬春來同志說這個可以不用
醒來 說:
所以我建議索性拋棄jsc,以萬兄的javascript功力,寫一部分有用的工具類,我覺得不會有人真的愿意用 var map = new HashMap(), map.put(k, v); 這樣的方式寫js
莊表偉 說:
對的
dlee 說:
所以我剛才說:
我覺得他們?nèi)绻鲆恍└忧逦膭澐?,劃分出一個最小的core部分,而且像Spring那樣劃分成很多不同的jar,這樣會更好一些。最糟的情況是要么全有要么全無。
醒來 說:
jsc 是可以不用,但jsvm 加載了接近80k的js就為了支持jsc, 沒有意義啊
莊表偉 說:
他現(xiàn)在是有多個js的,只是他core的部分太大了
醒來 說:
莊,如果你去看runtime.js 就知道了,jsvm2其實(shí)把jsc都預(yù)先編譯了,否則效率一定太低
現(xiàn)在甚至還有一些觀點(diǎn),不要把js分得太多,因?yàn)橐ぐl(fā)太多的http連接,反而響應(yīng)性更不好。畢竟js的加載是同步的 ,這各ajax的異步核心思想有沖突。
dlee 說:
這個考慮也是很有道理的
莊表偉 說:
激發(fā)太多的http連接?還是激發(fā)太多的同步http連接?
dlee 說:
那個所謂的classloader就是向服務(wù)器請求一個包含js類的文件,然后evaluate。而且也要考慮evaluate的執(zhí)行效率
醒來 說:
每一個import 就是一個http 連接。當(dāng)然,jsvm 考慮到了cache
dlee 說:
對的,就是發(fā)出一個xmlhttp請求
莊表偉 說:
其實(shí),他完全可以將自己的jsdk,做成一個jsc文件,一口氣load進(jìn)來
dlee 說:
不是多個連接,這個要看服務(wù)器怎么配置。其實(shí)支持http1.1的瀏覽器和服務(wù)器都是保持長連接
醒來 說:
jsvm的cache 也有些問題,他所謂的application模式,在不同的瀏覽器上實(shí)現(xiàn)各不相同,ie是js源碼用ie的htc 技術(shù)保存的,ff 是存cookie。cookie 的容量是有限制的,所以cache 主要是針對 ie。
dlee 說:
可能是在同一個http連接上發(fā)送多個http請求,這些請求需要排隊(duì)
莊表偉 說:
OK,我提一個方案,你們看是不是可以作為"最佳實(shí)踐"之一:
對于多個異步請求,可以讓他分次異步提交。
對于多個同步請求,應(yīng)該將多個請求打包以后一次提交。
這個作為"請求隊(duì)列管理"的一部分
醒來 說:
道理應(yīng)該是這樣,jsvm里好像沒有這樣的控制,import語句也沒有這么智能
莊表偉 說:
其實(shí)jsvm應(yīng)該這么做,比如他load一個jsc文件進(jìn)來,里面的import語句可能有一堆,就應(yīng)該是一口氣load其他的jsc,不該再分多次了
醒來 說:
我總覺得 線程/隊(duì)列 這些該是瀏覽器的事情,用js開發(fā)很不保險(xiǎn)
莊表偉 說:
你看過我寫的那個RSSReader的代碼嗎?里面就有一個請求隊(duì)列的
醒來 說:
jsvm做不到,因?yàn)?/SPAN>load的jsc里又有import 語句,這是遞歸的
莊表偉 說:
不是遞歸,是分層的
醒來 說:
要么js語言升級,要么瀏覽器升級,我總覺得現(xiàn)階段就想讓ajax完全達(dá)到替代桌面應(yīng)用的程度是不可能的
莊表偉 說:
這個當(dāng)然是不可能的...
醒來 說:
所以在現(xiàn)階段,還是不要搞復(fù)雜了,多線程和隊(duì)列能用到的地方畢竟不多
我覺得dlee強(qiáng)調(diào)的對的,現(xiàn)在需要的是組件
語言級別的東西,就讓js語言和瀏覽器標(biāo)準(zhǔn)去慢慢支持吧
莊表偉 說:
我理解你們所認(rèn)為的"輕重緩急"了。根本的觀點(diǎn)在于:"急于將瀏覽器中應(yīng)用,推向完全的桌面應(yīng)用,并不現(xiàn)實(shí)"。立足于"更好的瀏覽器端應(yīng)用",而非"盡可能像桌面應(yīng)用的瀏覽器端應(yīng)用",這么說來,當(dāng)務(wù)之急自然是UI控件的完善與豐富
dlee 說:
我覺得瀏覽器中js誕生的使命就是改善交互和UI
醒來 說:
對,就是這個意思
dlee 說:
而且我從項(xiàng)目開發(fā)負(fù)責(zé)人的角度,更希望一個全面的解決方案。不是什么都需要我去做集成
莊表偉 說:
JSVM的問題,不在于他語法上像Java,而在于他的目標(biāo)上像Java!
dlee 說:
也可以這樣來理解
醒來 說:
ajax 里的cache 應(yīng)該是去cache 數(shù)據(jù),用來cache js代碼,意義多大呢,所以jsvm太技術(shù)化了
dlee 說:
在Ajax in Action中,提出了一種獨(dú)占式應(yīng)用。就是像Word一樣,可能每天都要用上幾個小時。目前的Ajax技術(shù),包括一些基礎(chǔ)框架,還很難達(dá)到這個要求。所以確實(shí)需要這樣一類基礎(chǔ)架構(gòu),但是我們認(rèn)為這些支持最好由瀏覽器和JS引擎來提供。
莊表偉 說:
看來我們已經(jīng)初步達(dá)成共識了
醒來 說:
js 就是用來操作DOM的,不要讓它承擔(dān)太多重任,xmlhttp本來也不是 js的一部分,瀏覽器的擴(kuò)展而以
dlee 說:
我發(fā)現(xiàn)現(xiàn)在很多人有一個通病。就跟我在那個ajax和model2框架的討論中說的那樣。毫不思考地就將一種技術(shù)或者架構(gòu)用于設(shè)計(jì)意圖之外的場合。其實(shí)把IFrame用于異步請求也是這個情況
醒來 說:
對jsvm 的建議就是拋棄jsc,完善它自己的面向?qū)ο蠹軜?gòu),并提供工具類支持,這樣才有可能和 dojo 有競爭。所以在國外是稱為 tricks, 是有貶義的意思,但翻譯成中文,變成竅門,反而有了褒義了
dlee 說:
Ajax in Action的作者稱作hacky的做法,帶有貶義
dlee 說:
令Ajax顯得與眾不同的地方不是它所使用的技術(shù)本身,而是通過使用這些技術(shù)所帶來的新的交互模式。我們所習(xí)慣的傳統(tǒng)的Web交互模型并不適合于獨(dú)占式的應(yīng)用,只有打破了這種交互模型,新的可能性才會慢慢浮現(xiàn)出來。
這是Ajax in Action的一句話,說得非常有道理。我們看到如此眾多的人都對Ajax感興趣不是偶然的。現(xiàn)在我們處在web app發(fā)生革命性變化的前夕
莊表偉 說:
嗯,我更關(guān)注:慢慢浮現(xiàn)出來的這些可能性中,哪些是正道,哪些是邪道
醒來 說:
我是覺得一定要擦亮眼睛,多從用戶的角度想問題
莊表偉 說:
這是對的
posted on 2006-03-02 22:05
讀書、思考、生活 閱讀(1877)
評論(1) 編輯 收藏