PDA

View Full Version : بهترین روش برای ساخت سایتهای خبری



Ehsan Rafsanjani
سه شنبه 11 بهمن 1384, 02:45 صبح
من در حال ساخت یه سایت خبریم البته الان بین دو راهی قرار گرفتم و البته خیلی مهمه چون اگه تصمیم اشتباه بگیرم جبرانش خیلی سخته اونم اینه که خبرهای سایت رو به صورت فایل روی سرور ذخیره بشه و فقط آدرس اونا توی دیتابیس ذخیره بشه؟ یا همه اخبار به طور کامل شامل عکس ها و جزییات در دیتابیس ذخیره بشه؟
البته اگه چند نکته برام روشن بشه به انتخابم خیلی کمک می کنه
مثلا موتور سرچ ها نوع دوم رو چه جوری می تونن پیدا کنن وقتی اطلاعات خبر توی دیتابیس؟
سرعت کدوم مدل بیشتر؟
البته من چند تا سایت خبری رو چک کردم مثل سی ان ان و ایرنا و حتی بی بی سی که به نظرم همه از نوع اول استفاده کردن و یه سوال دیگه که برام پیش اومده اینه که چرا صفحات این سایت های خبری همه اچ تی ام ال ................... مگه اینا صفحاتشون پویا نیست یا اصلا از چه برنامه ای استفاده می کنند؟ دات نت یا پی اچ پی یا ..............

ممنون

mehranFX
سه شنبه 11 بهمن 1384, 09:39 صبح
سایت هایی مثل بی بی سی یا سی ان ان همگی پویا هستند یعنی با استفاده از سیستم محتوا ساز خودشون با استفاده از تکنولوژی XML صفحات رو به صورت استاتیک آماده می کنند و اینجوری سرعت بارگذاری صفحات هم خیلی بهتر می شه !!!
برای کسب اطلاعات تکمیلی یه مقاله اینجا خواهم گذاشت .

Ehsan Rafsanjani
سه شنبه 11 بهمن 1384, 14:58 عصر
ممنون ولی با همین تکنولوژی دات نت از کدام روش استفاده کنم؟

mehranFX
سه شنبه 11 بهمن 1384, 22:02 عصر
این مقاله رو از آقا بهروز نوعی پور نقل می کنم :

شاید برای شما جالب باشد که بدانید سایت هایی بزرگی چون CNN یا news.com چگونه صفحات خود را تولید می کنند و اینکه چرا پسوند صفحات آنها مثلا بجای asp یا aspx یا php وغیره، html است؟ این مقاله را بخوانید تا با یکی از متداول‌ترین و مناسب‌ترین راه‌های تولید صفحات وب بصورت استاتیک برای سایت‌های با محتوای دینامیک مانند سایت های خبری یا مقاله‎ای آشنا شوید.
اشاره:

این مقاله به تشریح یکی از متداول‌ترین و مناسب‌ترین راه‌های تولید صفحات وب برای سایت‌های با محتوای دینامیک از جمله سایت‌های ناشر خبر و مقاله به کمک XML می‌پردازد. روشی که در این مقاله توضیح داده شده برای تمام فناوری‌های ایجاد صفحات دینامیک از جمله ASP.NET ،PHP ،JSP‌ و ColdFusion قابل اجراست اما در این مقاله تنها به روش پیاده سازی تکنیک مورد بحث با استفاده از ASP.NET اشاره شده است. برای اینکه بتوانید از این مقاله حداکثر استفاده را داشته باشید، لازم است قبلا با مبانی XML و XSL آشنایی نسبی داشته باشید ولی برای آندسته از خوانندگان که اطلاعات خیلی کمی دراین باره دارند، توضیحات مقدماتی آورده شده است.


صورت مساله

اگر یک طراح و برنامه‌نویس صفحات وب باشید، حتما تاکنون متوجه شده‌اید که یکی از روش‌های متداول برای نمایش محتوای اطلاعاتی در سایت‌های خبری اینست که به ازای هر خبر یا مقاله‌ی قابل نمایش در صفحات سایت، یک رکورد متناظر در پایگاه داده‌های (پایگاه داده) سایت قرار دهیم و اطلاعات درون فیلدهای هر رکورد را به محض درخواست بازدیدکننده، داخل یک صفحه Template از جنس ASP یا ASP.NET و غیره نمایش دهیم. اما اگر احیانا به ساختار سایت‌های خبری بزرگ مانند CNN و news.com توجه کرده باشید، ممکن است از خود پرسیده باشید <چطور تعداد صفحات وب دینامیک این سایت بسیار اندک یا در حد صفر است؟> چرا بعضی از سایت خبری بزرگ برای نمایش اخبار و مقالات خود از صفحات html به جای asp و aspx و php و jsp استفاده می‌کنند؟ چه رازی بر این شیوه حاکم است و اصولا این روش چه مزیتی دارد؟

به زبان دیگر، سوال اساسی اینست که آیا برای نمایش محتوای دینامیک در یک سایت وب، حتما مجبور به استفاده از صفحات دینامیک مانند ASP.NET و PHP‌ و غیره هستیم؟ یا اینکه ترفند دیگری هم وجود دارد؟


بررسی موضوع

در واقع پاسخ مثبت است. بسته به اینکه منطق شما برای تولید صفحات خبر و مقاله چگونه باشد، تکنیک‌های متفاوتی برای این منظور وجود دارد که تنها یکی از آنها بکارگیری صفحات دینامیک است. روشهای دیگری هم برای نمایش محتوای دینامیک در سایت وجود دارند که ما یکی از آنها را که بهتر به نظر می‌رسد، بررسی خواهیم کرد. اما شاید یادآوری این نکته بد نباشد که ببینیم روش مرسومی که غالبا سایت‌های کوچک و متوسط خبری بکار می‌برند ( و مورد نظر این مقاله هم نیست) چگونه عمل می‌کند.

در روش متداول که آسان ترین روش نیز هست، شما به ازای تمام مقالات و اخباری که فرمت مشابهی دارند، فقط و فقط یک صفحه نمایش دهنده خبر یا مقاله، آنهم از جنس ASP.NET یا ASP می‌سازید و به کمک آن، محتوای خبر یا مقاله مورد نظر را نمایش می‌دهید. شما در حقیقت از روش رندرکردن (Render) صفحه در زمان نمایش استفاده می‌کنید.

مهمترین کاری که باید در این تکنیک صورت گیرد، انتقال مقدار فیلد کلیدی هر رکورد (معمولا فیلد id) به صفحه Template مذکور و خواندن اطلاعات همان رکورد از طریق یک فرمان SQL می‌باشد. به عنوان مثال با اجرای URL زیر در یک سایت فرضی:

article.aspx?id=102632

مقدار id مساوی عدد 102632 به عنوان کلید رکورد به صفحه ASP.NET‌ انتقال یافته و در داخل صفحه، یک جا به کمک فرمانی مانند عبارت زیر:

SELECT * FROM Articles WHERE ID=@id

اطلاعات فیلدهای مربوط به این رکورد را می‌خوانیم و سپس در طول صفحه از طریق کدهایی مانند عبارت زیر:

<#% DataBinder.Eval( Container, “DataItem.ArticleTitle” ) %>

داخل صفحه Template نمایش می‌دهیم.

چنانکه ملاحظه می‌کنید، در این روش هربار که کاربری قصد مشاهده خبر یا مقاله مورد نظر (با کد 102632) را داشته باشد، یکبار فرآیند فوق اجرا شده و صفحه دینامیک رندر می‌شود و سپس برای بازدیدکننده نمایش داده میشود.

در روش دیگری که مقصود این مقاله است، ما مایل هستیم به ازای هر خبر یا مقاله، یک صفحه استاتیک متمایز داشته باشیم، طوری که کاربر برای مشاهده مطلب مورد نظر، به عنوان مثال با کلیک کردن روی صفحه‌ای با نام 102632.htm بتواند آن را مشاهده کند. در این روش باید تکنیکی را پیدا کنیم که قبلا به ازای تمام رکوردهای خبر و مقاله درون بانک اطلاعاتی، یک صفحه وب تولید و روی server ذخیره کرده باشیم.


مزایای تولید صفحات استاتیک از روی رکوردهای پایگاه داده

قبل از هرچیز می‌خواهیم بدانیم اصولا فایده روش مذکور چیست و درحالی که خیلی ساده می‌توانیم از طریق ترفند article.aspx?id=102632 یک خبر یا مقاله خاص را به سادگی نمایش دهیم، چرا باید به ازای هر خبر یک صفحه جداگانه وب تولید کنیم؟

۱- صفحات استاتیک سریعتر اجرا می‌شوند.
مهمترین دلیل برای روی آوردن به این روش آنست که به این ترتیب سرعت نمایش صفحات سایت شما بالا می‌رود زیرا صفحات دینامیک مانند ASP.NET و PHP نیاز به رندر شدن دارند درحالی که صفحات HTML‌ برای نمایش روی مرورگر کاملا آماده هستند. گذشته از اینها اگر یک سایت خبری پربیننده باشد، تعدد پردازش‌های دینامیک، فشار زیادی را روی سرور ایجاد می‌کند که در مجموع راندمان آن را پایین می‌آورد. حتی اگر سایت شما بیننده اندکی داشته باشد، در صورتی که از روش Shared Hosting استفاده کنید، توانایی سرور برای همان تعداد اندک بازدیدکننده چندان بالا نخواهد بود و شما در همان میزان اندک نیز شاهد کاهش راندمان سایت متناظر با افزایش تعداد بازدیدکنندگان خواهید بود.

۲- Load‌ روی پایگاه داده کم می‌شود.
حسن بزرگ دیگری که از بکارگیری روش توصیه شده در این مقاله حاصل می‌شود آنست که فشار روی پایگاه داده کم می‌شود. به عنوان یک توصیه کلی و یک اصل تجربه شده همواره به خاطر داشته باشید که هرچه استفاده از پایگاه داده ها در یک سایت کمتر باشد بهتر است! این هنر نیست که شما برای تکمیل هر فرآیند کوچکی در سایت خود از پایگاه داده‌ استفاده کنید زیرا افزایش میزان استفاده از بانک اطلاعاتی موجب کند شدن سرعت نمایش صفحات از یک سو و نیز بالا رفتن میزان منابع سیستمی مورد نیاز برای پردازشهای دینامیک (resources) از سوی دیگر می‌شود. بنابراین همواره در جستجوی روش هایی باشید که از پایگاه داده‌کمتر استفاده شود. استفاده موجز و مختصر و موثر از پایگاه داده یک روش صد در صد توصیه شده از سوی برنامه نویسان باتجربه است.

۳- وابستگی سایت شما به پایگاه داده کم می‌شود.
به طور کلی وقتی تعداد صفحات دینامیک یک سایت کمتر می‌شود، وابستگی آن به پایگاه داده‌ نیز کمتر می‌شود و این به معنی کاهش منابع اشکال زا در هنگام وقوع خطاست. به عنوان مثال سایتی که شدیدا به پایگاه داده ها وابسته است در صورتی که برای چند دقیقه پایگاه داده دچار مشکل یا down شود، ممکن است ده‌ها بازدیدکننده را با خطا یا exception مربوط به در دسترس نبودن بانک اطلاعاتی مواجه کند. سایتی که از صفحات استاتیک بیشتر استفاده می‌کند کمتر در این مواقع دچار اشکال و نارسایی می‌شود.

۴- جستجوی صفحه برای ماشین‌های جستجو آسان می‌شود.
دقت کنید که برخی از موتورهای جستجو، چه آنهایی که روی کل اینترنت کار می‌کنند و چه آنهایی که روی یک سایت مشخص عمل می‌کنند، با برخی پارامترهای انتقال داده شده به یک صفحه دینامیک مشکل دارند. بهترین و سریع‌ترین روش ممکن برای ایندکس شدن صفحات وب یک سایت در یک موتور جستجو اینست که آن صفحه اساسا به صورت استاتیک باشد.

۵- استناد به URL‌ یک خبر یا مقاله خاص برای مردم آسانتر می‌شود.
فراموش نکنید که وقتی آدرس یک خبر یا مقالهدرسایتشمابهصورتarticle.as px?id=102632&cat=214&sessionid=423442
و مشابه اینها (یا در اغلب اوقات حتی پیچیده‌تر) است، به خاطر سپاری آدرس و یا درج آن در کتاب‌های و مجلات و روزنامه‌ها سخت‌تر می‌شود. درحالی که آدرس یک صفحه به صورت 102632.htm خیلی راحت‌تر است و احتمال اینکه موقع نوشتن یا تایپ یا حتی به خاطر سپردن آدرس، اشتباهی صورت بگیرد کمتر است.

۶- آرشیو کردن اخبار و مقالات بهینه‌تر می‌شود.
یادتان نرود که اگر قرار باشد سایت شما برای مدت چند سال فعالیت کند آنوقت باید حجم عظیمی از اطلاعات را به صورت دینامیک داخل پایگاه داده‌ نگهداری کنید. اینکار هم هزینه شما را بالا می‌برد ( بخصوص اگر از SQL Server‌ یا MySQL‌ یا ORACLE‌ و DBMS‌های دیگر استفاده کرده باشید) و نگهداری‌اش سخت می‌شود. اگر مهمترین کاربرد بانک اطلاعاتی در سایت شما نگهداری محتوای اخبار و مقالات است، بهتر است فقط آخرین x رکورد را داخل پایگاه داده‌ دم دست نگه دارید و بقیه رکوردها را از بانک اطلاعاتی خارج، و به طریقی که صلاح می‌دانید (مثلا ذخیره کردن به صورت صفحات استاتیک وب) آرشیو کنید. به این ترتیب رکوردهای قدیمی شما خیلی ساده از طریق جابجا کردن صفحات وب، قابل انتقال خواهند بود و اگر زمانی تصمیم بگیرید Host‌ خود را عوض کنید، برای جابجا کردن داده‌های درون پایگاه داده‌ مکافات نخواهید داشت!

۷- برای نمایش صفحات سایت به Host ارزان‌تری نیاز خواهید داشت.
به کمک روش تولید مکانیزه صفحات استاتیک می‌توانید تمام یک سایت را با صفحات معمولی HTML بسازید، بدون اینکه نیازمند استفاده از قابلیت‌های یک web server خاص باشید. مثلا اگر از یک میزبان ارزان قیمت استفاده می‌کنید که به شما اجازه استفاده از امکانات پیشرفته‌ای چون پایگاه داده را نمی‌دهد، می‌توانید سایت خود را به طور کامل به صورت استاتیک بسازید. به این ترتیب که روی یک دستگاه خانگی سایت خود را شبیه‌سازی می‌کنید و صفحات استاتیک را با روش توضیح داده شده در این مقاله تولید می‌کنید و سپس حاصل کار را در دوره‌های زمانی مشخص به میزبان سایت اصلی خودتان upload می‌کنید. البته اگر سایت خود را تمام استاتیک بسازید، امکان پیاده سازی قابلیت‌هایی مانند جستجو (منظور خود صفحه جستجوگر است نه صفحاتی که مورد جستجو قرار می‌گیرند) را نخواهید داشت

Ehsan Rafsanjani
چهارشنبه 12 بهمن 1384, 19:30 عصر
خیلی ممنون از این مقاله جالب ..................... خیلی نکات خوب رو گفته بود
اگه بتونین یک نمونه کد و یا راهنمای ساخت روش های مشابه این سایت رو هم بزارین که خیلی عالی می شه
البته چند تا سوال برام پیش اومد مثلا تکلیف View State ها و تبایغ های هوشمند و کنترل هایی که به طور معمول در صفحات aspx استفاده می کنیم در این صفحات اچ تی ام ال چی می شه؟
یا شمارشگرهای صفحه و یا کلیک؟

nazaninam
پنج شنبه 25 اسفند 1384, 15:10 عصر
میشه ادامه بدید ...

empoly
پنج شنبه 03 فروردین 1385, 14:23 عصر
سلام
با تشکر از دوست عزیز mehranfx حق با دوستمون ehsan rafsanjani هست

اگه لطف کنین یه مثال خیلی ساده بزنید ممنون می شم
مثلاً فرض کنید سایت خبری خیلی ساده هست و هر خبری یک عنوان و یه متن داره
و ما میخواهیم برای هر خبر یک صفحه html داشته باشیم
من مثال آقای بهروز نوعی را دیدم ولی نتونستم باهاش کار کنم
اگه لطف کنین و با #C مثال بزنین خیلی بهتره
پر رویی من را ببخشید

saeid taheri
چهارشنبه 03 آبان 1385, 23:17 عصر
این یک مثال کامل از آقا بهروز نوعی بور است
امیدوارم بدرد بخوره

manager
پنج شنبه 04 آبان 1385, 09:01 صبح
آقا سعید تو این مقاله ای که از طرف آقای نوعی پور گذاشتید به مزایای استفاده از روش استاتیک اشاره شده است ولی به خود روش اشاره نشده است. اگر امکان داره یه توضیح مختصر بذارید برای اونهائی که وقت ندارن مثال رو دانلود کنن و بررسی کنن چه روشی درش استفاده شده ... ممنون

saeid taheri
پنج شنبه 04 آبان 1385, 21:57 عصر
مرحله اول

در این مرحله از روی Dataset یک xml می سازیم


'single node-----------------------
Dim myData As DataSet = GetDataSet()
Dim doc As XmlDataDocument = New XmlDataDocument(myData)
Dim FileName As String
Dim ln As Integer
Dim node As XmlElement = doc.DocumentElement.SelectSingleNode
("//Table[ID=" + RecordID.ToString + "]")

توجه کنید که من روش ساختن dataset را توضیح نداده ام ولی شما خودتان می توانید تابع GetDataSet را مطابق نیازتان بنویسید.

شی جادوئی XmlDataDocument کارش تبدیل dataset به xml است . خط آخر این مرحله یک شئ XmlElement از روی همان رکوردی که می خواهیم اطلاعاتش را بخوانیم می سازد. دقت کنید که چطوری نام جدول پایگاه داده و id رکورد را که به صورت input وارد تابع کرده ام به این شئ خورانده می شود.

مرحله دوم

حالا باید از روی خروجی xml شئ مذکور یعنی node.OuterXml یک شئ XmlDocument بسازیم و dataset را کنار بگذاریم (توجه کنید که در سورس اصلی تابعی که نوشته ام مرحله دوم و سوم را داخل یک شرط if قرار داده ام تا اگر رکورد مورد نظر پوچ بود این دو مرحله اجرا نشوند)



Dim doc2 As XmlDocument = New XmlDocument
doc2.LoadXml(node.OuterXml)
'Generate HTML file name
FileName = RecordID.ToString
Dim HTMLsPath As String = Server.MapPath("\") + "Articles\" + Trim
(doc2.SelectSingleNode("//Category").InnerText) + "\"


در واقع یک XmlDocument در کد برنامه دات نت معرف یک xml است . و در تمام این مقاله هر جا گفتم کلاس (یا شئ xml در دات نت) بیشتر مقصودم همین شئ بود. البته کل اشیاء بکار رفته در این مقاله از کلاس مادر System.xm و System.xml.xsl مشتق شده اند.

در ادامه این مرحله من کمی با اطلاعات فیلد RecordID بازی کرده ام تا یک نام دلخواه و یک path مناسب برای ذخیره کردن فایل html نهایی جور کنم. همچنین اگر خواستید روی داده های رکورد مورد نظر پیش از قرار گرفتن در xsl تغییری انجام دهید مثلا تاریخ میلادی را به شمسی تبدیل کنید جایش همین مرحله است . با استفاده از syntax زیر می توانید به محتویات یک فیلد از این رکورد دسترسی داشته باشید(قابل خواندن و نوشتن):



doc2.SelectSingleNode("//FieldName").InnerText


مرحله سوم

در این مرحله عملیات جادویی تبدیل صورت می گیرد!
خط اول یک XslTransform معرفی کرده ام. این شئ یک تابع بدقلق اما فوق العاده نیرومند دارد که حدود ده تا تعریف overload دارد . یعنی می توان این تابع را به چندین روش فراخوانی کرد.
من فایل xsl که به روش توضیح داده شده ساختم را به اسم temp.html در همان مسیری (path) که می خواهم فایل خروجی را ذخیره کنم قرار دادم. ابتدا با استفاده از تابع load این فایل را باز می کنم سپس با استفاده از یک شئ جادویی دیگر به نام XmlTextWriter یک مجرای خروجی (یک stream) برای تابع Transform فراهم می کنم:



'Transform
Dim xslt As XslTransform = New XslTransform
xslt.Load(HTMLsPath + "temp.html")
Dim writer As XmlTextWriter = New XmlTextWriter(HTMLsPath +
FileName + ".htm", System.Text.Encoding.UTF8)
'writer.Formatting = Formatting.Indented
'writer.Indentation = 2
xslt.Transform(doc2, Nothing, writer, Nothing)
writer.Close()


ذکر چند نکته در اینجا ضروری است:

1- آدرسی که در مرحله دوم ساختم را به XmlTextWriter می دهم.
2- فرمت یونی کد را نیز برای XmlTextWriter مشخص می کنم.
3- اگر دلم خواست از property فرمتینگ نیز استفاده می کنم:



writer.Formatting = Formatting.Indented
writer.Indentation = 2


این property خیلی جالب و در عین حال دردسرساز است . کارش اینست که خروجی html شما را برای خواندن سورس آن فرم بدهد. اگر اینکار را نکنید XmlTextWriter تمام فایل html شما را در یک خط می نویسد . هنگام نمایش html هیچ اتفاق یا مشکل خاصی رخ نمی دهد اما اگر بروید روی مرورگر گزینه view source را بزنید متوجه می شوید که خواندن این فایل واقعا مکافات است

این property مشکل فوق را حل می کند

سر انجام فرمان آسمانی Transform انجام می شود . همه مقاله را به خاطر این تابع پرتشریفات نوشتم

این خلاصه ای از مقاله آقای بهروز نوعی پور بود
کد این برنامه در ضمینه موجود می باشد می توانید استفاده نمایید
امیدوارم مورد قبول قرار گیرد

pouriams
یک شنبه 08 بهمن 1385, 13:11 عصر
درود
آقایون بسیار سپاسگزارم. مشکل بزرگی از من را حل کردید.
بدرود

saeid taheri
سه شنبه 10 بهمن 1385, 22:40 عصر
قابلی نداشت موفق باشی

javad3151
دوشنبه 16 بهمن 1385, 16:47 عصر
سلام دوست عزیز
از مقاله شما استفاده کردم ولی چند تا نکته :
1- بعید به نظر میرسه که با ایجاد چند تا کانکشن ساده به دیتابیس ، سرعت پایین بیاد مخصوصا اگر در انتخاب Host دقت کرده باشید. در مقابل چند سایت خبری که شما نام بردید ، سایت ها عظیمی هست که از صفحات داینامیک استفاده می کنند و از سرعت خوبی هم برخوردار هستند(مثل سایت مایکروسافت)

2- نرم افزار های پایگاه داده نظیر sql server بسیار قدرتمند هستند و با چند تا مقاله و خبر و... کم نمیارند مثلا دیتابیس شرکت مینولتا 3 ترابایت هست و 700 کاربر همزمان از اون استفاده می کنند (sql server)

3-مطمئنا وقتی صفحات شما استاتیک بشه از بسیاری از توانایی های صفحات داینامیک و قابلیت های دایتابیس (مثل Fulltextsearch) محروم میشوید

4- از همه موارد مهمتر اینکه خیلی از سایت ها در ظاهر استاتیک هستند و در واقع از Url Rewriting استفاده می کنند.

5- در مورد موتورهای جستجوگر ، اگر شما از Sitemap استفاده کنید، میبینید که بسیاری از صفحات شما توسط این سایت ها ساپورت میشه.

6-نگهداری اطلاعات در دیتابیس به مراتب راحت تر است و امنیت بیشتری داره؛ شما براحتی می تونید بصورت اتوماتیک از داده ها پشتیبان بگیرید (توی یک فایل ساده) و هر وقت که خواستید از اونها استفاده کنید.

و.... خیلی مطالب دیگه

khz-web1
شنبه 30 تیر 1386, 03:11 صبح
آقا سورس کدی ندارین واسه سیستم خبری به زبان وی بی