2015-12-09 22 views
0

我在一個新項目上工作,我們的工作是重寫一個在移動設備上出現性能問題的電子商務網站。由於性能原因刪除jQuery是否合理?

我們正在重寫基於更多面向對象/模塊化架構的JavaScript,我認爲它很棒!然而我的團隊負責人表示,我們應該刪除所有jQuery調用,並用javascript替換,如domElem.querySelectorAll(查詢),它具有更好的性能。我知道jQuery在背景中做了某種緩存,可能會產生內存問題。

我對此有點懷疑,首先因爲它好像是一種'過早優化',就是說,我們應該在重寫任何東西之前先找到瓶頸。其次,我在互聯網上沒有發現任何說jQuery有嚴重性能問題的東西。

當前的網站確實有很多重疊的dom分支查詢,我認爲這會造成很多冗餘。那就是有太多的查詢發生了,而且在我們新的架構方法中,我們將對象/模塊限制爲更少的dom查詢和更有針對性的dom查詢,這非常棒。這確實需要重寫

但是,我們是否不使用domElem.querySelector(查詢)$(domElem).find(查詢),我看不出有作爲是多大的差別。我的想法是對的嗎?

+0

這取決於你想要多少功能。 http://programmers.stackexchange.com/questions/166273/advantages-of-using-pure-javascript-over-jquery – gurvinder372

+0

jQuery是比'querySelector()'慢得多:https://jsperf.com/queryselector-vs -jquery-2和http://jsperf.com/jquery-vs-document-queryselector在我的瀏覽器中速度降低了85到95​​%,這是巨大的。 – Shanoor

+0

這樣慢兩倍。但是,2毫秒而不是1毫秒?我正在尋找透視 –

回答

1

一些測試完成here(也檢查其他修訂版)。好的詳細的討論完成了here利用jquery over javascript的優點和缺點。

也想指出jquery doesn't do any caching of selectors

+0

僅使用您發佈的測試鏈接提問時,會使用特定的輕量級移動版網站。 Ops /第二列:是每秒顯示實際查詢呼叫數? –

+0

@OliverWatkins是每秒操作次數(即語句執行次數)。 – gurvinder372

+0

然後,如果在你的網站生命中,你只有可能約200個查詢電話,這是不會有任何區別的 –

1

我們經常因爲總是使用Javascript框架而忘記的是jQuery不是一個框架。

很顯然,如果你使用jQuery的「$」對象,並使用類似的getElementById直接DOM方法完全相同的一個操作動作,後者將明顯更快的jQuery本身是用Javascript和做了很多背景的東西。但是,作爲開發人員,除了代碼可讀性之外,什麼都不能阻止您將jQuery與純Javascript結合:儘可能使用簡單的Javascript,並且只使用提供複雜功能並需要一些時間從頭開始編寫和優化的jQuery函數。 jQuery中有很多:提供獨立於瀏覽器的css,序列化對象以及做很多其他很酷的東西。

這取決於應用程序,但通常性能問題與設計不當的算法有關,而不是使用jQuery。在任何情況下,如果您的應用程序執行了大量DOM操作,則可能需要使用簡單的Javascript和測試重新編寫它。保持圖書館,只是不要用它進行簡單的操作,你可以輕鬆地在沒有它的情況下書寫。

如果您的應用程序嚴重依賴具有複雜功能的jQuery函數,則將其刪除不成問題。

我自己使用這種組合方法:一切簡單的Javascript編寫的使用jQuery功能的東西,是很難實現的。

而且,一個良好的周圍挖,如果應用程序有性能問題是DOM操縱。與幾乎所有Javascript中的其他操作相比,這些操作都非常繁重。您可以通過滾動幾次操作爲一體,建設完成對象與一個構造函數,而不是創建空的和分配的屬性一個接一個,以削減時間等

對不起,如果答案是有點模糊,但在沒有看到代碼和運行測試的情況下,很難做到精確。

1

讓我給Bob大叔關於這個討論需要仔細考慮"Architecture is about intent, we have made it about frameworks and details"

過早優化。

  • 它們通常會導致難以恢復的架構決策。
  • 他們介紹代碼優化,通常是特定於他們解決問題,這使得代碼不那麼抽象,因此很難以 維護,也更復雜從而容易出現更多的錯誤。
  • 他們往往是偏見和不客觀,有時沒有任何真正的比較其他選擇。
  • 他們試圖解決的問題往往被高估,到不存在的程度。

我不是網絡開發方面的大專家,但如果可能的話,您應該始終通過分離關注點和良好的抽象將這種決策推到最後。

例如在生成的Java的腳本代碼,你可以有JavaScriptWriter的抽象,並使用不同的框架部分。 這樣,您可以在開始時使用JQuery,測試系統,然後只更換您認爲效率低下的零件。

+0

是的,我認爲優化應該總是在最後完成。 –