Bu (PHP) ne istediğinizi yapmanın iyi bir yolu var mı?

3 Cevap php

Benim site için basit bir forum üzerinde çalışıyoruz. Ben son ziyaretinizden beri + forumları okunmamış mesajları işaretlemek olacak bir özellik ekliyorum.

Im aslında her kullanıcı hesabı ile foruma son erişim tarih depolamak. Bir kullanıcı geri sitesine gelince, bir sorgu daha sonra bir diziye eklenen tüm Post_id ve post_parent_forum değerleri almak için koştu, o anahtar Post_id (benzersiz olan) ve değeri olan bir OTURUM değişken depolanan Forum id (mesaj birkaç forumlarda görünecektir beri alışkanlık benzersiz olan) olmak.

Forum endeksinde, ben ise, bu "okunmamış" olarak işaretlenmiş olacak, forum_id dizide olup olmadığını görmek için, her forum için () in_array kullanın.

Iplik listesinde, ben her iş parçacığı kimliği için anahtar dizide olup olmadığını ise, kendi "okunmamış" olarak işaretlenmiş görmek için () array_key_exists kullanın.

Bir post bakıldığında, madde parçacığının kimliği anahtar eşit ile dizisinden kaldırılır.

Bu yöntem makul mi, yoksa ben forum daha popüler hale gelirse sorunları çalıştırmak için gidiyorum? Her forum liste 20 array_key_exists () çekleri çalışan endişe im. Makul hızlı?

Bir yan not olarak .... Ben OTURUM saklanan dizi ile doğrudan çalışmak, ya da ben normal bir değişkene değerini atamak, bir anahtar, unset eski oturum var kaldırmak ve güncelleştirilmiş diziyle yeniden ayarlamak zorunda ?

3 Cevap

php diziler karışık tablolar vardır! bir karma anahtar arama çok pahalı değildir, bu yüzden hayır, çünkü bu performans sorunları içine edeceğiz sanmıyorum.

in_array'in farklı bir konu (tüm dizi boyunca arama), ama gerçekten - bu hala bir sorun olmamalı. erken optimizasyon dikkat!

Ben OTURUM saklanan dizi ile doğrudan çalışabilirsiniz

Evet. $_SESSION (normal olarak) size session_start() oturum dosyaları içeriği unserializing tarafından çağırdığınızda doldurulur sadece bir dizidir. script sonlanana veya session_write_close() çağrıldığında, $ _SESSION dizi serialize() 'dosyaya geri d olduğunu. hiçbir sihirli gerçekten.

Eğer should yaparsanız tüm $_SESSION bir global variable sonra ki (ewwww), başka bir soru.

Gidebilirsin sadece başka bir rota ...

Kullanıcı tabloda bir last_activity damgası alanı var ve kullanıcı yeni bir sayfa yükler her güncelleyin.

Her post / forum için bir LAST_UPDATED damgası alanı var.

Bir forum / sonrası "okunmamış" olup olmadığını görmek için sadece damgaları karşılaştırabilirsiniz.

Benim uygulama diyor ki: Onlar (metin dolu olan, özellikle forum gibi projelerde) kaynakların en pahalı olduğundan, karma masalar performansı hakkında endişe, ama db-ilgili konularda sanmıyorum. Ben PHP performansı ile ilgili sorunlar hiç karşılaşmadım. MySQL sorunları her zaman çok daha hızlı geldi.