سؤال

أقوم بإنشاء تطبيق iPhone مع JQTouch وأستخدم CacheManifest لتخزين جميع الملفات الثابتة (الصور ، CSS ، JavaScript) لجعله يتم تحميله بشكل أسرع. ومع ذلك ، تستخدم الصفحة PHP للمحتوى الديناميكي ولا أريد تخزين هذا. لذلك أنا أقوم بإنشاء cachemanifest مع هذا php-script (manesest.php):

<?php
header('Content-Type: text/cache-manifest');
echo "CACHE MANIFEST\n";

$hashes = "";
$lastFileWasDynamic = FALSE;

$dir = new RecursiveDirectoryIterator(".");
foreach(new RecursiveIteratorIterator($dir) as $file) {
  if ($file->IsFile() && $file != "./manifest.php" &&
    substr($file->getFilename(), 0, 1) != ".") {
    if(preg_match('/.php$/', $file)) {
      if(!$lastFileWasDynamic) {
        echo "\n\nNETWORK:\n";
      }
      $lastFileWasDynamic = TRUE;
    } else {
      if($lastFileWasDynamic) {
        echo "\n\nCACHE:\n";
        $lastFileWasDynamic = FALSE;
      }
    }
    echo $file . "\n";
    $hashes .= md5_file($file);
  }
}

echo "\nNETWORK:\nhttp://chart.apis.google.com/\n\n# Hash: " . md5($hashes) . "\n";
?>

هذا في الواقع يعمل بشكل جيد حقًا باستثناء شيء مزعج واحد:

من ما قرأته في مكان ما ، يتم تضمين الملف الذي يطلق على CacheManifest بشكل تلقائي في البيان ويتم تخزينه مؤقتًا. Wich يعني أن INDEX.PHP الخاص بي ، حيث أسمي CacheManifest هو مخبأة. هذا يؤدي إلى مشاكل مزعجة للغاية.

هل هناك أي طريقة للتعامل مع هذا أو أي حل ذكي؟ الصفحة موجودة في Cachemanifest المدرجة كشبكة ، ولكن يبدو أن هذا هو Beeing الذي تم إلغاؤه من خلال حقيقة أن CacheManifest يسمى من الملف.

هل كانت مفيدة؟

المحلول

فكرة FUTTA صحيحة ، ولكن ما ستجده ربما هو أن قسم واحد فقط من صفحة الجبهة الخاصة بك يتغير في كثير من الأحيان. اترك هذا فارغًا ، ثم دعوا بقية الصفحة مخزنة مؤقتًا ولا تقلق بشأنه. عند زيارة الصفحة ، يتم استدعاء النسخة المخزنة مؤقتًا على الفور ، ويمكنك تشغيل برنامج نصي للاستيلاء على جزء الصفحة الديناميكي من الخادم وتعيينه باستخدام innerhtml لإكمال الصفحة. التأثير هو أنه لا يزال هناك طلب HTTP واحد (بالإضافة إلى واحد للبيان) ، لذلك ليس أبطأ ، ويمكن إضافة جزء من تطبيقك أثناء تنزيل القسم الديناميكي. إذا كنت ترغب في تحديث الصفحة بأكملها ، فاحرص على تعليق الإصدار ، وزيادة ذلك لإعادة تحميل التطبيق بأكمله.

نظيف و مرتب. أعتقد أن هذه هي الطريقة التي يهدف بها النظام إلى استخدامها ، دون محاولة تجنب القليل من JavaScript ، لأن ذلك بعد كل ما يمكنك من خلاله اللعب مع عدم الاتصال بالإنترنت والقيام بأشياء مفيدة مع التطبيق عند عدم الاتصال بالإنترنت.

نصائح أخرى

لدي نفس التجربة ، ولكن لدي الحلول التالية على قائمة TOD:

  • إنشاء بيان مع جميع الأصول الثابتة
  • قم بتضمين إشارة إلى هذا البيان في صفحة واحدة فقط من HTML (buildcache.php)
  • تحقق مما إذا كان window.applicationCache مدعومًا وإذا كان الأمر كذلك:
    • إعادة التوجيه مرة واحدة لكل جلسة إلى cache.html لإنشاء/التحقق/تحديث ذاكرة التخزين المؤقت
    • لديك buildcache.php عرض بعض المعلومات حول ما يتم القيام به (باستخدام actionCache EventListeners)
    • لديك buildcache.php إعادة توجيه إلى الفهرس العادي (حيث لم يتم تعريف البيان)

آمل (وادعى شخص ما أن هذا هو الحال في تعليق على مدونتي) أن جميع الصفحات الموجودة على نفس المجال ستستخدم الأصول الثابتة في ApplicationCache ، حتى لو لم تتم الإشارة إلى البيان في كل منها.

هناك حل آخر هو الحفاظ على الفهرس الخاص بك. نظرًا لأن البيان موجود في الفهرس.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top