原文:http://www.readwriteweb.com/archives/
僅僅一行 JavaScript 代碼就能給現今的許多網絡日志[1]技術提供動力 -- JavaScript 小應用[2]、共享工具、訪問者跟蹤、廣告客戶。在很多時候,一個網志作者所需要的僅僅是一行 JavaScript 代碼,用來給自己的網志增加一個新的技術。現在的問題是,假如許多這樣的代碼累積起來,事情會變成怎樣的呢?
物理學上有一個著名的現象叫做 ”非線性“:大量不同的個體相互作用將產生難以預知的結果。在這一點上,軟件也一樣 -- 當許多組件被放在一起,就無法知道接下來會發生什麼。這是因為,各個組件工作時都當其他組件不存在,實際上,它們正在爭奪實實在在的資源和人們的關注。事實是:這場戰爭傷害了所有的人 -- 讀者、網志作者,以及網絡服務本身。每個人都體會到了挫折感。
在這個帖子裡,我們將了解是什麼使得頁面因為過多的 JavaScript 語句而遲滯,以及對此應該采取什麼對策。
網志作者 - 意料之外的受害者
在網志作者這裡存在下來的是新的單調的、微塊化[3]的內容。網志作者熱愛在他們的網址上展示個性和喜愛的內容。這也是為什麼人們急著要安裝新的 JavaScript 小應用(例如:來自於del.icio.us,Flickr,Twitter,AddThis,Sphere的 JavaScript 小應用)的原因 -- 因為它們確實有用,而且對於它們有著旺盛的需求。
使用Twitter JavaScript 小應用所要求插入的一段 HTML 代碼
如果你熟悉 HTML 和你所使用的網志平台的話,安裝 JavaScript 小應用是一項相當容易的工作。你所要做的只是將代表 JavaScript 小應用的 HTML 代碼粘貼到你想要放置它的位置。有的時候需要把代碼放到 HTML 文檔的頭部(header),這樣做也並不困難。如果你對技術有一定的了解,你就可以這樣做,或者通過一個類似於 Widgetbox 的平台自動安裝所需的 JavaScript 小應用。
這樣作很容易,因此人們正在往他們的網志裡塞入越來越多的 JavaScript 小應用;就是從這時起,一切開始變得讓人不那麼愉快 -- 例如:載入網志頁面所需的時間越來越長。
不是所有網頁小應用都生而相同
現在有兩種實現網頁小應用的主要技術:Flash 和 JavaScript。Flash 小應用有它們自己的問題:太重量級、不能改變大小、不能操縱 DOM(文檔對象模型)。然而,問題通常卻並不是 Flash 小應用帶來的,而是 JavaScript 小應用。
具有諷刺意味的是,JavaScript 一開始就被想象和設計成客戶端的一種支持最小交互性和能夠快速操縱 DOM 的輕量級語言。但我們的技術帶領我們走上了一條扭曲的發展道路,結果是 JavaScript 逐漸成長為一種網絡編程語言。 從 Ajax 到 JavaScript 小應用,JavaScript 如今被用於許多前沿項目。但事實是:JavaScript 有自己的問題。接下來讓我們看一下都有那些...
浏覽器如何處理 JavaScript 代碼
對於任何一個老練的技術人員來說,也許最令人震驚的真相是:JavaScript 是一個單線程語言。這譯為著 JavaScript 代碼是順序而不是並行執行(除了 Ajax 調用的例外情況)。當一段 JavaScript 代碼正在被加載和求值時,其他所有代碼都必須等待。
JavaScript 代碼被順序執行
這同時也意味著,一段執行速度很慢的 JavaScript 代碼會使整個網志的加載速度變慢。這就是正在網志世界裡發生的事情。那麼,怎麼解決這個問題呢?
JavaScript 小應用能做到更好更快嗎?
很不幸,對於這個問題不存在什麼萬試萬靈的解決辦法。也就是說不存在一種單一的技巧或技術能夠解決這個問題。雖然企業能夠通過組合一些方法去減輕使用其他 JavaScript 小應用造成的影響,最終 -- 如果使用的 JavaScript 小應用足夠多的話 -- 問題還是必定出現。當我們作為一個行業在仔細考慮能夠做些什麼的時候,JavaScript 提供者應該思考以下一些指導性原則: