Не работает ли META-тег области просмотра в Mobile Safari в режиме веб-приложения?

На iPad, использующем Safari, перейдите на эту страницу: http://ifelse.org/projects/errors/viewport/test.html

Это Источник:


    
        Viewport Test
        
        
        
        
    
    
        

This is 1024 with a 3px border, so device width is 1030.

Works when viewing in Mobile Safari.

Does not work if you Bookmark it to the Home Screen and open from there.

Compare MobileSafari view to Webapp view.

Он должен выглядеть так, как это изображение, где область просмотра размером 1030 пикселей полностью виден в портретном режиме:

  1. Коснитесь Значок закладок (+)
  2. Коснитесь Добавить на главный экран
  3. Закладка создана. Откройте закладку, и веб-страница откроется в режиме веб-приложения в полноэкранном режиме.

Тег viewport по существу игнорируется. Я пробовал несколько вариантов предъявления иска к устройству со смешанными значениями пикселей. Ничего.

Так ... это ошибка или особенность?

Если это сделано намеренно со стороны Apple, по сути, это означает, что нужно правильно разрабатывать красивые веб-приложения, которые вам нужны с реальной шириной 768 пикселей ... интерпретатор тратит много времени перед вызовом следующей функции. И я наблюдаю ту же проблему в конце приложения, когда программа должна завершиться: много времени (~ часов!) Проходит между последней меткой времени на экране и появлением нового приглашения.

Использование памяти работает стабильно, поэтому у меня действительно нет утечек памяти.

Есть предложения?

Может ли сборка мусора тысяч больших объектов C ++ работать так медленно?

Есть ли способ ускорить это?

] ОБНОВЛЕНИЕ:

Большое спасибо за все ваши ответы, вы дали мне много советов по отладке моего кода: -)

Я использую Python 2.6.5 в Scientific Linux 5, настраиваемый дистрибутив на основе Red Hat Enterprise 5. И на самом деле я использую не SWIG для получения привязок Python для нашего кода C ++, а фреймворк Reflex / PyROOT. Я знаю, что он не очень известен за пределами физики элементарных частиц (но все еще с открытым исходным кодом и находится в свободном доступе), и я должен использовать его, потому что он используется по умолчанию для нашей основной структуры.

И в этом контексте команда DEL со стороны Python не работает. работа, я уже пробовал. DEL удаляет только переменную python, связанную с объектом C ++, но не сам объект в памяти, который все еще принадлежит стороне C ++ ...

... Я знаю, это нестандартно, я думаю, и немного сложнее , извините :-P

Но, следуя вашим подсказкам, я профилирую свой код и вернусь к вам с более подробной информацией, как вы предлагали.

ДОПОЛНИТЕЛЬНОЕ ОБНОВЛЕНИЕ:

Хорошо, следуя вашим предложениям, Я инструментировал свой код с помощью cProfile , и я обнаружил, что на самом деле функция gc.collect () - это функция, занимающая большую часть времени работы !!

Здесь вывод из cProfile + pstats print_stats ():


    >>> p.sort_stats("time").print_stats(20)
Wed Oct 20 17:46:02 2010    mainProgram.profile

         547303 function calls (542629 primitive calls) in 548.060 CPU seconds

   Ordered by: internal time
   List reduced from 727 to 20 due to restriction 

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        4  345.701   86.425  345.704   86.426 {gc.collect}
        1  167.115  167.115  200.946  200.946 PlotD3PD_v3.2.py:2041(PlotSamplesBranches)
       28   12.817    0.458   13.345    0.477 PlotROOTUtils.py:205(SaveItems)
     9900   10.425    0.001   10.426    0.001 PlotD3PD_v3.2.py:1973(HistoStyle)
     6622    5.188    0.001    5.278    0.001 PlotROOTUtils.py:403(__init__)
       57    0.625    0.011    0.625    0.011 {built-in method load}
      103    0.625    0.006    0.792    0.008 dbutils.py:41(DeadlockWrap)
       14    0.475    0.034    0.475    0.034 {method 'dump' of 'cPickle.Pickler' objects}
     6622    0.453    0.000    5.908    0.001 PlotROOTUtils.py:421(CreateCanvas)
    26455    0.434    0.000    0.508    0.000 /opt/root/lib/ROOT.py:215(__getattr__)
[...]

>>> p.sort_stats("cumulative").print_stats(20)
Wed Oct 20 17:46:02 2010    mainProgram.profile

         547303 function calls (542629 primitive calls) in 548.060 CPU seconds

   Ordered by: cumulative time
   List reduced from 727 to 20 due to restriction 

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    0.001    0.001  548.068  548.068 PlotD3PD_v3.2.py:2492(main)
        4    0.000    0.000  346.756   86.689 /usr/lib//lib/python2.5/site-packages/guppy/heapy/Use.py:171(heap)
        4    0.005    0.001  346.752   86.688 /usr/lib//lib/python2.5/site-packages/guppy/heapy/View.py:344(heap)
        1    0.002    0.002  346.147  346.147 PlotD3PD_v3.2.py:2537(LogAndFinalize)
        4  345.701   86.425  345.704   86.426 {gc.collect}
        1  167.115  167.115  200.946  200.946 PlotD3PD_v3.2.py:2041(PlotBranches)
       28   12.817    0.458   13.345    0.477 PlotROOTUtils.py:205(SaveItems)
     9900   10.425    0.001   10.426    0.001 PlotD3PD_v3.2.py:1973(HistoStyle)
    13202    0.336    0.000    6.818    0.001 PlotROOTUtils.py:431(PlottingCanvases)
     6622    0.453    0.000    5.908    0.001 /root/svn_co/rbianchi/SoftwareDevelopment

[...]

>>>

Итак, в обоих выходных данных, отсортированных по «времени» и «кумулятивному» времени соответственно, gc.collect () является функцией, занимающей большую часть времени работы моя программа! :-P

И это результат профилировщика памяти Heapy , непосредственно перед возвратом программы main () .

memory usage before return:
Partition of a set of 65901 objects. Total size = 4765572 bytes.
 Index  Count   %     Size   % Cumulative  % Kind (class / dict of class)
     0  25437  39  1452444  30   1452444  30 str
     1   6622  10   900592  19   2353036  49 dict of PlotROOTUtils.Canvas
     2    109   0   567016  12   2920052  61 dict of module
     3   7312  11   280644   6   3200696  67 tuple
     4   6622  10   238392   5   3439088  72 0xa4ab74c
     5   6622  10   185416   4   3624504  76 PlotROOTUtils.Canvas
     6   2024   3   137632   3   3762136  79 types.CodeType
     7    263   0   129080   3   3891216  82 dict (no owner)
     8    254   0   119024   2   4010240  84 dict of type
     9    254   0   109728   2   4119968  86 type
  Index  Count   %     Size   % Cumulative  % Kind (class / dict of class)
    10   1917   3   107352   2   4264012  88 function
    11   3647   5   102116   2   4366128  90 ROOT.MethodProxy
    12    148   0    80800   2   4446928  92 dict of class
    13   1109   2    39924   1   4486852  93 __builtin__.wrapper_descriptor
    14    239   0    23136   0   4509988  93 list
    15     87   0    22968   0   4532956  94 dict of guppy.etc.Glue.Interface
    16    644   1    20608   0   4553564  94 types.BuiltinFunctionType
    17    495   1    19800   0   4573364  94 __builtin__.weakref
    18     23   0    11960   0   4585324  95 dict of guppy.etc.Glue.Share
    19    367   1    11744   0   4597068  95 __builtin__.method_descriptor

Есть идеи, почему или как оптимизировать сборка мусора?

Могу ли я выполнить более подробную проверку?

15
задан rmbianchi 11 December 2011 в 23:21
поделиться