2011-09-08 12 views
1

有關字符串與數組進行文本處理的幾個問題。字符串與數組處理速度在JavaScript和PHP,並可以傳遞給PHP數組沒有操縱?

是否可以將js數組[]作爲數組傳遞給php,而不將其轉換爲字符串或使用JSON?只需將其作爲普通數組進行傳遞即可

在php和JS(或任何其他語言)中,通常,哪種格式處理或搜索文本(對於非常大的數組或文本字符串)更快。例如:

string = abc,def,dfa,afds,xyz,afds,xxx 

array = {"abc","xyz","xxx"} 

哪個更快用來查看xyz是否存在/匹配?

哪個更快用來確定xyz的索引位置?

哪一個具有較小的內存大小/使用量?

TIA。

編輯:第1點的答案不是我想的,但對於第2點,請理解我在問,因爲我正在處理一個程序,它使併發ajax調用需要處理非常大的數組或字符串。接口的可用性取決於返回的Ajax調用的速度。由於這個問題,我不得不取消原始代碼。

+0

對於問題1:http://stackoverflow.com/questions/7016701/creating-jquery-ajax-requests-to-a-php-function/7016795#7016795 – NullUserException

回答

2

至於問題1,你可以傳遞一個原生的Javascript數組到PHP,答案是否定的。
不僅Javascript陣列和PHP數組不兼容(它們是兩種不同語言的數據結構),(客戶端)Javascript和PHP之間的唯一通信是通過HTTP,它只知道字符串。不是數字,不是布爾值,不是對象,不是數組,只有字符串。至於問題2,速度,它取決於很多東西,包括搜索算法和字符串/數組長度。如果您的數據結構是一個數組,請將其用作數組,而不是字符串。首先是可讀性和可維護性,僅在必要時才加速優化。在你遇到性能問題之前,你必須提高極限,你的簡短例子足夠快。


這是一個測試情況下,我創建了一個可以回答你的問題:http://jsperf.com/string-search-speed
真的取決於你的目標,雖然。在字符串中搜索意味着你需要排除只匹配一個子字符串的可能性,爲此你幾乎需要一個RegEx。除非這不重要。另一方面,將所有內容填充到對象中的速度要快幾個數量級,但不允許您將相同的字符串存儲兩次。無論是否擔憂,我都不知道。請務必在各種瀏覽器上運行這些測試,因爲各種測試的速度在Javascript引擎中差異很大。

而我越玩越清楚這是沒有答案。所有測試在Chrome中的得分幾乎相同(安全的用於對象查找,在不同的聯盟中進行)。 Opera似乎有一個極其優化的str.search實現,它與對象查找相媲美。在Safari中,所有正則表達式測試都非常緩慢,但對象查找是所有瀏覽器中速度最快的。火狐的str.indexOf是真棒,手動數組循環不是很多。

所以,再沒有絕對的答案(除非你使用的對象總是更快)。 做什麼最有意義!

+0

感謝您對問題1的解釋。對於問題2 ,我們只要說我有一個長度爲10000的數組和一個包含相同元素並用逗號分隔的文本字符串。使用哪一種查看元素是否是「xyz」更快? – Jamex

+0

@Jamex爲什麼不測試它? – deceze

+0

@Jamex - 「多快......」的問題有很多變量,例如Array的* indexOf *或* each *方法是否可用,通用字符串或數組處理速度等等。這些在瀏覽器之間往往會有所不同(有時候非常巨大),所以在一個瀏覽器中更快的瀏覽器可能不在另一個瀏覽器中。對於大型數組,索引確實有幫助,就像排序一樣。正如其他人所說的那樣,做一些看似明智,易於維護,不浪費開發時間的事情。如果您遇到性能問題,請花費精力尋找並解決具體問題。 – RobG

0

你爲什麼說「不使用JSON」? JSON正是你正在尋找的。您將數組轉換爲JSON字符串,將其傳遞給PHP,然後PHP將JSON解析回數組對象。

另外,它聽起來像你在做過早的優化。大多數情況下,使代碼易於使用比縮短執行時間的毫秒更重要。如果你真的想知道事情的速度,可以運行一些基準測試。

+0

謝謝,但我的問題是,是否將數組從JS傳遞到PHP而不進行操作在技術上是可行的,我知道JSON。我現在處於優化階段,因爲我已經完成了我希望程序行爲的方式,不幸的是,我的程序需要20個併發的ajax調用php,每個調用可能需要發送大於1000個元素的數組或一長串文本(每次通話)。這些數組是動態的,並且會增長,這隻會導致程序在用戶繼續下降時變得越來越慢。 – Jamex

+2

@Jamex也許你的基本設計可能會有所改進。爲什麼發送的信息會增長?你是否追加了已經發送到服務器的信息,從而每次重發信息?爲什麼你需要同時發送20個Ajax調用到PHP,你不能把這一切都放到一個Ajax調用?你所描述的聽起來不像是應該有必要的。你用戶是否創建了2000個需要發送給服務器的新信息?如果沒有,你確定所有這些都需要發送嗎?我的猜測是有另一種方法來實現你的目標。 – dqhendricks