دوستان بنده بنده یه سایت خبری دارم !
میخوام ستون سمت چپ سایتم پر بازدیدترین خبرهای هفته جاری نمایش بدم
سایتم با وردپرس هسته این کد پر بازدید ترین خبرهای هفته جاری رو نمایش میده
کد:
<?php
query_posts('meta_key=post_views_count&orderby=meta_value_num&order=DESC&showposts=10');
if (have_posts()) : while (have_posts()) : the_post(); ?>
<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php
endwhile; endif;
wp_reset_query();
?>
خب این کد برای هر بازدید کننده که وارد سایتم میشه تو کل پست های سایت سرج میکنه 10 خبر پربازدید نمایش میده که اگر 1000 خبر در سایتم باشه روزی 2000 نفر وارد سایت بشه یعنی 2000 بار باید تو 1000 خبر جستجو کرد در نتیجه فشار زیادی به سرور میار
خب من میخوام قسمت پر بازدیدترین خبرهارو طوری بنویسم که مثلا امروز اومین نفری که وارد سایت شد ساعت 7:00 اطلاعات ده خبر پربازدید در فایل یعنی عنوان خبر- لینک خبر -خلاصه خبر -کد خبر -تاریخ ثبت خبر ذخیره کنه که دفعات بعد که کاربر مراجعه میکنه اطلاعات ده خبر که ذخیره شده بدون جستجو نمایش بده تا اینکه دوساعت بعد که کاربر دگه وارد سایت شده اطلاعات ده خبر پربازدید آپدیت بشه
امیدوارم متوجه منظورم شده باشین
حالا میخوام بدونم چطور میتونم اطلاعات ذخیره کنم و چطور اطلاعات ذخیره شده نمایش بده و چطور بر اساس زمان مثلا همین که دوساعت یکبار اطلاعات آپدیت کنم؟
کد:
<?php
query_posts('meta_key=post_views_count&orderby=meta_value_num&order=DESC&showposts=10');
if (have_posts()) : while (have_posts()) : the_post(); ?>
جای پنج تا کد زیر باید کد ذخیره نوشته بشه
<?php the_permalink() ?> خروجی لینک خبر
<?php the_title(); ?> عنوان خبر
<?php echo get_post_meta($post->ID, 'img',true); ?> لینک تصویر بند انگشی
<?php the_excerpt(); ?> خلاصه خبر
<?php the_ID(); ?> کد خبر
<?php
endwhile; endif;
wp_reset_query();
?>
وردپرس به صورت مستقیم قابلیت کش cache نداره
مگه اینکه این قابلیت رو به صورت پلاگین براش بنویسین
خب منم برای همین پرسیدم میخوام بدونم چطور اینکارو بکنم!
با اجازه
شما میتونید یه جدول درست کنی یا فیلد های زیر
id
news_id
time
بعد به اسکریپت بنویسی که برای اولین بار بیاد لیست ای دی های خبر رو ارایه کنه و بریزه تو فیلد نیوز ای دی و تو فیلد تایم یه برچسب زمان به اضافه 7600 اضافه کنه و برای سری بعد بیاد چک کنه اگه تایم بیشتر از تایم اضافه شده بود دوباره سرچ کنه و لیست جدید رو اضافه کنه به بانک
در انطرف هم بیا یه یست شو بذار با اکسپلود ارایه رو جدا کن و ای دی خبر ها رو در بیار بذار تو حلقه یا با فور ایچ یه حلقه برای ارایه بذار و اخبار رو لیست کن
اول اینکه من با بانک هنوز کار نکردم !
و اینکه بنظورتون اطلاعات در فایل txt ذخیره کنم بهتر نیست؟
چون باید پربازدیدترین خبرهای هر دسته خبر ذخیره بشه اینجور مستقیم پربازدیدهردسته خبر در یه فایل txt ذخیره میکنم دفعه بعد مستقم همون فایل نمایش میده بدون هیچ گونه جستجویی
یعنی بطور مثال پربازدید ترین خبرهای سیاسی در فایلی بنام Political.txt ذخیره میکنم
پربازدید ترین خبرهای اجتماعی در فایلی بنام Social.txt ذخیره میکنم
پربازدید ترین خبرهای اقتصادی در فایلی بنام Economic.txt ذخیره میکنم
و هر زمان مثلا کاربر داره اخبار سیاسی رو میخونه محتویات فایل Political.txt نمایش میدم
اگر از بانک استفاده کنم چون دسته بندی مختلفی وجود داره باز باید یه فیلد اضافی به عنوان دسته خبر ایجاد کنم
و هر زمان کاربر وارد بخش سیاسی شد دوباره کوئری بگیرم که اخبار سیاسی رو نمایش بده
خوب با بانک خیلی بهتره و خوب جواب میده
برای تاریخ و زمانش یاید یه فایل دیگه درست کنی اینجور میشه 10 فایل ولی بانک یه فیلد اضافه میکنی
شما میتونید از کش هم استفاده کنید
نقل قول: وقتی به روی سایت هایی کار می کنید که با استفاده php و بدون هیچ فریم ورکی قرار است اجرا شوند، سرعت گاهی مساله ساز می شود. کش کردن صفحات برای افزایش سرعت صفحات در اینگونه پروژه ها به شدت مورد نیاز است. در این مقاله با هم یک راه بسیار ساده برای کش کردن صحات php به صورت داینامیک را مورد بررسی قرار می دهیم. بعد از اجرای آن از سرعت بارگذاری صفحات شگفت انگیز خواهید شد.
مرحله اول : ساخت فایل top-cache.php
ما باید دو فایل ایجاد کنیم. اولی را به اسم top-cache.php بسازید و کد زیر را داخل آن قرار دهید.
کد php:
<?php
$url = $_SERVER["SCRIPT_NAME"];
$break = Explode('/', $url);
$file = $break[count($break) - 1];
$cachefile = 'cached-'.substr_replace($file ,"",-4).'.html';
$cachetime = 18000;
// Serve from the cache if it is younger than $cachetime
if (file_exists($cachefile) && time() - $cachetime < filemtime($cachefile)) {
echo "<!-- Cached copy, generated ".date('H:i', filemtime($cachefile))." -->\n";
include($cachefile);
exit;
}
ob_start(); // Start the output buffer
?>
خب، این کد چکار انجام می دهد؟ در ۵ خط اول فایل کش را بر اساس اسم فایل php درنظر می گیریم. برای مثال اگر اسم فایل شما list.php باشد، اسم فایل کش شده cached-list.html خواهد بود.
در خط ششم یک متغیر با اسم $cachetime ایجاد می کنیم که برای تعیین عمر فایل کش مورد استفاده قرار می گیرد.
از خط ۹ تا ۱۳ با استفاده از یک شرط به دنبال اسم فایل کش شده می گردیم در صورتی که فایل مورد نظر وجود داشته باشد. یک کامنت ( خط ۱۰ ) چاپ کرده و فایل $cachefile را در صفحه قرار می دهیم و با استفاده از دستور exit از اجرای باقی برنامه صرف نظر می کنیم. این کد به این معنی است اگر یک فایل استاتیک پیدا شد از اجرای سایر کدها توسط سرور صرف نظر کنید.
در خط شماره ۱۴ یک بافر از فایل ایجاد می کنیم البته در صورتی که $cachefile را پیدا نکنیم. همین کدها برای top-cache.php کافی است.
مرحله دوم: ایجاد فایل bottom-cache.php
حالا یک فایل جدید بسازید،اسم آن را bottom-cache.php قرار دهید و کدهای زیر را در آن بگذارید:
کد php:
<?php
// Cache the contents to a file
$cached = fopen($cachefile, 'w');
fwrite($cached, ob_get_contents());
fclose($cached);
ob_end_flush(); // Send the output to the browser
?>
اگر فایل $cachefile روی سرور پیدا نشود، این کد اجرا میشود و آن را ایجاد می کند. بنابراین در مرحله بعد هنگامی که این صفحه فراخوانی شود فایل استاتیک $cachefile به کاربر نمایش داده می شود به جای اجرای کامل کد php.
مرحله سوم : استفاده از فایل های ایجاد شده در صفحات خودتان
حالا شما دو فایل لازم برای ایجاد کش را در اختیار دارید، بنابراین به راحتی باید این دو کد را در ابتدا و انتهای صفحاتی که میخواهید کش شوند قرار دهید. همانطور که احتمالا حدس زده اید، باید top-cache.php را در ابتدای کد خود و bottom-cache.php را در انتهای کد خود فراخوانی کنید. مانند کد زیر :
کد php:
<?php
include('top-cache.php');
// Your regular PHP code goes here
include('bottom-cache.php');
?>
حالا اگر این کد را در یک صفحه که سرعت اجرای پایینی دارد اجرا کنید، از اجرای آن متحیر خواهید شد. اگر در پروژه های کوچک خود از فریم ورک استفاده نمی کنید، این یک راه حل ساده و سریع برای دست و پنجه نرم کردن با مساله کش است.
منبع
http://zangeweb.com/
(۲۳-تير-۱۳۹۲, ۱۸:۳۵:۳۱)kimiafars نوشته است: [ -> ]خوب با بانک خیلی بهتره و خوب جواب میده
برای تاریخ و زمانش یاید یه فایل دیگه درست کنی اینجور میشه 10 فایل ولی بانک یه فیلد اضافه میکنی
حقیقتش گفتم که php در حد متوسط بلدم ولی هنوز کار با بانک بلد نیستم(ولی اگر ببینم روش بانک بهتره حتما" یاد میگیرم)
و اینکه من کلا میخوام جستجو در بانک حذف کنم جستجو در بانک فشار به سرور میاره
و چون با فایل txt بدون جستجو به محتویات مورد نظر دسترسی مستقیم داره
نکته مهم : افزایش پیدا کردن تعداد فایل ها اصلا مهم افزایش سرعت دسترسی و کاهش فشار به سرور
و اینکه این روش کش هم با روشی من میخوام فکر نکنم تفاوتی داشته باشه چون روشی من میگم دوتا فایل یه فایل ذخیره time و یکی هم ذخیر محتویات
و یه سوال داشتم من درست متوجه روش کش نشدم کش هم همینکاری من میگم میکنه؟یعنی از خروجی اون صفحه مورد نظر یه فایل دگه ایجاد میکنه و بر اساس زمان cachetime این فایل اپدیت میکنه و برای نمایش هم فایلی که ساخته نمایش میده به کاربر؟
(۲۳-تير-۱۳۹۲, ۲۲:۲۷:۳۵)aleas نوشته است: [ -> ] (۲۳-تير-۱۳۹۲, ۱۸:۳۵:۳۱)kimiafars نوشته است: [ -> ]خوب با بانک خیلی بهتره و خوب جواب میده
برای تاریخ و زمانش یاید یه فایل دیگه درست کنی اینجور میشه 10 فایل ولی بانک یه فیلد اضافه میکنی
حقیقتش گفتم که php در حد متوسط بلدم ولی هنوز کار با بانک بلد نیستم(ولی اگر ببینم روش بانک بهتره حتما" یاد میگیرم)
و اینکه من کلا میخوام جستجو در بانک حذف کنم جستجو در بانک فشار به سرور میاره
و چون با فایل txt بدون جستجو به محتویات مورد نظر دسترسی مستقیم داره
نکته مهم : افزایش پیدا کردن تعداد فایل ها اصلا مهم افزایش سرعت دسترسی و کاهش فشار به سرور
و اینکه این روش کش هم با روشی من میخوام فکر نکنم تفاوتی داشته باشه چون روشی من میگم دوتا فایل یه فایل ذخیره time و یکی هم ذخیر محتویات
و یه سوال داشتم من درست متوجه روش کش نشدم کش هم همینکاری من میگم میکنه؟یعنی از خروجی اون صفحه مورد نظر یه فایل دگه ایجاد میکنه و بر اساس زمان cachetime این فایل اپدیت میکنه و برای نمایش هم فایلی که ساخته نمایش میده به کاربر؟
این کد 10 خبر برتر هفته که گذاشتین اونقدرها به سرور فشار نمیاره حتی برای بازدید 10،000 نفر و 100،000 پست چون هم order by شده و هم limit
اگه مشکل سنگین بودن سایت و دان شدن سرور داری اولین راهش چک کردن پلاگین ها هست
از افزونه P3 (Plugin Performance Profiler) استفاده کن تا ببینی هر افزونه چقدر از منابع سیستم رو مصرف میکنه و اینکه wp-jalali اصلا بهینه نیست و خودش معضلیه برای سایت
لطفا روش کار با افزونه را هم بفرمایید
نصب که کردین scan now رو میزنین
خودش به صورت یه چارت pie همه چیز رو نشون میده