先申明一下,我討厭Ajax這個名詞。舊藥裝新瓶。(像那個80來歲的楊某一樣令人討厭,呵呵)。
正題:
Ajax所謂的異步加載,為何需要異步,可以說異步操作通常都是一個成熟的程序設計人員會盡力回避的東西。復雜度徒增,不好控制,容易出錯。
但是,這個問題放在瀏覽器上就是另外一個情形,瀏覽器上的腳本+事件通常只有一個線程。那些看是多線程的函數(shù):setTimeout,
setInterval,其實都不會插入或中斷任何一個其他的在執(zhí)行中的任務,而且一旦你的腳本尚在運行,那么不管你是否在掛起等待,所有的事件都將阻
塞。窗口重畫,拖動...也都得靠邊站著,感覺就像是某個程序進入一個死循環(huán)了。
以前得腳本都是做一些簡單得事情,需要的時間,用戶基本上都感覺不到,后來XMLHttpRequest的興起,問題出來了,訪問網(wǎng)絡資源,你得受網(wǎng)速得
限制,如果同步的獲取,那你就等吧,等個幾秒幾分幾十分的,不是不可能。這時瀏覽器可沒那么聰明,站旁邊傻等,什么窗口重畫,移動啊,都裝個沒聽見。
瀏覽器傻了,用戶可不傻,靠,這個網(wǎng)站咋的,吧我的瀏覽器都搞死了?加入黑名單,或者碰到個脾氣好點的,把你辛辛苦苦、沒日沒夜、綿綿數(shù)月敲下來的腳本,一律禁止運行... 傻了把,可憐的腳本程序員。
看似瀏覽器的問題嘛,可是,誰叫你是中年諸葛亮呢,扶不起的阿斗你也得背著,朽木上刻章方顯你的出眾嘛。于是異步操作遍地開花,第N次世界大亂從此開始。
確實這里使用異步操作很有見成效,先告訴xmlhttp后臺加載網(wǎng)絡資源。一邊涼快涼快,加載完了通知一下。喝喝茶,看看報,N+1秒鐘過去了,報告: 001.xml全體元素集合完畢,帳前待命...,ok,..... (機密,隱藏...)。
不錯把,你不必焦急的盯著屏幕上所不期望的白大塊,不用使勁的失望的拖動著沒有的鼠標。你只需要東瞧瞧西瞅瞅,隨意的打發(fā)點時間,一會,東西準備好了,歸你了,愛怎么辦就怎么辦吧。
沒看明白?簡單點說吧,就是把資源加載這一操作放在腳本線程之外,那么就不會有長時間運行的腳本,那么用戶就覺得你的程序響應快。就是是說ajax,其實asynchronism也就這一個地方而已。
記住一點,瀏覽器上單純的腳本程序,本身是不支持多線程的,異步也就無從談起,而現(xiàn)在所說的異步,都不是純粹的ECMAScript,都是利用瀏覽器帶有的某些原生對象實現(xiàn)的。
雕蟲小技而已,結果吹得雞毛滿天飛。眾嘴紜紜之勢,眾目睽睽之下,公雞下蛋,鯉魚上坡,皆有可能。
posted on 2007-06-02 14:11
金大為 閱讀(993)
評論(13) 編輯 收藏 所屬分類:
閑扯