有個問題想請教下:
我在JS端使用ajax,執行的是非同步方式,
當判斷xmlhttp.readyState == 4時,會處理服務端返回的一些資料,並作提示。
問題是:
最近發現在老是要等很久才能捕獲到服務端返回的資料;
經過追查發現是PHP在處理一個MAIL函數時等待很久。MAIL函數只是處理一個很簡單的郵件發送。
之前也沒有這樣的問題。可能是伺服器哪裡出現了異常。
深入探索應該是在等待該MAIL函數的執行導致了服務端返回的等待。
請教下是否有辦法解決?該MAIL函數一定要在AJAX調用背景時候執行。
回複討論(解決方案)
php不支援多線程,可以將mail函數操作獨立出來,或者將mail函數要做的事情,放到一個暫存資料表中,定時去發。
這個跟多線程無關吧?只是這兩天伺服器的MAIL功能好像在返回時有點延遲-(實際上已經有寄信出去),採用的是LINUX的MAIL功能-才會有這個問題。
你的問題很奇怪!
既然你需要等待 mail 的返回,那又怎麼能繞過去呢?
如果你要等待mail函數返回結果給你,那就不能繞過它了,我的理解有誤了
你的問題很奇怪!
既然你需要等待 mail 的返回,那又怎麼能繞過去呢?
我不需要等待MAIL的返回啊
我程式裡有一句MAIL(),我刪除就能正常快速響應;查了手冊,MAIL函數會返回TRUE/FALSE。
所以我才在猜是不是因為等待MAIL的返回導致速度這麼慢。
怎麼說呢,我說的等待返回,不是我自己要等待返回的!
按照AJAX的非同步方式,只有伺服器完全相應返回才會返回xmlhttp.responseText對吧。
我在猜是不是因為執行了mail()函數後,用戶端一直在等待這個函數返回TRUE或者OR才會變得這麼慢的。
問題應該也是這樣,我去除了該語句,其他都能正常執行,xmlhttp.responseText也很快就能捕獲到值。
所以有沒有辦法在不去除MAIL語句的情況下,正常快速的響應呢?
mail和發郵件有關,首先檢查一下郵件伺服器配置(找專業人士)。
或者你最佳化下代碼,將你要發的郵件放到一個暫存資料表,linux加crontab 裡面定時來用mail函數發。
既然你不需要等待 mail 的返回,那就按 nowphp 收的思路做
當然也就不能及時知道郵件是否發出了
應該是郵件伺服器的問題。