Linux за българи: Форуми

Програмиране => Web development => Темата е започната от: clovenhoof в Jun 05, 2013, 09:43



Титла: Тест за jQuery & Ajax. Защо фейлва на Хром?
Публикувано от: clovenhoof в Jun 05, 2013, 09:43
Моля да тествате качените скриптове на вашият сървър.
Това което правят е изпълняване на времеотнемаща задача и показване на текущия статус.
По-конкретно, изброява файлове и поддиректории в зададена от вас директория. Докато се изпълнява задачата, на екрана се показва текущата стойност. Когато завърши задачата се показва диалог със статуса - успех или грешка.

Не мога да а разбера защо скрипта пуснат под Хром, след завършване на операцията дава грешка - "Failed to load resource", а под Мозила завършва безпроблемно.

Много ще се радвам ако някой даде смислено обяснение :)

ПП: В скрипта dbRebuild.php задайте директория с няколко хиляди файлове. В качените файлове тук нарочно съм задал $dir = "/tmp".
При мен, тествам с директория от 10000 файла.


Титла: Re: Тест за jQuery & Ajax. Защо фейлва на Хром?
Публикувано от: Demayl в Jun 05, 2013, 10:07
Може да е от кеша на самия хром ( ако правиш нормални и ajax заявки към един и същ адрес ). Възможност 2 е да си под SSL / https / и да се опитваш да правиш ajax request кам http ( това е много дразнеща 'екстра' )


Титла: Re: Тест за jQuery & Ajax. Защо фейлва на Хром?
Публикувано от: clovenhoof в Jun 05, 2013, 10:08
Сега забелязвам че брояча не се показва при първо пускане.
Просто направете рефреш .


Титла: Re: Тест за jQuery & Ajax. Защо фейлва на Хром?
Публикувано от: clovenhoof в Jun 05, 2013, 10:11
Може да е от кеша на самия хром ( ако правиш нормални и ajax заявки към един и същ адрес ). Възможност 2 е да си под SSL / https / и да се опитваш да правиш ajax request кам http ( това е много дразнеща 'екстра' )

За кеша - $.ajaxSetup({ cache: false }); и си работи.
За второто, правя заявка към http://.

Забелязвам че и на други (нормални) страници Хрома показва тази грешка.


Титла: Re: Тест за jQuery & Ajax. Защо фейлва на Хром?
Публикувано от: Demayl в Jun 05, 2013, 10:22
Хрома не му дреме че си сложил cache : false :d , иначе от http страница ли правиш заявката ? За всеки случаи сложи някакъв слъчаен параметър към url-a на ajax заявката.


Титла: Re: Тест за jQuery & Ajax. Защо фейлва на Хром?
Публикувано от: clovenhoof в Jun 05, 2013, 11:02
Добре, направо ще обясня какво искам да постигна и стига с този кеш защото не е това проблема и да не разводняваме темата.

Искам да покажа прогрес бар показващ текущият статус на времеотнемаща операция. Може би има значение че е файлова операция?!
Всичко е ок в реалния ми проект, освен това че не знам как да съхраня текущата стойност на прогреса като променлива на сървъра.
Да използвам сесията постепенно ми се струва отчайваща идея.
Най-лесно и най-тъпо би станало ако я съхранявам в базата, но не искам така да го правя.
Как се прави практически това на РНР?

Сега чета за нещо наречено APC, което може би ще свърши работа.


Титла: Re: Тест за jQuery & Ajax. Защо фейлва на Хром?
Публикувано от: Demayl в Jun 05, 2013, 11:42
И да не ти се вярва Хрома кешира доста старателно, затова никога не пропускай тази възможност. Иначе няма значение какво ти прави скрипта след като не може да ти зареди respons-а. Иначе за това къде да го пазиш - кеш . Макар че в DB-то ще е най-удачно защото едва ли ще имаш много често изпълнение на този скрипт, а и ще можеш да си пазиш история . Иначе като гледам това APC сигурно ще ти свърши работа .


Титла: Re: Тест за jQuery & Ajax. Защо фейлва на Хром?
Публикувано от: trout в Jun 05, 2013, 12:27
Здравей,

тествах скрипта - наистина и при мен, когато dbRebuild.php се вика от мозила не дава грешка за разлика от хром.

С предварителната уговорка, че нямам никакъв опит с PHP, така че може и да греша но:

Освен, че забелязах в лог-а на апацхе следната грешка понякога :

PHP Fatal error:  Maximum execution time of 240 seconds exceeded in /usr/share/phpinfo/dbRebuild.php

мисля, че принципно не е добра идея изобщо да използваш нишката породена от http request-a за обработване на дълги операции.
Незнам как е в ПХП, но предполагам, че може да ти създаде доста други проблеми (примерно чисто хипотетично незнам какво става ако клиента или някой NAT реши да затвори тцп сокета - примерно поради неактивност, да не говорим за самото апаче и пхп които не случайно имат параметър за max-time-execution).

Според мен правилния подход е в dbRebuild.php да стартираш background нишка, а после от poll скрипта проверявай докъде е стигнала и евентуално върни на клиента
съобщение да спре да poll-ва като види, че операцията е приключила + резултата.


Титла: Re: Тест за jQuery & Ajax. Защо фейлва на Хром?
Публикувано от: trout в Jun 05, 2013, 13:02
Проблема определено не е от кеша и според мен.

Да пазиш междинния резултат от броенето на файловете в базата е тъпо наистина - доста даже :)
Мястото му е в сесията определено под една или друга форма

незнам за пхп - ако беше java щеше да направиш един обект с променлива за броя преброени файлове, ще го запишеш в сесията, пускаш нишка да ги брои и и подаваш обекта да записва в него колко е преброила, а в poll script-a го вадиш от сесията да видиш на тая променлива стойността - общо взето каквото правиш и ти.


Титла: Re: Тест за jQuery & Ajax. Защо фейлва на Хром?
Публикувано от: clovenhoof в Jun 05, 2013, 13:27
Разбрах проблема :) Хах

Код
GeSHi (PHP):
  1. ...
  2. flush(); // <--- Ето това да се добави!!!
  3. ...
  4.  

Явно за хрома трябва да се флашва буфера на сешън файла при файлови манипулации, както е случая при мен.
Добавих и едно:
Код
GeSHi (PHP):
  1. ini_set('max_execution_time', 300);
  2.  

В началото на файла.


Титла: Re: Тест за jQuery & Ajax. Защо фейлва на Хром?
Публикувано от: clovenhoof в Jun 05, 2013, 18:19
Ето работещ тест.