Ajax / Dojoda aracılığıyla Büyük Metin Dosyaları gösteriliyor

4 Cevap php

Ben tüm dosya indirmek zorunda kullanıcı gerek kalmadan web arayüzü üzerinden bir kullanıcıya büyük bir metin dosyası (özellikle 100MB Log Files) göstermek istiyorum. Açıkçası birileri web tarayıcısı için tüm dosyayı iade mantıklı olabilir, bu yüzden benim teori Google Maps harita bir "pencere" sağlayan benzer şekilde dosyası aracılığıyla kaydırma kullanıcı bağlı dosyanın bölümlerini almak için Ajax kullanılan değildi ederim .

Benim uygulama sunucu PHP ve ben bulunan uygun gerçekleştirebilirsiniz oldukça emin istiyor ve dosya üzerinden okur ve uygulamaya XHR'de yoluyla sonuç, ama benim Ajax çerçeve dojodur ve ben işe herhangi bir standart Dijit düşünüyor ve can bir şey impliment olacağını nasıl iyi anlamaya çalışıyorum.

Ben kendi widget'ı türetmek gerekir? Şey orada ben farkında değilim zaten var mı? Benim kendi özel aracını inşa halinde, yapının ne tür alabilir ve dojo / Dijit için özel widget geliştirmek için herhangi bir iyi kaynaklar vardır ki? Başka herhangi bir düşünce?

4 Cevap

This seems to be a tut on what you might need Ben her satırda bazı eylemleri gerçekleştirmek isteyen sona erecek çünkü, bir li kullanmanızı öneririm, büyük olasılıkla her satırı alakalı olacaktır.

Kaydırma güzel, ama görünümü güncelleştirin, sonra da sadece onlar sonraki sayfayı, bir önceki sayfayı tıklatın, yani pagination ile arayüzü blit olabilir ve bunu getir. Bu en kolay yöntem. Kaydırma ile, kesintisiz kaydırma için geçerli görünür satır yukarıda ve aşağıda daha almak gerekir.

Eğer 25 satırları göstermek istiyorsanız Örneğin, sen ilk halindeyken 25 + alt pedi almak gerekiyor ve ekstra 25 + alt pedi indirmek için yeni bir olay sinyal için eşik olarak alt ped gösteren çizgilerini belirlemek olacak ürün.

100mb dosya ile, o birazdan halsiz olsun, bu yüzden önceki girdileri temizlemek gerekir ve ters almak için bir istek sinyal için yeni bir üst pedi tanımlar. Yani, 1 req söylemek için: 25 + alt takımını getir, 2 req 25 + alt ped kaldır önceki 25 getirilemedi - üst pedi.

Bunu yaparken dikkat edilmesi gereken şey firefox en azından, bu sakat almak eğilimindedir ve birkaç yüklendikten sonra olaylar ateş edemez,, bu nedenle yeniden bağlamanız / sizin bile dinleyicileri unbind isteyebilirsiniz. Ben şu anda benzer işlevlere sahip bir şey üzerinde çalışan bir arkadaşım var, ve bu o geldi konulardan bazıları çünkü ben sadece şunu söyleyebilirim.

Kimse bir sonraki sayfayı / önceki sayfayı, hızlı ve temiz olacak, ama pisliği senin kaydırma tıklayın ve kimse widget kullanmak isteyeceksiniz zorunda şikayet oluyor.

İşte konuyla ilgili diğer bazı kaynaklar şunlardır: Old Ajax Scrollable Table - Twitter like load more tut - Good scrolling example, read the source - Check out this googlecode project

Ben önbelleğe öneririz.

Bu sorunun çözümü diskten yeteri kadar büyük bir dosya (100mb +) okuma diski bağlı ve web sunucusu komut dosyası yürütme zaman için belirlediği herhangi bir zaman aşımı depar olasılığı olacak dikkate almak gerektiği unutulmamalıdır. Kullanıcı Ben sunucunun zaman aşımı sınırlarını değiştirme gibi kesmek önleyeceğini dosyanın herhangi bir bölümünü yüklemek için bir zaman aşırı miktarda beklemek yapmamak için.

Here's one possible solution that comes to mind: 1) Cache the file by chopping it up into separate files. You can easily do this in a cron job or even trigger it when the file is written. Use readfile_chunked (http://cn2.php.net/manual/en/function.readfile.php#48683) or similar.

2)) tarayıcı (örneğin çağrıldığında zaman '. /? Yığın = # # Readfile' bir hizmet işleyicisi senaryo yazın istenen yığın döndürür.

AJAX ile hizmet işleyicisi arama yapmak için diğer katılımcı tarafından önerilen 3) pagination widgit veya kaydıraç kullanın.

Eksileri: Bu kaçınılmaz disk alanı miktarı artacaktır. Artıları: disk erişimi gibi mutlu kullanıcılar optimize edilmiş ve böylece irade betik çalıştırma zamanı olacaktır. Ayrıca, iyi ölçekler. (O (n) sırasına).

Günlükleri görüntüleme için Dojo Izgara kullanarak düşündünüz mü? Bu yerleşik olan veri sayfalarını 'yani satır dinamik yükleme desteği.

Günlük dosyası tutarlı bir çizgi ile biten bir metin dosyası ise, belki satır numarasına göre getirebilir.

Ben böyle algoritma ile bir fikrim var:

  1. Sayfa yüklendiğinde, dosyadan ilk 100 satırı getir. Bazı konteyner, belki bir div, textarea, kullanarak veya koymak <ul><li>
  2. O kullanıcı kabın son kısmına kaydırma biliyorum bir olay işleyicisi koydu.
  3. Dosyadan sonraki 100 satırları almak için AJAX isteği gönderin. Parametresi (GET veya URI Parametre) olarak ofset ithe çizgisini geçmek böylece PHP komut dosyası doğru parçası alabilirsiniz
  4. Offset sonraki AJAX isteği güncellemek, kabın sonuna AJAX tepki koydu.
  5. Dosyada fazla satır bırakılırsa, boş bir yanıt döndürür. AJAX işleyici dosya sonuna kadar bu düşünmelisiniz böylece yukarıdaki 2. adımda olay işleyicisi kaldırmak olacaktır.

Ben Dojo hakkında çok şey bilmiyorum. Benim uygulamada jquery tools's scrollable kullanın. Bu kaydırıcı son sayfasına ulaştığınızda bir olay işleyicisi koymak kolay, daha sonra bir sonraki öğeyi getir.